首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检测线上/线周围的点(带有一定偏移量)

如何检测线上/线周围的点(带有一定偏移量)
EN

Stack Overflow用户
提问于 2014-02-11 15:07:55
回答 4查看 109关注 0票数 0

从点A到点B画一条线,设d为偏移量。设C是要测试的点。

我将用offset做一次命中测试。

如何在具有给定偏移量的行周围进行命中测试。

例如:A= (10,10),B (30,30),偏移量= 2。选择C作为任意点。请参考链接中的图片。

http://s10.postimg.org/6by2dzvax/reference.png

请帮帮我。

提前谢谢。

EN

回答 4

Stack Overflow用户

发布于 2014-02-11 15:22:02

查找C的偏移量。例如dx1和dy1。如果dy1/dx1=dy/dx,则C命中目标。对于段,您还应该检查是否dx1 < dx或dy1 < dy。

票数 0
EN

Stack Overflow用户

发布于 2014-02-11 17:32:50

换句话说,您希望检查指针C是否在某个尺寸为2*d|A-B|+2*d矩形内。

您需要将行表示为u*x+v*y+w=0,这可以通过以下方式完成

代码语言:javascript
复制
u = A.y-B.y
v = B.x-A.x
w = A.x*B.y - A.y * B.x

那么C到那条线的(带符号)距离将是

代码语言:javascript
复制
d = (u*C.x + v*C.y +w) / sqrt( u*u+v*v)

abs(d)与您的偏移量进行比较。

下一步是检查C在直线方向上的位置。为此,您可以考虑正交线u2*x+v2*y+w2=0

代码语言:javascript
复制
u2 = v
v2 = -u
w2 = -u2*(A.x+B.x)/2 - v2*(A.y+B.y)/2

和距离

代码语言:javascript
复制
d2 = (u2 * C.x + v2 * C.y + w2 ) / sqrt( u2*u2+v2*v2 )

必须将此距离与line+offset的长度进行比较:

代码语言:javascript
复制
abs(d2) < |A-B| / 2 + offset
票数 0
EN

Stack Overflow用户

发布于 2014-02-11 21:03:28

一个方便的技巧是旋转和平移平面,使线段AB映射到线段(0, 0)-(0, L) (就像在图像上一样),L是线段长度。

如果您将相同的转换应用于C,那么测试矩形中的包含就非常简单了。

这个有用的转换由以下代码给出:

代码语言:javascript
复制
x = ((X - XA).(XB - XA) + (Y - YA).(YB - YA)) / L
y = ((X - XA).(YB - YA) - (Y - YA).(XB - XA)) / L
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21695360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档