■91397 / inTopicNo.7) |
Re[5]: ラインに近づくとカーソルを変更する |
□投稿者/ ぼーちゃん (10回)-(2019/06/20(Thu) 18:15:39)
|
https://qiita.com/boiledorange73/items/bcd4e150e7caa0210ee6
URLのプログラムをVB.NETで書いただけですが、
以下で線分 p1-p2と点p0の距離を取れます。
この返り値が一定以下の時に処理をすればよいでしょう。
p1, p2へラインの始点座標と終点座標を渡せるよう、
ドラッグ操作処理の終わりなどで座標を保持しておく必要があります。
Private Function GetDist(p0 As Point, p1 As Point, p2 As Point) As Double
Dim a = p2.X - p1.X
Dim b = p2.Y - p1.Y
Dim a2 = a * a
Dim b2 = b * b
Dim r2 = a2 + b2
Dim tt = -(a * (p1.X - p0.X) + b * (p1.Y - p0.Y))
If tt < 0 Then Return (p1.X - p0.X) * (p1.X - p0.X) + (p1.Y - p0.Y) * (p1.Y - p0.Y)
If tt > r2 Then Return (p2.X - p0.X) * (p2.X - p0.X) + (p2.Y - p0.Y) * (p2.Y - p0.Y)
Dim f1 = a * (p1.Y - p0.Y) - b * (p1.X - p0.X)
If f1 > 40000 Then Return Double.MaxValue 'f1*f1がオーバーフローしないようf1一定以上で足切り
Return f1 * f1 / r2
End Function
|
|