對於WPF和c#中的兩條線或兩條路徑或兩個點列表作爲形狀,是否有人有一個想法如何檢測交叉點並繪製圓形交叉點以使其清楚地看到這兩個線路沒有連接(MS visio)? 我只需要這樣做的原則,但有些代碼會有所幫助。謝謝。線條交叉點
Q
線條交叉點
0
A
回答
1
從this related question,基本上你可以認爲你的線段是點和矢量的組合。您可以通過選擇一個作爲「原點」並從另一個點的X和Y中減去X和Y,生成「delta」,從而獲得兩點。對其他線段做同樣的事情。
現在,如果這兩個向量交叉,將會有兩個標量可以應用,每個向量一個,以產生與相應向量共線的較短向量,並將表示X和Y中的增量在原點和交叉點之間。這些標量可以通過兩個向量的叉積的函數來找到;看到相關的問題,確切的數學。最後,爲了使兩條線段相交,相交的矢量必須在其原始定義的長度內完成;也就是說,代表向量交點矢量長度的兩個標量必須是0 < s < 1
。
1
有一種均勻座標的方法,可以輕鬆獲得您想要的。來表示一個點P1
使用Vector3
並使z
座標等於1.
P1 = [x1, y1, 1]
P2 = [x2, y2, 1]
線連接兩點是L12 = CROSS(P1,P2) = [a, b, c]
其中CROSS
是矢量叉積,並使用該線的方程爲a*x+b*y+c=0
。
現在,如果你有兩行
L12 = [a,b,c]
L34 = [e,f,g]
這兩條線的交叉點Q = CROSS(L12,L34) = [qx,qy,qw]
座標
x = qx/qw
y = qy/qw
例子:兩行,L12
連接點(1,1)
到(2,8)
和L34
連接點(4,-2)
到(9,3)
。找到兩條線的交點。
L12 = CROSS([1,1,1], [2,8,1]) = [-7, 1, 6] //eq: -7*x+y+6=0
L34 = CROSS([4,-2,1], [9,3,1]) = [-5, 5, 30] //eq: -5*x+5*y+30=0
Q = CROSS([-7,1,6], [-5,5,30]) = [0, 180, -30]
x = 0/(-30) = 0
y = 180/(-30) = -6
GeoGebra截圖:
相關問題
- 1. 檢測線的交叉點
- 2. 3D線段框交叉點
- 3. 矩形射線交叉點
- 4. 線段交叉點(僅限交叉點,不接觸)
- 5. 兩條線的點交點
- 6. Android:找到一條線和一個圖像的交叉點
- 7. 兩條LineString的交叉點Geopandas
- 8. 計算兩條路徑的交叉點
- 9. Android中的線路交叉點渲染
- 10. 光線跟蹤盒交叉點
- 11. 在交叉點上顯示垂直線
- 12. 平面射線交叉點C#
- 13. Three.js射線物體交叉點
- 14. pascal中的線路交叉點代碼
- 15. 單點交叉
- 16. Matlab:兩條線的交點
- 17. 查找2條曲線與區域的交叉點的曲線下到交點W的右/數學
- 18. Ray-Capsule交叉點
- 19. 交叉原點域
- 20. 查找交叉點
- 21. 條件下交叉連接
- 22. 交叉引用MySQL條目
- 23. SQL Server條件交叉表
- 24. 與條件交叉連接
- 25. 安卓拉線愨點開始交叉線間結束
- 26. 圖表:帶狀線和曲線交叉點
- 27. ROC曲線交叉驗證
- 28. D3線路徑交叉
- 29. 查找線交叉算法
- 30. 交叉線程問題? C#
你需要在數學或WPF的幫助? – emesx
你的線條代表了什麼? –
可能的重複:http://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect – KeithS