gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:07:26 26 4
gpt4 key购买 nike

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

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

我宁愿不修改旋转器本身。所以我可以获取纬度输出并使用它的绝对值。然而,跨越赤道的平滑旋转器运动不会产生平滑的相机运动:它会反弹。

我想我可以将旋转器的输出纬度从其当前范围缩放到我的目标范围:例如f(lat) = (lat+1)/2 会将 (0, 1) 范围映射到 (0.5, 1)。 IE。将整个“地球”映射到北半球。运动仍然会很顺畅。但是旋转器的“南极”将成为我相机的“赤道”。这不会导致奇怪的 Action 吗?也许不连续?我不知道。

是否有另一种方法可以将球体(纬度和经度)平滑地映射到半球?

更新:

感谢您的关注和回复。有几个人要求澄清“平滑”。我的意思是不生涩:旋转器速度的微小变化应该映射到相机速度的微小变化。如果我只取纬度的绝对值,则旋转器在穿过赤道时速度的零变化将转化为相机速度的突然符号翻转(也称为反弹)。

IIRC 这相当于要求速度的一阶导数是连续的。连续二阶导数可能很好,但我认为这不是必需的。

最佳答案

速度是位置的导数。通过“镜像”纬度值,您可以在到达赤道时在位置函数中创建一个“角”。因此,为了获得平滑过渡,您需要将线性位置(即纬度作为时间的函数)映射到在赤道附近缓慢变化的函数,并且在赤道处一阶导数为 0。

tom10 对映射的建议 lat'(lat) = (lat)^2 是这种功能的一个很好的例子。但是,您需要对结果进行归一化,以便得到 纬度'(90 度)= 90 度 .所以,正确的映射应该是:

lat'(lat) = 90*(lat/90)^2

抛物线的替代方法是 罪()功能,具有适当的移位和归一化。根据您希望速度在“远离”赤道时接近原始速度的程度,您可以使用更高或更低阶的指数值,例如:

lat'(lat) = 90*( |lat|/90)^K

关于math - 如何将球体平滑地转换为半球体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3878465/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com