我有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靠近舊插座