多邊形中的C# 點:確定點是否位於多邊形內
考慮您想要確定多邊形內是否存在點的場景多邊形的邊界。若要使用WinForms 在C# 中完成此任務,請依照下列步驟操作:
這樣的演算法之一是 Ray交叉方法,涉及以下步驟:
a.想像一下從給定點到無窮遠繪製水平射線。
b。計算射線與多邊形邊緣相交的次數。
c.如果計數為奇數,則該點在多邊形內部;如果是偶數,則位於多邊形之外。
以下是用 C# 實現射線交叉演算法的範例:
using System; using System.Collections.Generic; using System.Drawing; public class Polygon { List<PointF> vertices = new List<PointF>(); public bool Contains(PointF point) { if (IsOutsideBoundingBox(point)) return false; int intersectionCount = 0; for (int i = 0; i < vertices.Count; i++) { int j = (i + 1) % vertices.Count; PointF a = vertices[i], b = vertices[j]; if ((a.Y > point.Y && b.Y <= point.Y) || (a.Y <= point.Y && b.Y > point.Y)) { double slope = (double)(b.Y - a.Y) / (b.X - a.X); if (point.X < a.X + (point.Y - a.Y) / slope) intersectionCount++; } } return intersectionCount % 2 == 1; } private bool IsOutsideBoundingBox(PointF point) { return point.X < Xmin || point.X > Xmax || point.Y < Ymin || point.Y > Ymax; } }
此實現在確定點是否在多邊形內的同時確保了準確性和效率一個多邊形。
以上是如何在 C# 中確定點是否位於多邊形內?的詳細內容。更多資訊請關注PHP中文網其他相關文章!