首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从球面上的三维点计算RPY (滚动俯仰偏航)

从球面上的三维点计算RPY (滚动俯仰偏航)
EN

Stack Overflow用户
提问于 2016-04-22 16:07:15
回答 2查看 1.8K关注 0票数 1

我需要一种方法来找到一组描述球的位置和方向的齐次变换矩阵。

这个想法是,我在这个球体的中心有一个物体,它的半径是dz。因为我知道物体的三维坐标,所以我知道球体的所有三维坐标。能不能确定球面上任何一点的RPY,这样点总是指向中心的对象吗?

说明:

在这个球体的猎户座,我们有一个物体。球体的半径是dz。红点是球体上的一个点,从这个点到物体/猎户座的矢量。

位置应该是相对容易提取的,因为一个球可以用一个函数来描述,但是我如何确定向量,或者旋转矩阵,它指向origo。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-22 17:41:01

你可以用球的中心作为原点,计算由原点到球体边缘的直线的单位向量,然后把这个单位向量乘以-1,得到指向球面边缘点的指向球体中心的矢量。

示例:

代码语言:javascript
复制
vec pointToCenter(Point edge, Point origin) {
    vec norm = edge - origin;

    vec unitVec = norm / vecLength(norm);

    return unitVec * -1;
}

一旦有了向量,就可以将其转换为RPY的欧拉角,例如here

票数 1
EN

Stack Overflow用户

发布于 2016-04-22 17:55:37

在我的头顶上,我建议用四元数来定义原点的旋转,相对于你想要的球体表面上的点:

  1. 在球体表面选择想要的点,比如说北极
  2. 将这一点转换为原点(假设球体半径已知),使用3D Pythagorus: x_comp^2 + y_comp^2 + z_comp^2 = hypotenuse^2
  3. 创建一个指向原始表面点的轴的旋转。这将是x,y和z分量的比例倍数,构成低音值。我只想把它做成单元部件。在四元数(q,x,y,z)中捕获产生的轴和旋转,其中x,y,z是轴的分量,q是围绕该轴的旋转。硬码Q到1。您希望使用四元数,因为它将使您由此产生的旋转矩阵更易于使用。
  4. 将点转换回球体表面,并否定轴的分量值,以得到(q,-x,-y,-z)。
  5. 这会给你在球体表面的点,一个轴指向原点。以北极为例,球体表面的点(0,radius_length,0)有一个四元数(1,0,-1,0)。请参阅我下面的github存储库中的quatrotation.c,以获得结果的旋转矩阵。

我没有时间为此编写代码,但不久前我在github存储库中编写了一个包含可编译代码示例的小教程,这将使您开始学习:

https://github.com/brownwa/opengl

先做mat_rotation教程,然后再做四元数教程。这是可以在一个周末,一天,如果你是专注的。

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

https://stackoverflow.com/questions/36798592

复制
相关文章

相似问题

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