私はいくつかの基本的なレイトレーシングを試みていますが、私は2Dグラジエント(dybydxと呼ばれています)を持っています。私は、0.5,0.5の正方形の中心から辿り、勾配に垂直な追加の痕跡を設定して観測フィールドを増やしたいと考えています(~< 0.5)。私はかなりfpの算術演算に新しいです、これは私がデバッグするときに頭が引っかかる原因になります。任意のグラデーションを90度回転させるアルゴリズム
私は次のコードは、残りの部分を説明願っています:
if (incX) {
if (incY) {
if (cclockwise) {
x -= System::Math::Sin(theta)/2;
y += System::Math::Cos(theta)/2;
} else {
x += System::Math::Sin(theta)/2;
y -= System::Math::Cos(theta)/2;
}
} else {
if (cclockwise) {
x += System::Math::Cos(theta)/2;
y += System::Math::Sin(theta)/2;
} else {
x -= System::Math::Cos(theta)/2;
y -= System::Math::Sin(theta)/2;
}
}
} else {
if (incY) {
if (cclockwise) {
x -= System::Math::Cos(theta)/2;
y -= System::Math::Sin(theta)/2;
} else {
x += System::Math::Cos(theta)/2;
y += System::Math::Sin(theta)/2;
}
} else {
if (cclockwise) {
x += System::Math::Sin(theta)/2;
y -= System::Math::Cos(theta)/2;
} else {
x -= System::Math::Sin(theta)/2;
y += System::Math::Cos(theta)/2;
}
}
}
私は紙の上でのラウンドと象限ラウンドしてきたが、私はWindowsは、従来のy軸を逆に忘れてしまった(私は時計回りISN」だと思ったので、何tですが、これは任意のエラーであり、重要ではありません)。私が本当に好きなのは、グラデーションを90度回転させることはできません。ありがとう。
編集 - thetaは、グラデーションが(用紙上で)作る水平から水平方向の角度です。
edit_incXとincYは、元のグラデーション(実際には本当に)がXとYでそれぞれ増加していることを意味します。
[Rotation matrix](http://ja.wikipedia.org/wiki/Rotation_matrix)は、問題の出発点です。 –
...それはまさに@dario_ramosの機能です。ところで、[剪定、拡大縮小または反映する行列](http://ja.wikipedia.org/wiki/Transformation_matrix)ベクトルもあります。 –