我知道如何計算一個射線平面相交,但是如何測試交點是否在該平面上的一個正方形內?我正在測試這個點是否在離廣場中心的一段距離內,但我不確定這是否正確。Ray-square十字路口3D
0
A
回答
0
答案取決於你的廣場是如何定義的。
如果正方形是軸對齊,這是不夠檢查
(P.X >= Square.Left) and (P.X <= Square.Right) and
(P.Y >= Square.Top) and (P.Y <= Square.Bottom)
如果正方形旋轉時,使點的投影到兩個相鄰的邊緣,並檢查它們在邊緣範圍。
1
這裏是任何凸多邊形奏效的方法: (見方塊簡化版本,在回答結束)
讓P1,P2,P3,P4表示你的正方形的四個頂點,讓q表示射線和支撐平面之間的交點。令n表示 與支撐平面垂直的向量(例如,取交叉積(p2-p1)x(p3-p1))。
要確定是否q被在廣場上,計算出以下四個量:
o1=orient(q,p1,p2,n)
o2=orient(q,p2,p3,n)
o3=orient(q,p3,p4,n)
o4=orient(q,p4,p1,n)
其中
orient(a,b,c,n) = [(b-a) x (c-a)] . n
x: cross product; .: dot product
如果O1,O2,O3和O4都相同的符號,那麼q是在廣場上(P1,P2,P3,P4)
它也適用於任何凸多邊形(P1,P2,P3,P4,...,PN)
它是如何工作:
如果你是2D,你會計算:
o1 = det(p1-q, p2-q)
o2 = det(p2-q, p3-q)
o3 = det(p3-q, p4-q)
o4 = det(p4-q, p1-q)
其中det(v1,v2) = (x1*y2)-(x2*y1)
表示兩個向量之間的決定因素。
在英語中,如果o1,o2,o3,o4具有相同的符號,例如正數,則表示角度(p1,q,p2)爲「左轉」。如果所有角度(p1,q,p2),(p2,q,p3),(p3,q,p4)和(p4,q,p1)左轉,則q在多邊形內。每當它在外面時,有一個邊(pi,pj)使得(pi,q,pj)進行「右轉」。
現在,如果我們在3D的任意平面中,不再有像「左轉」和「右轉」這樣的事物,但我們可以引入法向量n,並且測試(q-p1, q-p2,n)是正面或負面的3D基礎(這是orient()
計算的結果)。
特殊情況下爲方形
計算
X = (q-p1).(p2-p1)/||(p2-p1)||
Y = (q-p1).(p3-p1)/||(p3-p1)||
如果X >= 0 && X <= 1 && Y >= 0 && Y <= 1
然後q是在廣場上(見姆博的答案)。
相關問題
- 1. Three.js十字路口raycaster
- 2. 十字路口 - 信封
- 3. ORM工具 - 十字路口?
- 4. XNA:只在初始路口叫做矩形十字路口
- 5. 如何使用十字路口JS?
- 6. 查找十字路口無節點
- 7. Boardgame-Map與十字路口等
- 8. 十字路口MATLAB,多根根
- 9. 十字路口上的線程同步
- 10. CGAL十字路口返回假結果
- 11. 如何檢查十字路口按鈕
- 12. Rails 3 - 如何製作十字路口? (路由)
- 13. 一套高效的3D路口算法
- 14. Firebase和十字路口的用戶配置文件
- 15. Rails競賽條件唯一性十字路口日期
- 16. 十字路口有時並沒有發生
- 17. 十字路口兩個數組來了空
- 18. 在php中的多個時間十字路口
- 19. Ray-plane十字路口找到交點的Z點
- 20. Python中的三維幾何拓撲(例如十字路口)
- 21. 許多一對多和多對一的許多十字路口
- 22. android:谷歌地圖改變drivng路線在十字路口的顏色
- 23. 平均3D路徑
- 24. 十六進制數字串口
- 25. 3D視口大小
- 26. 視口3D WPF C#
- 27. 速度更快:從虛擬基地還是十字路口向下投射?
- 28. 林試圖從一個十字路口減去一個汽缸openscad
- 29. 你知道如何在阿根廷獲得Google Maps十字路口嗎?
- 30. Ansible 2字典路口
如果你正在測試一個點是否與中心的距離是不是半徑,I.E.測試一個圓圈?你可以在你的代碼中編輯這個測試嗎? – Knells