计算变换平面所需的旋转



我目前正在尝试在等轴测(html5画布2d上下文)中渲染多边形网格
我的工作几乎完成了,只是我找不到正确的计算/算法来找到平面旋转。

在例子中,平面A和B由2向量Ox,Oy 定义

var planeA = {
Ox: {
x: 1,
y: -2,
x: 1,
}, Oy: {
x: 1,
y: -1,
z: 0,
}
}
var planeB = {
Ox: {
x: 0,
y: 1,
x: 0,
}, Oy: {
x: 0,
y: 0,
z: -1,
}
}

我想找到α(绕Ox旋转)、β(绕Oy旋转)和γ(绕Oz旋转)应用于平面A,使平面A与平面B具有相同的法线。

首先,通过取向量的叉积,然后归一化来找到法线。

要取Ab两个向量的叉积,请使用以下公式:

Cx=Ay*Bz-Az*By
Cy=-Ax*Bz+Az*Bx
Cz=Ax*By-Ay x

(注意顺序很重要。通常情况下,AxbbxA。)

所以对于你的两个平面,叉积是(1,1,1)和(-1,0,0)。

若要规范化向量,请将其除以其大小。所以平面的法向量是(1/sqrt(3))(1,1,1)和(-1,0,0)。

现在,将向量旋转到另一个向量中(我假设您有atan2(),并且您有冷的右手规则):

1.绕Ox:旋转以使A进入XZ平面,旋转atan2(Ay,Az)
2.绕Oy旋转:以获得正确的phi(与Oz的角度)。PhiB是atan2(sqrt(Bx2+By<2>),B>z),因此旋转atan2(squrt(Bx2+By2)、Bz-atan2(Ax,AzB>3。绕Oz旋转:以获得正确的"经度",按atan2(by,bx)-atan2(Ay、Ax

因此,在您的示例中,您将AOx旋转π/4得到(sqrt(2/3),0,sqrt(1/3)),然后绕Oy旋转pi/2-atan(sqrt)得到(1,0,0),然后围绕Oz[/b>旋转¦Β得到(-1,0,0)。

相关内容

  • 没有找到相关文章

最新更新