感謝原做者,原理請看原做者的文章 http://www.html-js.com/article/1517html
C#實現spa
public string rayCasting(PointF p, PointF[] poly) { var px = p.X; var py = p.Y; var flag = false; int l = poly.Length; int j = l - 1; for (var i = 0; i < l; i++) { var sx = poly[i].X; var sy = poly[i].Y; var tx = poly[j].X; var ty = poly[j].Y; // 點與多邊形頂點重合 if ((sx == px && sy == py) || (tx == px && ty == py)) { return = "on"; } // 判斷線段兩端點是否在射線兩側 if ((sy < py && ty >= py) || (sy >= py && ty < py)) { // 線段上與射線 Y 座標相同的點的 X 座標 var x = sx + (py - sy) * (tx - sx) / (ty - sy); // 點在多邊形的邊上 if (x == px) { return "on"; } // 射線穿過多邊形的邊界 if (x > px) { flag = !flag; } } j = i; } // 射線穿過多邊形邊界的次數爲奇數時點在多邊形內 return = flag ? "in" : "out"; }