我正在研究一個簡單的光線追蹤器,我需要找到一個圓柱交點,我找到了一個適合我的方程。盡管如此,我還是不明白它背后的數學原理,公式是:
為了擊中圓柱體,我們注意到:

我使用以下公式的網站:

定義:
- C是圓柱體的起始帽點
- V 是一個單位長度向量,它決定了圓柱體的軸
- r 是圓柱體的半徑
- maxim 確定圓柱體的端蓋點
為了擊中圓柱體,我們注意到:
A = C V*m
( P-A )|V = 0
len( P-A ) = r
其中 m 是一個標量,用于確定軸上離碰撞點最近的點。PA向量垂直于V,這保證了到軸的最近距離。PA 是圓柱體的半徑。
解決方案:
(P-C-V*m)|V = 0
因為 p -c 垂直于 V。
我們需要找到m?
(PC)|V = m*(V|V)
讓 (len(V)=1)
m = (P-C)|V
我們有: p - c = D *t x
所以:
m = (D*t X)|V
展開我們達到的結果:
m = D|V*t X|V
現在讓我們求解圓柱體的方程:
len(P-C-V*m) = r
用它們的值替換 m 和 pc,我們得到:
dot( D*t X - V*(D|V*t X|V) ) = r^2
因為向量與自身的點積是該向量的平方。
我們用 (t) 分解我們得到:
dot( (D-V*(D|V))*t (X-V*(X|V)) ) = r^2
如果我們從以下內容開始,我們有一個一般規則:
dot( A-V*(A|V) )
我們最終得到這樣的結果:
A|A - (A|V)^2
然后我們將這條規則應用于之前的行,我們替換
dot( (D-V*(D|V))
和:
D|D - (D|V)^2
我們在其中為我們移動的 A 填寫 D 和 X:
dot( (D-V*(D|V))*t (X-V*(X|V)) ) = r^2
至:
dot( (D|D - (D|V)^2)*t (X|X - (X|V)^2) ) = r^2
所以公式可以寫成:
(A B)^2 = A^2 B^2 2AB
所以我們的最終公式是:
dot( (D|D - (D|V)^2)*t (X|X - (X|V)^2) ) = (D|D - (D|V)^2)t^2 2 * t * (D-V*(D|V))|(X-V*(X|V)) (X|X - (X|V)^2)
所以我們達到:
(D|D - (D|V)^2)t^2 2 * t * (D-V*(D|V))|(X-V*(X|V)) (X|X - (X|V)^2) - r^2 = 0
所以這個公式是一個二次公式,形式為:
a*t^2 b*t c = 0
可以使用以下方法解決:

所以我們可以提取三個引數a、b和c:
a = D|D - (D|V)^2
c = X|X - (X|V)^2 - r^2
b = 2 * (D-V*(D|V))|(X-V*(X|V)) =
= 2 * (D|X - D|V*(X|V) - X|V*(D|V) (D|V)*(X|V)) =
= 2 * (D|X - (D|V)*(X|V))
我希望這個解釋會對某人有所幫助。
uj5u.com熱心網友回復:
對不起,我不能完全遵守原來的符號;我將點用于點積和標量乘法。無論如何,我希望它有所幫助。
讓我們首先得到一個點P到圓柱軸的距離的公式,向量方程C m.V。我們找到與正交的m這樣,通過PCV
(PC m.V).V = 0,
給予
m = - PC.V.
現在,PC 的平方范數是平方半徑,我們得到
r2 = (PC - (PC.V).V)2 = PC2 - (PC.V)2.
如果我們考慮一條原點A和方向的射線D,讓A t.D,我們有二次方程t
r2 = (AC t.D)2 - (AC.V t.D.V)2.
繼續展開得到二次三項式的系數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/512740.html
