OpenGL / C ++で円錐をレイトレーシングするプログラムを書いています。強度を計算するには、表面の法線を知る必要があります。底辺の半径、高さ、中心の座標を指定して、表面の法線を計算するにはどうすればよいですか。
2 に答える
サーフェス上の点を指定して、サーフェスの法線を見つける必要があると思います。さらに、これは、底面が下を向き(-y軸)、円錐の点が上を向く(+ y軸)ように方向付けられた円錐であると想定しています。これらの条件のいずれかが当てはまらない場合は、状況に合わせて回答を編集できます。
表面上の点P、中心座標C、半径r、高さh、法線Nと呼びましょう。
すべての点とベクトルには3つの成分(x、y、z)があるため、「。」を使用してこれらを参照します。たとえば、PxはPのxコンポーネントです。
まず、CからPを指すx/z平面に投影された単位ベクトルが必要です。
Vx = Px-Cx
Vy = 0
Vz = Pz-Cz
このベクトルの方向は正しいですが、大きさが1より大きくなっています。まだ単位ベクトルではないので、それに応じてスケーリングする必要があります。
m = sqrt(Vx 2 + Vz 2)
mはVの大きさであり、これを使用してVをスケーリングします。
Vx / = m
Vz / = m
法線を見つけるための最終的な計算は...
Nx = Vx * h / r
Ny = r / h
Nz = Vz * h / r
コーンを下向きにしてオープニングエンジェル(α)を持っている場合は、hをベースにして(+ z)。あなたは詐欺の上にあなたの共同システムを選ぶことができます。これは、円錐が先のとがった部分でバランスが取れていることを意味します。
この場合、このサーフェスの通常のコンポーネントの一般的な式を導き出すことができます。
ステップ1:
通常のi球面座標(e_r、e_θ、e_φ)を表します。ここで、すべてのコンポーネントは単位ベクトルであり、θは方位角として定義されます。
結果->e_θ(θ==α、φ)
磁化Mや電束など、この形状の他のプロパティを使用する場合。このi円筒座標を簡単に変換できます。
ステップ2:
e_θ==-sin(θ)e_z + cos(θ)e_s(φ)そこにθ==α。