c# - 来自现有点、方向和距离的 3D 点
问题描述
如果我在 3D 空间“原点”(Ox、Oy、Oz)中有一个任意点,以及以度数(或弧度)(Rx,Ry)和距离(D)为单位的旋转,我如何计算新的 3D 坐标为“目标”(Tx、Ty、Tz)?
我正在寻找 C# 代码或简化的数学符号。
解决方案
为了回答这个问题,需要做出一些假设。如果这些假设不适合您的情况,您可能需要重命名下面的 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
推荐阅读
- reactjs - 增量更新状态数组,而不是完全更新
- c++ - 在 C++ 中组合字符串以重命名文件以显示日期
- python - 用于文本分类的 SkLearn 模型
- python - 将文件导入python
- html - 如何在 MVC 5 视图中使用 jQuery 为绑定到模型的 Html.TextBoxFor 字段设置值
- pine-script - 使用具有可变长度的 percentile_nearest_rank 计算运行中位数
- swift - 无法将 Firestore 数据保存到全局结构中
- c# - 为什么在使用后处理 v2 时出现 TryGetSettings 错误?我该如何解决?
- javascript - 按多个属性(包括嵌套属性)对对象进行分组并汇总它们的值
- python - 如何连接 3 个单独的 UDP 数据包?