求點是否在任意多邊形範圍內[轉]
阿新 • • 發佈:2022-03-15
方法一:適用於凸多邊形
適用於凸多邊形的演算法有很多種,比如計算該點和所有頂點連線的夾角和為360度,面積法,向量法等
方法二:適用於任意多邊形(凸多邊形和凹多邊形)
以該點為端點的任意射線與多邊形的交點個數為偶數則在多邊形範圍外,反之則在多邊形範圍內
private bool IsPointInRange(double[] point, List<double[]> coorData) { int i = 0; int j = coorData.Count - 1; int c = 0;for (; i < coorData.Count; j = i++) { if (((coorData[i][1] > point[1]) != (coorData[j][1] > point[1])) && (point[0] < (coorData[j][0] - coorData[i][0]) * (point[1] - coorData[i][1]) / (coorData[j][1] - coorData[i][1]) + coorData[i][0])) { c= 1 + c; } } if (c % 2 == 0) { return false; } else { return true; } }