我正在使用第三方的“旋转器”对象,它提供了一个平滑的随机旋转,沿着球体表面。该旋转器用于控制相机(请参见xscreensaver中源代码中的rotator.h/c)。
旋转器的输出是纬度和经度。我想让相机保持在“赤道”上方-因此仅限于半球。
我不想修改旋转器本身。因此,我可以获取纬度输出并使用其绝对值。然而,赤道上的平滑旋转器运动将不能产生平滑的相机运动:它会弹跳。
我想,我可以将旋转器的输出纬度从其当前范围缩放到我的目标范围:例如f(lat) =(lat + 1)/ 2将(0,1)范围映射到(0.5,1)。即将整个“地球”映射到北半球。运动仍然会很平滑。但是由旋转器指定的“南极”将成为相机的“赤道”。那样会产生奇怪的运动吗?可能有不连续性吗?我不确定。
还有其他方法可以将球体(纬度和经度)平滑地映射到半球吗?
更新:
感谢您的关注和回复。一些人要求对“平滑”进行澄清。我的意思是不会抖动:旋转器速度的微小变化应映射为相机速度的微小变化。如果我只取纬度的绝对值,则旋转器在穿过赤道时速度的零变化将转换为相机速度的突然符号翻转(也称为弹跳)。
如果我没记错,这相当于要求速度的一阶导数连续。连续的二阶导数可能很好,但我认为这并非必要。
旋转器的输出是纬度和经度。我想让相机保持在“赤道”上方-因此仅限于半球。
我不想修改旋转器本身。因此,我可以获取纬度输出并使用其绝对值。然而,赤道上的平滑旋转器运动将不能产生平滑的相机运动:它会弹跳。
我想,我可以将旋转器的输出纬度从其当前范围缩放到我的目标范围:例如f(lat) =(lat + 1)/ 2将(0,1)范围映射到(0.5,1)。即将整个“地球”映射到北半球。运动仍然会很平滑。但是由旋转器指定的“南极”将成为相机的“赤道”。那样会产生奇怪的运动吗?可能有不连续性吗?我不确定。
还有其他方法可以将球体(纬度和经度)平滑地映射到半球吗?
更新:
感谢您的关注和回复。一些人要求对“平滑”进行澄清。我的意思是不会抖动:旋转器速度的微小变化应映射为相机速度的微小变化。如果我只取纬度的绝对值,则旋转器在穿过赤道时速度的零变化将转换为相机速度的突然符号翻转(也称为弹跳)。
如果我没记错,这相当于要求速度的一阶导数连续。连续的二阶导数可能很好,但我认为这并非必要。