3d 从静止点到任意点的三维三角变换

3d 从静止点到任意点的三维三角变换,3d,rotation,translation,coordinates,trigonometry,3d,Rotation,Translation,Coordinates,Trigonometry,我试图做的是建立一个相对坐标系。它所做的是获取点A的XYZ坐标。然后它应该在点B上平移该位置以获得点C的位置,点B可以在所有三个轴上旋转和平移,但点A只平移,不旋转 基本上你有两个矩形,一个左下角在原点,另一个左下角在点B。如果第一个矩形的右上角是点A,那么第二个矩形的右上角是点C,无论第二个矩形如何旋转或平移,那么点C将始终位于第二个矩形的右上角。但是如果点A移动到右下角,那么点C将始终位于第二个矩形的右下角 我曾多次尝试评估正确的表达式,我认为得出的结果很接近。我有一些变化: X':Xcos

我试图做的是建立一个相对坐标系。它所做的是获取点A的XYZ坐标。然后它应该在点B上平移该位置以获得点C的位置,点B可以在所有三个轴上旋转和平移,但点A只平移,不旋转

基本上你有两个矩形,一个左下角在原点,另一个左下角在点B。如果第一个矩形的右上角是点A,那么第二个矩形的右上角是点C,无论第二个矩形如何旋转或平移,那么点C将始终位于第二个矩形的右上角。但是如果点A移动到右下角,那么点C将始终位于第二个矩形的右下角

我曾多次尝试评估正确的表达式,我认为得出的结果很接近。我有一些变化:

X':Xcos(俯仰)-Zcos(俯仰)+Xcos(偏航)+Ysin(偏航)+X.pointB

Y':Ycos(偏航)+Xsin(偏航)+Ycos(横滚)+Zsin(横滚)+Y.pointB

Z':Ysin(滚转)+Zcos(滚转)+Xsin(音高)+Zcos(音高)+Z.pointB

其中方程中的XYZ是点A的坐标,
俯仰、偏航和横滚是第二个矩形的角度(以度为单位)。

共同表示旋转和平移的常用方法是使用和4x4。将向量乘以矩阵同时执行旋转和平移;两个矩阵相乘得到一个新的矩阵,它按顺序执行这两个运算,这就是你想要解决问题的方法。这是基本的计算机图形学数学(但对几何和物理也很有用…)

用这种方式表示向量和矩阵似乎是多余的,甚至是浪费,但它使数学和编程更简单。一旦你理解了数学原理,并且有了工作代码,你就可以回去优化多余的数据了;然而,你可能会发现这不值得付出努力


你的问题中的公式不起作用——你需要决定你想要应用偏航、俯仰和横滚的顺序,生成适当的X、Y和Z-,然后按该顺序将它们相乘(链接给出了单个旋转矩阵以及组合旋转矩阵的示例)

该方法比计算旋转矩阵简单得多。乘上平移矩阵基本上只是将平移向量相加,但当旋转出现在图片中时,您会看到该系统的优势:平移和旋转的顺序很重要,矩阵使每次都很容易正确


最后,要真正解决您的问题:

  • 计算静止平台上角色的组合旋转/平移矩阵。(理想情况下,应使用此矩阵绘制原始角色)
  • 计算“投影”平台的组合旋转/平移矩阵(也可用于绘制投影平台)
  • 将两个矩阵相乘,以确定“投影”字符的正确矩阵

请注意,唯一需要的三角法是取原始横滚/俯仰/偏航角的
sin()
cos()

一张图表比一百个字更能说明问题:)是的,很难理解您的演示。试着退一步,用完全不同的术语解释:你想完成什么?在一个游戏中,我有一个角色在一个固定的平台上,然后在一个相同的平台上是那个演员的投影。相同的平台将能够在所有方向上移动,以及在所有轴上旋转。但投影仍应保持在相对于玩家的相同位置。我只能使用XYZ和trig定义投影的位置,所以我需要做的是将播放器的XYZ转换为相对于第二个平台的XYZ坐标。转换部分很简单,我只是将播放器的XYZ添加到平台的XYZ中,但是旋转更加困难。