【发布时间】:2014-08-20 12:22:46
【问题描述】:
我正在尝试将球坐标转换为笛卡尔坐标以绘制一个简单的 3D 金字塔。
这是获取金字塔四个主要角的代码,具体取决于极角 yrad 和方位角 xrad 以及顶点坐标 x 和 y:
xpos1 = x+25*( sin(yrad+pi/2+pi/4)*cos(-xrad+pi/2+pi/4));
zpos1 = y-35+25*( cos(yrad+pi/2+pi/4));
xpos2 = x+25*( sin(yrad+pi/2-pi/4)*cos(-xrad+pi/2+pi/4));
zpos2 = y-35+25*( cos(yrad+pi/2-pi/4));
xpos3 = x+25*( sin(yrad+pi/2-pi/4)*cos(-xrad+pi/2-pi/4));
zpos3 = y-35+25*( cos(yrad+pi/2-pi/4));
xpos4 = x+25*( sin(yrad+pi/2+pi/4)*cos(-xrad+pi/2-pi/4));
zpos4 = y-35+25*( cos(yrad+pi/2+pi/4));
方位角轴似乎工作正常,但问题是在操纵极角时,左右在它们越过天顶或底部时交换,如下所示(选择顶部的 mp4 以获得更流畅的播放) : http://gyazo.com/4a245713c232893960863cf4ea4186f6
怎么了?
【问题讨论】:
-
为什么要跟踪单个组件而不是创建
struct Vector { x, y, z}以获得更好的代码可读性?并且从不在语句中硬编码像25和35这样的值,而是使用常量或参数。
标签: 3d trigonometry coordinate-systems cartesian-coordinates