2017-01-27 49 views
0

我可以想到兩種創建Ellipse類的方法。如何用任何語言描述適用於3D(幾何,渲染器,物理)的橢圓

在數學中,橢圓由兩個焦點和主或半長軸長度描述。

的典型結構是這樣的:

  • FOCUS1:的Vector3D
  • FOCUS2:的Vector3D
  • semiMajorAxis:雙
  • planeNormal:的Vector3D

然而,我發現它是次優的,因爲99%的時間,我並不真正關心焦點。

看起來很難弄清楚如何與線條/光線相交或執行投影。

相反,我會將一個橢圓表示爲一個沿着矢量的拉伸圓。

的結構將是這樣的:

  • 中心:的Vector3D
  • 半徑:雙
  • stretchVector:的Vector3D(沿其被應用的拉伸軸)
  • stretchRate:雙
  • planeNormal:Vector3D

想法是執行所有的測試/痕跡/投影,就好像它是針對一個圓圈完成的,只需在將值發送到我的圓圈方法之前進行縮放。

但是我缺乏這領域的經驗,所以我不知道哪一個是:

  • 的更容易使用
  • 更快的計算(這是3D,所以我需要好的perfs)

編輯:其實我需要橢圓形的體積的面(圓筒段,錐體秒而不是運動)。所以我的主要用途是光線投射或與線條,平面,圓形,其他橢圓等相交......

+0

對於3D還需要法向矢量橢圓面中 – MBo

+0

你也可以參考幾何工具/野生魔術庫在'的https://www.geometrictools。幾何工具爲 Computer Graphics'找到有效的方法 – MBo

+0

是的,我忘了它。編輯;) – cronvel

回答

1

橢圓的形狀由長軸a和短軸b的長度定義。接下來,通過中心點C和歸一化爲長度爲1的法向量n_0定義包含平面可能是一個好主意。您需要的其餘信息是主軸的方向。這可以通過與指定平面中的默認線的角度來指定,但我不知道這是一種自然而有效的方式。所以我會選擇指定主軸的方向矢量v_a。這引入了一些冗餘,因爲n_0 . v_a = 0必須保留,另外還有|v_a| = 1|v_a| = a(第一個條件對於您的需求更有效)。短軸的方向矢量v_b可以從上面的信息計算出來,但爲了效率,人們可能更願意預先計算它。

產品總數人們可以在3D表示的橢圓具有下列數據:

  • a, b:長軸和短軸,RESP的實際值指定的長度。
  • C:三維點,橢圓
  • n_0的中心:3D矢量,含有平面
  • v_a, v_b的法線向量:3D矢量指定主要和次要,RESP的方向。

滿足以下條件:

  • a >= b > 0
  • |n_0| = |v_a| = |v_b| = 1
  • n_0 = v_a x v_b
  • v_a . v_b = 0

一個高效的相交測試,現在可以做到這樣:

  1. 計算例如例如以下的點的交點P。包含由Cn_0定義的包含平面的射線。
  2. 通過計算P* = M . (P-C)(請參見下面的2x3矩陣M的定義),將交點P轉換爲2D(中心=(0,0),長軸平行於x軸)的標準橢圓位置。
  3. 通過計算P** = (b/a P*_x, P*_y)
  4. 變換橢圓於半徑b圓現在P是當且僅當以下保持原始3D-橢園內:P**_x^2 + P**_y^2 <= b^2

變換矩陣M簡直是

/v_a_x v_b_x n_0_x \ 
\ v_a_y v_b_y n_0_y/
+0

感謝您的回覆。請你能解釋爲什麼這比使用2個焦點的定義更好,特別是對於線條,平面,圓和其他橢圓的光線投影和相交? – cronvel

+0

@cronvel好吧,現在我得到你的實際問題。看到我添加的提示。 – coproc

+0

@cronvel我已經添加了一個簡單的步驟路口測試 – coproc

0

如果你做物理學,你應該關心焦點,因爲這與這樣的設置高度相關。在這種情況下,請參見orbital elements以瞭解如何描述橢圓。您需要這樣的參數化,例如,你想要得到一些天體​​的速度。

也就是說,我認爲在三維橢圓的最簡單的非物理描述可能是以下:

x(t) = a + cos(t) b + sin(t) c 

這裏a是中心的位置,b是從中心到所述載體半長軸的末端,c是半長軸的中心到末尾的矢量。你會期望bc彼此垂直,即有點積零。對於t∈[0,2π)這會給你橢圓的所有點,許多幾何性質可以用取決於t的條件來描述,所以你可以解決t

+0

感謝您的回覆。實際上我需要橢圓作爲體積(圓柱體部分,錐體部分)的面而不是運動。所以我的主要用途是光線投射或與線條,平面,圓形,其他橢圓等相交...... – cronvel

+0

@cronvel:作爲堅實的身體表面的曲線聽起來不對。你應該有一個表面。我想我會在這些情況下進行隱式描述:表面上所有點滿足的* x,y,z *中的一些方程。 – MvG