我有3个点和他们的坐标。如果第三点位于创建线条和靠近线条的线条之间,我想要找到它们中的两条。图1显示了我可以使用公式来查找点是否共线的情况。在图2中,A和B之间有一条线。我想检查let的范围内的点,例如15px,并且发现C点在A和B之间,并且接近该线并忽略D点,因为它很远从行。靠近线的点铺设
Q
靠近线的点铺设
2
A
回答
3
执行点C
的正交投影线AB
并找到投影点P
:最接近C
点线AB
的。现在,您需要做的就是使用段CP
的长度来确定C
离线的距离。并且使用关于A
和B
的P
的位置来确定C
是否是“在”A
和B
之间。
点到线上的正交投影是计算几何中的标准原始操作。举一个例子,参见Wolfram World。
我会做这种方式:
- 线
AB
的法向量是(By - Ay, -(Bx - Ax))
加入这个向量指向
C
并获得点C'
C'x = Cx + By - Ay C'y = Cy - Bx + Ax
找到线
AB
的intersection和线CC'
。交点是您的投影点P
。
4
点Ç从线段AB 的距离的vector(A,C)
的cross_product与unit_vector(A,B)
的length。
也就是说(在伪代码),
def vec_length(x,y) = sqrt(x*x + y*y)
def unitvec(ax,ay,bx,by) = (dx/m, dy/m)
where dx = bx - ax
dy = by - ay
m = vec_length(dx,dy)
def dist_segm(cx,cy,ax,ay,ux,uy) = abs(dx*uy - dy*ux)
where dx = cx - ax
dy = cy - ay
要找出Ç是否“之间” 一个和乙就可以计算出dot_product
(vector(A,C), unit_vector(A,B))
,看看它是否比vector_length(A,B)
小(但是积极的)。无论如何,你计算vector_length(A,B)
作为计算unit_vector(A,B)
的一部分。
这种方式在计算上效率最高。
相关问题
- 1. 点靠近对角线
- 2. 找到最靠近的一条线
- 3. 靠近
- 4. 无法解析在线(靠近“ - [setRouter,['@ router']]”)
- 5. MySQL错误1064:在靠近1号线
- 6. iBeacon靠近不可靠
- 7. android.database.sqlite.SQLiteException:靠近“mimetype”
- 8. 当节点靠近时启动动画
- 9. 当iOS设备靠近某个地图点时运行操作
- 10. 存储靠近原点聚集的2D点的数据结构?
- 11. 最近的点对点,最近点到线
- 12. 靠近WHERE的SQL语法?
- 13. 错误的语法靠近');
- 14. 靠近OUTPUT的SqLite错误
- 15. jquery自动完成店铺附近的店铺
- 16. 查找点接近,该线
- 17. 找到靠近路线的前n个地方
- 18. 在IE6/7中靠近并重叠的虚线边框边框
- 19. SQL语法错误:靠近“。”?
- 20. 差异上,靠近在Java
- 21. SQLiteException:在Android 2.1中靠近“''”
- 22. 将Ylabels彼此靠近
- 23. 使文字更靠近div
- 24. 靠近用户排序
- 25. 麻烦靠近ATM列表
- 26. 鼠标靠近对象Javascript
- 27. 图源靠近标签
- 28. Xamarin - 靠近位置获取
- 29. 靠近物体。 Django + Badoo
- 30. asyncore靠近旧插座