首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Python进行三角旋转

用Python进行三角旋转
EN

Stack Overflow用户
提问于 2017-07-21 15:30:55
回答 1查看 1.4K关注 0票数 0

我有三点: 3D空间中的A, B, C。C= BC长度。它们表示一个称为T的三角形对象。每个点都是表示其坐标的浮点数的元组。T被放置,如AB的中间点已经位于轴原点。

在我的API中,我可以全局地旋转T,也就是针对任何一个全局轴一次旋转。此API的伪代码类似于:

T.rotate('x', angle)用于旋转T的全局x轴的角度值,用右手规则。

我的问题是代码要旋转T,例如:

  • ABx轴上
  • Cy轴上

我想我需要连续调用3个调用来旋转每一个轴。但是我很难用初始点坐标来计算角度。

EN

回答 1

Stack Overflow用户

发布于 2017-07-21 16:05:27

编辑的包括角度计算.

由于您的问题中没有提供任何真正的代码,我只提供一个算法和角度。如果你用代码改进你的问题,我可以添加一些我自己的代码。

为了澄清,我们必须有长度AC等于长度BC,而边AB的中点必须是原点。后者意味着点AB的坐标是相互否定的。(实际上,真正的要求是向量OC,其中O是原点,垂直于向量AB,而原点是直线AB )。你的条件比这更严格。)

假设在任何时候,A的坐标都是(Ax, Ay, Az)BC的坐标也是这样。

首先,将点A移动到xy平面。用所有三个点围绕x轴旋转来做这件事。由于条件的原因,点B也将在xy平面上。旋转的一个可能的角度是-atan2(Az, Ay),而其他的也是可能的。检查AzBz的结果值是否为零或接近浮点精度。

第二,围绕z轴旋转,将点A移动到x轴(以及其他适当的点)。点B现在也将在x轴上.旋转的一个角度是-atan2(Ay, Ax)。检查生成的AyBy

第三,也是最后一步,绕x轴旋转,将点C移动到y轴.AB点不会受到最后一次旋转的影响。旋转的一个角度是-atan2(Cz, Cy)。检查产生的Cx (在上次旋转之前应该是零)和Cz

你的三角形现在是在理想的位置,只要你原来的三角形实际上符合条件。注意,这个算法没有使用任何围绕y轴的旋转:它是不需要的,但是如果你想的话,你可以用y周围的旋转代替我的初始旋转。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45241469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档