【发布时间】:2019-12-18 00:58:04
【问题描述】:
我正在尝试找到最终成为所有三个轴旋转中旋转形状的边界框的
vector Size = <10,1,0.5>; vector Deg = <22.5,0,0>
if(Deg.x > 0 && Deg.y == 0 && Deg.z == 0){
Y1 = Cos(Deg.x) * Size.y + Sin(Deg.x) * Size.z;
Z1 = Cos(Deg.x) * Size.z + Sin(Deg.x) * Size.y;}
以下是 y 和 z 旋转,也就是说,如果您决定将度数更改为 和 。
if(Deg.y > 0 && Deg.x == 0 && Deg.z == 0){
X2 = Cos(Deg.y) * Size.x + Sin(Deg.y) * Size.z;
Z2 = Cos(Deg.y) * Size.z + Sin(Deg.y) * Size.x;}
if(Deg.z > 0 && Deg.x == 0 && Deg.y == 0){
X3 = Cos(Deg.z) * Size.x + Sin(Deg.z) * Size.y;
Y3 = Cos(Deg.z) * Size.y + Sin(Deg.z) * Size.x;}
虽然我迷失的部分是,如果你在两轴或三轴上旋转,我该从哪里开始。如或
是否有一个网站提供教程或示例方程式我可以查看,或者有任何提示或想法可以帮助我解决这个问题。
编辑:
我想补充一下,Nico 的评论有帮助,因为我要问的是:Axis-Aligned Bounding Box 或简称 AABB。
至于 JohanC 关于 22.5 的评论,是的 Deg = Degree。同样是的,您必须将度数转换为弧度,但我将其作为度数在示例中用于 Sin 和 Cos 输入以保持简单。
如果您想知道这个问题有什么用处。举个例子,你需要知道 AABB 来帮助计算一个方程,以保持有问题的项目与它所在的表面齐平,如果你要说在它有
【问题讨论】:
-
请注意,您正在编写的 22.5 似乎是度数,而大多数实现中的 sin 和 cos 都使用弧度。因此,您需要将角度除以 180 并乘以 Pi。
-
要绕多轴旋转,您需要选择一个顺序(例如,先是 X,然后是 Y,然后是 Z)并使用一个旋转的输出向量作为下一个旋转的输入。
-
另外,您的公式每次旋转都需要一个正窦和一个负窦。
标签: math rotation trigonometry quaternions bounding-box