首页 > 解决方案 > 来自现有点、方向和距离的 3D 点

问题描述

如果我在 3D 空间“原点”(Ox、Oy、Oz)中有一个任意点,以及以度数(或弧度)(Rx,Ry)和距离(D)为单位的旋转,我如何计算新的 3D 坐标为“目标”(Tx、Ty、Tz)?

我正在寻找 C# 代码或简化的数学符号。

在此处输入图像描述

标签: c#math3dpoint

解决方案


为了回答这个问题,需要做出一些假设。如果这些假设不适合您的情况,您可能需要重命名下面的 X、Y、Z 并可能更改操作顺序。

假设以下情况:

  • X点东
  • Y 点北
  • Z指向上方
  • 当没有旋转时,目标将位于正 X 轴上
  • 一个小的正向旋转 Rx 将使目标向 Y 轴旋转
  • 一个小的正旋转 Ry 会使目标向上旋转
  • 假设 Rx 和 Ry 用弧度表示(因为 sin 和 cos 需要弧度作为输入);如果需要,将度数除以 180 并乘以 pi

在这种情况下:

  • 创建一个初始点 (Px,Py,Pz) = (D, 0, 0)
  • 将 P 绕 Y 轴旋转角度 Ry 得到一个点 Q=(Qx,Qy,Qz):
    • Qx = cos(Ry)*Px - sin(Ry)*Pz
    • Qy = Py
    • Qz = sin(Ry)*Px + cos(Ry)*Pz
  • 将 Q 绕 Z 轴旋转角度 Rx 得到一个点 S=(Sx,Sy,Sz):
    • Sx = cos(Rx)*Qx - sin(Rx)*Qy
    • Sy = sin(Rx)*Qx + cos(Rx)*Qy
    • Sz = Qz
  • 将原点与 S 相加得到 T:
    • Tx = Sx + Ox
    • Ty = Sy + Oy
    • Tz = Sz + Oz

推荐阅读