public bool Equals(Vertex obj) { return obj.Position.Equals(Position) && obj.Index == Index; }
private static void ValidateAdjacentVertex(Vertex vertex) { if (reflexVertices.Contains(vertex)) { if (IsConvex(vertex)) { reflexVertices.Remove(vertex); convexVertices.Add(vertex); } } if (convexVertices.Contains(vertex)) { bool wasEar = earVertices.Contains(vertex); bool isEar = IsEar(vertex); if (wasEar && !isEar) { earVertices.Remove(vertex); } else if (!wasEar && isEar) { earVertices.AddFirst(vertex); } } }
private static bool IsReflex(Vertex c) { return !IsConvex(c); }
private static bool IsEar(Vertex c) { Vertex p = polygonVertices[polygonVertices.IndexOf(c) - 1].Value; Vertex n = polygonVertices[polygonVertices.IndexOf(c) + 1].Value; foreach (Vertex t in reflexVertices) { if (t.Equals(p) || t.Equals(c) || t.Equals(n)) continue; if (Triangle.ContainsPoint(p, c, n, t)) return false; } return true; }
private static bool IsConvex(Vertex c) { Vertex p = polygonVertices[polygonVertices.IndexOf(c) - 1].Value; Vertex n = polygonVertices[polygonVertices.IndexOf(c) + 1].Value; Vector2 d1 = Vector2.Normalize(c.Position - p.Position); Vector2 d2 = Vector2.Normalize(n.Position - c.Position); Vector2 n2 = new Vector2(-d2.Y, d2.X); return (Vector2.Dot(d1, n2) <= 0f); }
public LineSegment(Vertex a, Vertex b) { A = a; B = b; }