2017-07-15 31 views
0

我不知道如何解決這個問題,因爲我使用的API具有平面數據結構,該平面數據結構基本上是原點,xy和z向量定義了一個平面。兩個窗格之間的平分線平面? C#

如果我有兩架飛機,我該如何找到平分面? 有沒有這種飛機的數學描述。

enter image description here

幾何我會通過計算飛機,然後不知道之間的交叉線如何定義一個點的方向是平面的解決這個問題。

任何幫助將不勝感激。

之前,我想這樣的事情,這得到了我想要的東西,但我不知道是否有沒有做交叉的解決方案:

public static Plane BisectorPlane(Plane a, Plane b) 
    { 
     Rhino.Geometry.Intersect.Intersection.PlanePlane(a, b, out Line lnA); 
     a.Translate(a.ZAxis); 
     b.Translate(b.ZAxis); 
     Rhino.Geometry.Intersect.Intersection.PlanePlane(a, b, out Line lnB); 
     return new Plane(lnA.From,lnA.To,lnB.PointAt(0.5)); 
    } 

我想知道是否有可能解決這個問題是不是幾何上(計算交點),但在數學上。

+0

我還以爲兩個平面之間的平分線是_LINE_因爲會有無數的飛機?例如a _book-end_ – MickyD

+0

幾何上,我用的方法是這樣的:1)相交兩個平面,你得到一條線2)通過z軸移動兩個平面並再次相交。 3)從第一行和第二行中間點構建平面。通過這種方式,我得到了我想要的正確飛機。也許它被稱爲不等分線。但有沒有其他的方式來做到這一點沒有交集? – Petras

回答

0

你已經有了一條路口。現在在這條線上選擇任何點P作爲基點。此線(dL的單元的

獲取總和給定平面小號法線

獲得方向矢量。這是矢量躺在平分面與垂直於交線

S =(a.normal + b.normal)

現在計算得出svector productdL的得到正常

BisectorN = dL x S 

如果需要,將其歸一化(使單位長度除以其長度)

bN = BisectorN.Normalize 

基點P和普通bN定義平分面。

0

我試過你的方法,它給平分面。但問題是,飛機轉移,因爲它是從起源和正常的構建,而不是從原點和兩個X和Y軸:

 Point3d origin = lnA.PointAt(0.5); 
     Vector3d S = a.Normal + b.Normal; 
     Vector3d dL = Vector3d.Subtract((Vector3d)lnA.From, (Vector3d)lnA.To); 
     Vector3d BisectorN = Vector3d.CrossProduct(dL,S); 
     BisectorN.Unitize(); 

     return new Plane(origin, BisectorN); 

enter image description here

+0

你是什麼意思?兩張照片看起來相似。 – MBo

+0

看看綠色和紅色軸 - x和y軸 – Petras

+0

這些軸的方向與預期的方向不同嗎? – MBo

相關問題