当前位置:   article > 正文

google S2算法学习(一)xyz转face,u,v

s2算法

S2算法是将经纬度转换到单位球面上,然后转成直角坐标系,进而将球面映射到立方体不同的面上(这里叫做face),根据直角坐标计算坐标所在的立方体的面,以及对应的uv坐标,进而进行(线性映射或tan映射等)将uv转换为st,(待续) 

接下来,逐步解析s2算法是如何进行这个过程的。

 给定球面上的一个坐标,即经纬度(jd, wd),将其转换到单位球上的坐标,即将半径看做1,那么根据球坐标转立体坐标的关系,得到单位球上的直角坐标(python代码):

rjindu, rweidu = jindu*math.pi/180, weidu*math.pi/180
x,y,z = math.sin(math.pi/2-rweidu)*math.cos(rjindu), math.sin(math.pi/2-rweidu)*math.sin(rjindu), math.cos(math.pi/2-rweidu)
def __largestAbsComp(self, x, y, z):‘此处返回是哪一个轴是主轴
    absX = math.fabs(x)
    absY = math.fabs(y)
    absZ = math.fabs(z)
    if absX>absY:
        if absX>absZ:
            return 0;
        else:
            return 2;
    else:
        if absY>absZ:
            return 1
        else:
            return 2
def __xyzToFace(self, x, y, z):
    lac = self.__largestAbsComp(x,y,z)'根据 反馈的主轴,计算所在的面
    if lac==0:
        if x<0:
            return 3
        else:
            return 0
    if lac==1:
        if y<0:
            return 4
        else:
            return 1
    if lac==2:
        if z<0:
            return 5
        else:
            return 2

确定face以后,xyz2uv是按照face进行的,具体如下,

xyz转uv
face uv
0y/xz/x
1-x/yz/y
2-x/z-y/z
3z/xy/x
4z/y-x/y
5-y/z-x/z

 至此,从经纬度

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/138607
推荐阅读
相关标签
  

闽ICP备14008679号