二次曲面とトーラス

2022/4/20(水)
二次曲面とトーラス
 
レイトレーシングで使えるプリミティブ
球、二次曲面、トーラス(torus)を紹介します
各プリミティブまでの距離tを求める式と
プリミティブ上の点P(x,y,z)での法線方向
ベクトルFの式を
最後尾の1.~5.の図に載せています
 
以下、1.~5.の式の説明です
 
ここではベクトルv(上に矢印)をV(大文字)で表す事にします
 
1. 始点Vから視線単位ベクトルE方向に見た
原点が中心の半径rの球までの距離tを求める
 
(原点が中心以外の球は、球と始点を平行移動
させ中心を原点に持ってくれはよい)
 
球はx2+y2+z2=r2 で表せます
ベクトルP=(x,y,z)で表すと
|P|=x2+y2+z2 なので |P|=r です
(位置ベクトルPの長さがrの位置の集まり)
 
始点Vから視線(単位ベクトル)E方向に見た
|P|=r までの距離tを求められれば
交点も分かり、
レイトレーシングに必要な値を計算できます
(法線ベクトルは中心から交点の方向です)
 
詳しくは、
https://ulprojectmail.blogspot.com/2021/06/n88-basic-1.html
N88-BASICでレイトレーシング (1回目)
~で解説しています
 
2. 二次曲面の場合
二次元の場合は
x2/12 + y2/12 = 1が円
x2/a2 + y2/b2 = 1が楕円
x2/a2 - y2/b2 = 1が双曲線
のように、a,bの値やa2,b2の符号によって
形がかわります
 
法線は
x2/a2 + y2/b2 + z2/c2 = 1を
f(x,y,z) = 0の形に変形し
f(x,y,z) = x2/a2 + y2/b2 + z2/c2 - 1
とすると
法線方向(勾配)
grad f = (∂f/∂x,∂f/∂y,∂f/∂z)
∂f/∂xは偏微分で、fをxの関数とみなして
xで微分することです
∂f/∂x = (d/dx)(x2/a2 + y2/b2 + z2/c2 - 1)
= 2x/a2 
よって
(2x/a2,2y/b2,2z/c2)
方向なので大きさを無視すると
法線方向F = (x/a2,y/b2,z/c2)となる
これの単位ベクトルが法線ベクトルN = F/|F|
となります
 
ここで、球とは違い2次曲面には方向があるので
視点と視線を、平行移動と回転をさせて
任意の形を表示させます
 
平行移動と回転は
https://ulprojectmail.blogspot.com/2021/06/n88-basicmatrix-1.html
N88-BASICで行列(matrix) (1回目)
~を見て下さい
他に、クォータニオンやJavaScriptなどでも説明しています
 
3. トーラス
トーラスは4次方程式なので、解くには
ニュートン法、ハレー法、フェラーリの公式
などで解きます
 
4. トーラスの法線方向です
 







































5. トーラスまでの距離tを求める式の導出過程です






































このブログの人気の投稿

NEWS

N88-BASICでゲーム (1回目)