したがって、空間P内の点と法線Nによって定義される平面があります。平面の「下り坂」を直接指す、法線ベクトルを見つけたいと思います。これをどうやって理解するのですか?
2 に答える
わかりましたので、空間内の点の位置は必要ありません。あなたがする必要があるのは、平面の法線ベクトルと、「下」と定義したベクトルとの外積を取ることです。これにより、それらの両方に垂直なベクトルが得られます。つまり、平坦な勾配で斜面を横切ります。次に、この新しいベクトルと法線とのクロス積を再度取ると、必要な「下り坂」のベクトルが生成されます。これは、最大の下向きコンポーネントを持つ斜面に平行なベクトルです。
したがって、法線ベクトルと下向きベクトルが単位長であり、* 演算子が外積を表していると仮定します。
gradient = (normal * down) * normal;
「ダウン」ベクトルがちょうど(0, 0, -1)
であり、ほとんどのアプリケーションに適用される場合、次の値を割り当てることにより、コードでこの計算を簡素化できます。
gradient.X = normal.X * normal.Z;
gradient.Y = normal.Y * normal.Z;
gradient.Z = -(normal.X * normal.X) - (normal.Y * normal.Y);
これは負の勾配ベクトルだと思います。勾配は「上り坂」の接線ベクトルである必要があるため、それが平面であることを考えると、「下り坂」の接線ベクトルであることを否定する場合。だから、もし
PLANE : z = ax + by + c where N = <a,b,c>
grad(z) = <d/dx(ax + by + c),d/dy(ax + by + c)> = <a,b>
-grad(z) = <-a,-b>
したがって、「下り坂」の接線は<-a,-b> である必要があります。
降下率の解決は、読者の演習として残します:D
位置 P は勾配の決定には関係ないことに注意してください。
編集:実際、私は自分自身に矛盾しなければならないと思います. 法線ベクトルが「上」を指している平面を「下」に見た場合(スキー場からまっすぐ突き出た旗竿のように)、「下り坂」の接線ベクトルは実際には N のXY 平面、したがって t = . ただし、グラデーションがうまくいかなかった理由はよくわかりません。もちろん、これは、c < 0 の場合、下が上であることを意味します ;)