【问题标题】:Plotting a point on the edge of a sphere在球体边缘绘制一个点
【发布时间】:2009-06-09 12:30:59
【问题描述】:

因此,我来​​自 Flash 背景,对一些简单的 2D 三角有很好的理解。在带有 I 圆的 2d 中,我知道在给定角度和半径的情况下将项目放置在边缘上的数学运算。

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

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

【问题讨论】:

    标签: math 3d


    【解决方案1】:

    您在 3d 中的位置由两个角度(+ 半径,在您的情况下是恒定的)给出

    x = r * cos(s) * sin(t)
    y = r * sin(s) * sin(t)
    z = r * cos(t)
    

    这里,s 是围绕 z 轴的角度,t高度 角度,从 z 轴“向下”测量-轴。

    下图是角度代表什么,s=theta在xy平面的0到2*PI范围内,t=phi在这个范围内0 到 PI。

    【讨论】:

    • 别忘了st 需要以弧度表示,不是 度。转换为弧度:radians = angleInDegrees * Math.PI / 180.
    • 如果 s=45deg 和 t=0deg,那么 (x,y,z) = (0,0,1)。但是当我们实际映射它时,我们会得到 (0, 0.707, 0.707) 对吗?当 t 为零且 z 与 s 无关时,x 和 y 总是为零……!我应该怎么做才能让它正确?
    • 难道我们不能在 t 锁定为 0 且 s 变化的情况下精确扫一圈吗?在这里,它不是这样工作的,当t为零时,无论s的值如何,(x,y,z)总是(0,0,1)
    • @SaravanabalagiRamachandran 想想当 phi 等于 0 时你会在球体上的哪个位置,你就会明白为什么会这样。
    • 已经一年了,但这里有答案; 当 t 为零且 z 与 s 无关时,x 和 y 总是给出零 Nope; 难道我们不能在 t 锁定为 0 并改变 s 的情况下精确扫一个圆吗? 是的,但是扫一个圆需要同时改变 y 和 z跨度>
    【解决方案2】:

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

    import math
    
    x = radius * sin(theta) * cos(phi)
    y = radius * sin(theta) * sin(phi)
    z = radius * cos(theta)
    
    radius = math.sqrt(math.pow(x, 2) + math.pow(y, 2) + math.pow(z, 2))
    
    phi = math.atan2(y, x)
    theta = math.acos((z / radius))
    

    【讨论】:

      猜你喜欢
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      • 2016-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多