根据您在评论中发布的代码,这是生成 X、Y 和 Z 值的方法。
theta = 2 * PI * U;
phi = PI * V;
_x = Math.cos(theta) * Math.sin(phi) * radius;
_y = Math.sin(theta) * Math.sin(phi) * radius;
_z = -Math.cos(phi) * radius;
旧答案:
你的代码很好。你确定球体是以同样的方式生成的,并且两极像这样沿着 Z 轴吗?“通常”球体是沿 Y 轴的极点生成的。检查这个。
否则,如果您总是偏离 +/- 90°,请使用定义 x 和 y 的 sin 和 cos。例如:
_x = -Math.sin(_u) * Math.sin(_v) * radius;
_y = Math.cos(_u) * Math.sin(_v) * radius;
是原稿的 90° 旋转。
有 8 种不同的方法可以用不同的符号计算这两个分量的 sin/cos。在不知道您的球体是如何生成的情况下,您必须全部尝试。他们去
(x = sin(u), y = cos(u));
(x = sin(u), y = -cos(u));
(x = -sin(u), y = cos(u));
(x = -sin(u), y = -cos(u));
(x = cos(u), y = sin(u));
(x = cos(u), y = -sin(u));
(x = -cos(u), y = sin(u));
(x = -cos(u), y = -sin(u));
然而,这是痛苦和骇人听闻的,我强烈建议您尝试找出您的球体是如何生成的。它们通常通过遍历 U 和 V 来生成 x、y、z 位置。