gpt4 book ai didi

algorithm - 计算球坐标中角距离内的点

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:46:48 26 4
gpt4 key购买 nike

假设我在球坐标系中有一个刻度线(比如 1 度分辨率)。

Spherical graticule

现在,假设某个球形物体处于已知方向(已知 philambda)并且从坐标原点看具有已知角直径系统,我如何才能有效地计算出“最终”出现在对象上的刻度点列表?

朴素的算法当然是计算每个经纬网方向与物体已知的(phi/lambda)方向之间的夹角,如果是,则包括该点小于角半径。如果标线没问题,这会非常慢。

我可以使用哪些算法来加速此计算?

最佳答案

假设您有基本坐标 (lat0, lon0)、网格步长 da 和最大大圆弧角 AA(您的“的一半”已知角直径”)。

您可以在笛卡尔平面上使用类似于光栅化的算法:枚举圆内每条扫描线(此处为平行线)上的整数点。

从中央 (lat0, lon0) 点开始。沿子午线上下行走,取给定角半径内的平行点

编辑:大圆弧计算已重写

对于子午线上的每个点 (lat[i], lon0) 使用来自 here 的 BigArc 计算得到具有相同纬度的点列表(距离部分)。

 var a = Math.sin(diflat/2) * Math.sin(diflat/2) +
Math.cos(lat0) * Math.cos(alat) *
Math.sin(diflon/2) * Math.sin(diflon/2);
var BigArc = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));

(当极点位于半径内时,此方法可能会失败)

meridiansteps = Floor(AA / da)
for i = - meridiansteps to meridiansteps:
diflat = da * i
alat = lat0 + diflat
addpoint(alat, lon0)
diflon = da
while BigArc <= AA:
addpoint(alat, lon0 + diflon)
addpoint(alat, lon0 - diflon) //symmetric
diflon = diflon + da

关于algorithm - 计算球坐标中角距离内的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49144210/

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