从点A到点B画一条线,设d为偏移量。设C是要测试的点。
我将用offset做一次命中测试。
如何在具有给定偏移量的行周围进行命中测试。
例如:A= (10,10),B (30,30),偏移量= 2。选择C作为任意点。请参考链接中的图片。
http://s10.postimg.org/6by2dzvax/reference.png
请帮帮我。
提前谢谢。
发布于 2014-02-11 15:22:02
查找C的偏移量。例如dx1和dy1。如果dy1/dx1=dy/dx,则C命中目标。对于段,您还应该检查是否dx1 < dx或dy1 < dy。
发布于 2014-02-11 17:32:50
换句话说,您希望检查指针C是否在某个尺寸为2*d和|A-B|+2*d矩形内。
您需要将行表示为u*x+v*y+w=0,这可以通过以下方式完成
u = A.y-B.y
v = B.x-A.x
w = A.x*B.y - A.y * B.x那么C到那条线的(带符号)距离将是
d = (u*C.x + v*C.y +w) / sqrt( u*u+v*v)将abs(d)与您的偏移量进行比较。
下一步是检查C在直线方向上的位置。为此,您可以考虑正交线u2*x+v2*y+w2=0和
u2 = v
v2 = -u
w2 = -u2*(A.x+B.x)/2 - v2*(A.y+B.y)/2和距离
d2 = (u2 * C.x + v2 * C.y + w2 ) / sqrt( u2*u2+v2*v2 )必须将此距离与line+offset的长度进行比较:
abs(d2) < |A-B| / 2 + offset发布于 2014-02-11 21:03:28
一个方便的技巧是旋转和平移平面,使线段AB映射到线段(0, 0)-(0, L) (就像在图像上一样),L是线段长度。
如果您将相同的转换应用于C,那么测试矩形中的包含就非常简单了。
这个有用的转换由以下代码给出:
x = ((X - XA).(XB - XA) + (Y - YA).(YB - YA)) / L
y = ((X - XA).(YB - YA) - (Y - YA).(XB - XA)) / Lhttps://stackoverflow.com/questions/21695360
复制相似问题