我需要一种方法来找到一组描述球体中位置和方向的同质变换矩阵。
我的想法是,我在这个球体的中心有一个半径为dz的物体。因为我知道对象的三维坐标,所以我知道球体的所有三维坐标。是否可以确定球体上任何点的RPY,使得该点总是指向中心的物体?
说明:
在这个球体的原点,我们有一个物体。球体的半径是dz。 红点是球体上的一个点,从该点到物体/原点的矢量。
位置应该相对容易提取,因为球体可以通过函数来描述,但是如何确定向量或旋转矩阵,使其指向原点。
答案 0 :(得分:1)
您可以使用球体的中心作为原点,计算由原点形成的线的单位矢量到球体边缘上的点,然后将该单位矢量乘以-1以获得矢量从球体边缘的点指向球体的中心。
示例:
vec pointToCenter(Point edge, Point origin) {
vec norm = edge - origin;
vec unitVec = norm / vecLength(norm);
return unitVec * -1;
}
获得矢量后,您可以将其转换为RPY的euler角度,例如here
答案 1 :(得分:0)
在我的头顶,我建议使用quaterneons来定义原点上任何点的旋转,相对于球体表面上想要的点:
我没有时间为此编写代码,但我在github存储库中编写了一个带有可编译代码示例的小教程,这应该可以帮助您入门:
https://github.com/brownwa/opengl
首先执行mat_rotation教程,然后执行quatereons。如果你专注,那么这个周末是可行的。