我正在嘗試一些基本的射線跟蹤,我有一個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」噸,但這是一個任意的錯誤和不重要的)。我真正想要的是以任何方式將我的漸變旋轉90度的傻瓜式方法。謝謝。
edit - theta是從水平到+ ve軸的角度,即梯度在紙上產生的角度。
edit-- incX和incY表示原始漸變(真的,真的)在X和Y中分別增加。
A [旋轉矩陣](http://en.wikipedia.org/wiki/Rotation_matrix)是您的問題的一個很好的起點。 –
...這正是@dario_ramos所做的。順便說一下,還有[矩陣剪切,縮放或反射](http://en.wikipedia.org/wiki/Transformation_matrix)向量。 –