/// <summary> /// Tessellates the given polygon with triangles /// </summary> /// <param name="poly">The polygon to be tessellated</param> /// <returns>Returns the calculated triangles</returns> public static Vec2I[][] Polygon2Triangles(Vec2I[] poly) { var tris = new Vec2I[poly.Length - 2][]; int k = 0; var list = new LinkedList <Vec2I>(); for (int i = 0; i < poly.Length; i++) { list.AddLast(poly[i]); } var node = list.First; while (node.Next != null && node.Next.Next != null) { var p1 = node.Value; var p2 = node.Next.Value; var p3 = node.Next.Next.Value; bool doRemove = true; var forward = node.Next.Next; while (forward.Next != null) { forward = forward.Next; if (PointInTri(forward.Value, p1, p2, p3)) { doRemove = false; break; } } if (doRemove) { var backward = node; while (backward.Previous != null) { backward = backward.Previous; if (PointInTri(backward.Value, p1, p2, p3)) { doRemove = false; break; } } if (doRemove) { list.Remove(node.Next); tris[k++] = new Vec2I[] { p1, p2, p3 }; } } node = node.Next; } return(tris); }
public bool Contains(Vec2I p) { return(L <= p.X && R >= p.X && T <= p.Y && B >= p.Y); }