代码之家  ›  专栏  ›  技术社区  ›  LarsH

如何将球体平滑地转换为半球

  •  3
  • LarsH  · 技术社区  · 14 年前

    我正在使用第三方“旋转器”对象,它提供沿着球体表面的平滑随机旋转。旋转器用于控制摄像机(请参见源代码中的rotator.h/c xscreensaver )

    旋转器的输出是经纬度。 我想要的是让相机保持在“赤道”之上——因此只限于半球。

    我不想修改旋转器本身。所以我可以得到纬度输出,并使用它的绝对值。然而,平滑的旋转器在赤道上的运动不会产生平滑的相机运动:它会反弹。

    我想我可以将旋转器的输出纬度从当前范围缩放到目标范围:例如f(lat)=(lat+1)/2将(0,1)范围映射到(0.5,1)。也就是说,把整个“地球”映射到北半球。移动仍将是平稳的。但是,旋转器想要的“南极”将会成为我相机的“赤道”。这不会导致奇怪的运动吗?可能是不连续?我不确定。

    4 回复  |  直到 11 年前
        1
  •  4
  •   ysap    14 年前

        2
  •  1
  •   Ignacio Vazquez-Abrams    14 年前

    一个球体和一个半球在拓扑上是不同的,因此无法以满足您的条件的方式在两者之间平滑映射。

        3
  •  1
  •   tom10    14 年前

    代替纬度的绝对值,你可以做一些平滑的事情,比如(纬度) .

        4
  •  0
  •   Justin    14 年前

    我不完全确定我理解你的问题,所以我会陈述一下,以防万一:

    您希望能够转换任何点(由纬度和经度给出),并将其转换为半球上的一个点,以便“运动是平滑的”(即,球体上的一个小运动转换为半球上的一个小运动)。

    在这种情况下,我相信你可以简单地“将球体折叠回自身”(例如,取赤道附近纬度的模)。