Math 在球体边缘上绘制点

Math 在球体边缘上绘制点,math,3d,Math,3d,因此,从flash的背景来看,我对一些简单的2D trig有一个很好的理解。在具有I圆的2d中,我知道在给定角度和半径的情况下,将项目放置在边上的数学方法 x = cos(a) * r; y = sin(a) * r; 现在,如果我在3d空间中有一个点,我知道球体的半径,我知道我想围绕z轴定位它的角度,以及我想围绕y轴定位它的角度。在我的3d空间(假设我的原点是0,0,0)中找到x、y和z坐标的数学是什么?我想我可以借用圆三角的数学公式,但我似乎找不到解决方案。你在3d中的位置由两个角度给出(

因此,从flash的背景来看,我对一些简单的2D trig有一个很好的理解。在具有I圆的2d中,我知道在给定角度和半径的情况下,将项目放置在边上的数学方法

x = cos(a) * r;
y = sin(a) * r;

现在,如果我在3d空间中有一个点,我知道球体的半径,我知道我想围绕z轴定位它的角度,以及我想围绕y轴定位它的角度。在我的3d空间(假设我的原点是0,0,0)中找到x、y和z坐标的数学是什么?我想我可以借用圆三角的数学公式,但我似乎找不到解决方案。

你在3d中的位置由两个角度给出(+半径,在你的例子中是常数)

此处,s是围绕z轴的角度,t是从z轴“向下”测量的高度角

下图显示了角度表示的内容,在xy平面中,s=θ在0到2*PI范围内,t=φ在0到PI范围内


公认的答案似乎不支持负x值(可能是我做错了什么),但为了以防万一,使用中定义的ISO坐标系公约的符号,这个方程组应该可以工作:

导入数学
x=半径*sin(θ)*cos(φ)
y=半径*sin(θ)*sin(φ)
z=半径*cos(θ)
半径=math.sqrt(math.pow(x,2)+math.pow(y,2)+math.pow(z,2))
φ=数学常数2(y,x)
θ=数学acos((z/半径))

不要忘记,
s
t
需要以弧度为单位,而不是以度为单位。要转换为弧度:
radians=angleInDegrees*Math.PI/180
。如果s=45度,t=0度,则(x,y,z)=(0,0,1)。但当我们实际绘制它时,我们会得到(0,0.707,0.707),对吗?当t为0且z与s无关时,x和y总是给零。。。!我该怎么做才能使它正确?我们不应该在t锁定为0并改变s的情况下扫过一个圆吗?这里,它不是这样工作的,当t为零时,不管s的值是多少,(x,y,z)总是(0,0,1)@SaravanabalagiRamachandran想想当φ等于零时,你会在球体上的什么位置,你会意识到为什么会这样;当t为零时,x和y总是给零,z与snop无关;难道我们不能在t锁定为0并改变s的情况下扫过一个圆吗?是的,但是扫掠一个圆需要同时改变y和z
x = r * cos(s) * sin(t)
y = r * sin(s) * sin(t)
z = r * cos(t)