2012-02-04 44 views
0

我一直在尋找一天,無法找到我所需要的幫助。罕見情況:段和點基於平面交會c#

關於-lines-和-planes-有很多建議和解決方案,但關於-segments-和-planes-的內容很少,特別是關於通過法線和點定義的平面沒有任何關係。一個平面的一般參考是通過一個法線和一個距離,而我的平面是一個3d點和一個法線。

基本上,我需要幫助瞭解我需要確定由兩點形成的線段的平面相交。

Vector3 point1 = new Vector3 (-4,-5,-6); 
Vector3 point2 = new Vector3 (5,3,2); 
          //normal   //point 
Plane plane1 = new plane (new Vector3(0,0,1), new Vector3(4,2,1)); 

Vector3 intersection = ??? 

確定是否有交集是相對容易由於點積點距離,但儘管我努力的交集公式躲開我,因爲事情是一個「正 - 距離」平面定義以及「正常明顯不同,因爲我得到的結果不是'在飛機上',而是在它的前面和後面,所以我認爲這個點的定義是'平面定義'。

任何幫助表示讚賞。

謝謝。

回答

1

可以將點+正常轉換成正常+距離

設N是正常(歸一化到單位長度)。距離d = -n.p(與您擁有的點的點積)。請看這裏http://mathworld.wolfram.com/Plane.html

該段與該行沒有太大的不同。你可以爲線和平面交點方程做基本的事情,然後嘗試如果平面相交的點或一組點也屬於你的線段。可能有更高效的方法,但最簡單的方法就是添加一個檢查來查看用普通線獲得的交集結果是否包含段。

+0

非常感謝,我已經重構了自問題以來,但距離轉換的一點是知道的有用的東西:) – roamcel 2012-02-24 07:53:32