2011-03-11 78 views
3

是否可以旋转其顶点以球面坐标定义的身体? 目前我正在做VHDL的拼贴项目,是关于旋转十二面体和呈现VGA。从球坐标旋转身体

我申请了pinhole camera model等式,并且只需要两次sin/cos计算和两个每顶点乘法。 我只是想考虑绕着第三轴旋转三个角度,但是我无法找出合适的方程,即使这是可能的。

编辑

我想我得到了它。

旋转到与摄像头相同方向的第3个轴,只要计算出相机坐标的二维变换即可。这意味着比3轴旋转(确定两轴和一个倾角),您需要总共应用4次sin/cos计算和4次乘法。如果有人提出更好的建议,可以自由发表答案。

回答

8

您可以通过改变θ围绕y轴旋转,并通过改变φ围绕z轴旋转。尽管围绕X轴旋转有点困难。

一个简单的方法是将所有东西都转换为catesian坐标,执行旋转并转换回来。

为方程(X,Y,Z)(球形到笛卡尔)是

 
x = r sin θ cos φ 
y = r sin θ sin φ 
z = r cos θ 

用于旋转(X,Y,Z)到新的点(X方程 'Y', Z')绕x轴以角度α是

 
x' = x 
    = r sin θ cos φ 
y' = y cos α - z sin α 
    = (r sin θ sin φ) cos α - (r cos θ) sin α 
z' = y sin α + z cos α 
    = (r sin θ sin φ) sin α + (r cos θ) cos α 

为(R,θ,φ)(笛卡尔到球形)是

 
r' = sqrt(x'2 + y'2 + z'2) 
    = r 
θ' = cos-1(z'/r') 
    = cos-1(sin θ sin φ sin α + cos θ cos α) 
φ' = tan-1(y'/x') 
    = tan-1(tan φ cos α - cotan θ sin α sec φ) 

我不知道的方程如果有一种方法来进一步减少,但它应该工作。

+0

我刚刚发布我的解决方案。在你的情况下,有5次乘法,3次sin/cos(3次角),1次acos和1次atan函数绕3次斧旋转,在我的解决方案中,我只加了2次sin/cos和2次乘法。问题也在VHDL中实现atan和acos函数。 – 2011-03-12 11:09:35

+0

@ralu:是的,只要使用第二组2D旋转方程(忽略第一个和第三个方程)就可以工作,如果您认为相机总是*定位并定向在x轴上。 – 2011-03-12 17:55:48

+0

实际上,只能通过更改φ才能绕z轴旋转。这取决于你当前的(θ,φ)。这是有道理的,你必须转换为笛卡尔坐标来做一个关于笛卡尔坐标轴的旋转 - 从某种意义上讲,笛卡尔坐标轴“不在那里” - 你不能通过简单的加法“沿着x轴行进”在球坐标 - 为什么你应该能够围绕它旋转? – bobobobo 2012-02-24 19:29:43

5

希望这会对未来的人有所帮助,但上述答案存在一个小错误。它应该是:

φ” = TAN-1(Y '/ X') = TAN-1(φ黄褐色COSα - 科坦θ罪α秒φ)

我没有代表指出要在评论中发布这一点,但认为它会有用。

+0

感谢您分享此更新。 – 2011-09-08 12:21:44

+1

我将您的更新作为修改应用于答案。我希望你是对的,因为我没有验证它:) – leemes 2012-07-17 00:52:37

+1

我再次检查它自己,并有另一个人在我发布之前进行验证。另外,我在工作中使用它,所以我最好是正确的。 =) – cosmosis 2012-07-17 01:18:19