Python實現inpolygon函數

使用Python實現MATLAB中inpolygon函數。

1、參考鏈接

http://blog.sina.com.cn/s/blog_70012f010102xnel.html

2、代碼實現

# coding=utf8
import numpy as np
from matplotlib.path import Path

def inpolygon(xq, yq, xv, yv):
    """
    reimplement inpolygon in matlab
    :type xq: np.ndarray
    :type yq: np.ndarray
    :type xv: np.ndarray
    :type yv: np.ndarray
    """
    # 合併xv和yv爲頂點數組
    vertices = np.vstack((xv, yv)).T
    # 定義Path對象
    path = Path(vertices)
    # 把xq和yq合併爲test_points
    test_points = np.hstack([xq.reshape(xq.size, -1), yq.reshape(yq.size, -1)])
    # 得到一個test_points是否嚴格在path內的mask,是bool值數組
    _in = path.contains_points(test_points)
    # 得到一個test_points是否在path內部或者在路徑上的mask
    _in_on = path.contains_points(test_points, radius=-1e-10)
    # 得到一個test_points是否在path路徑上的mask
    _on = _in ^ _in_on
    
    return _in_on, _on

3、測試代碼

if __name__ == '__main__':
    xv = np.array([-4, 0, 4, 0])
    yv = np.array([0, 4, 0, -4])
    X = np.array([0, 1, 3.5, 4, 5])
    Y = np.array([0, 1, 0,   0, 0])

    _in, _on = inpolygon(X, Y, xv, yv)
    print _in, _on

X和Y中的值一一對應組成測試點,xv和yv中的值一一對應組成閉合路徑。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章