Python中检查点是否在多边形内时的思维挑战式代码理解

2024-09-24 02:21:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我在学习如何检查多边形中的一个点。其思想是计算水平线与多边形边相交的次数。你知道吗

我之前的研究是从互联网上找到一个代码,它是:

def IsPtInPoly(aLon, aLat, pointList):  
    ''''' 
    :param aLon: double Longitude 
    :param aLat: double Latitude
    :param pointList: list [(lon, lat)...] The vertex of the polygon should be either clockwise or counter clockwise
    '''  

    iSum = 0  
    iCount = len(pointList)  

    if(iCount < 3):  
        return False  


    for i in range(iCount):  

        pLon1 = pointList[i][0]  # ith point
        pLat1 = pointList[i][1]  # ith point

        if(i == iCount - 1):  

            pLon2 = pointList[0][0] # start from beginning 
            pLat2 = pointList[0][1] # start from beginning 
        else:  
            pLon2 = pointList[i + 1][0]  #(i+1)th point
            pLat2 = pointList[i + 1][1]  #(i+1)th point

        if ((aLat >= pLat1) and (aLat < pLat2)) or ((aLat>=pLat2) and (aLat < pLat1)):  

            if (abs(pLat1 - pLat2) > 0):  

                pLon = pLon1 - ((pLon1 - pLon2) * (pLat1 - aLat)) / (pLat1 - pLat2)
                # That's what confuse me.

                if(pLon < aLon):  
                    iSum += 1  

    if(iSum % 2 != 0):  
        return True  
    else:  
        return False

我的问题是:pLon = pLon1 - ((pLon1 - pLon2) * (pLat1 - aLat)) / (pLat1 - pLat2)在说什么,为什么它能得到多边形边的x坐标。我需要详细的解释。泰铢


Tags: returnifparam多边形pointplonicountpointlist