bool IsContainedBy(Extent2D extent) { if (extent.Contains(m_v[0].X, m_v[0].Y) && extent.Contains(m_v[1].X, m_v[1].Y) && extent.Contains(m_v[2].X, m_v[2].Y)) { return(true); } return(false); }
public bool Contains(DelaunayPoint p) { // Only bother to check if the point is within the initial extents of the Triangle_t if (m_extent.Contains(p.X, p.Y, true)) { return( (DelaunayGeometry.CrossProduct(m_v[0], p, m_v[1]) >= 0.0) && (DelaunayGeometry.CrossProduct(m_v[1], p, m_v[2]) >= 0.0) && (DelaunayGeometry.CrossProduct(m_v[2], p, m_v[0]) >= 0.0)); } return(false); }
bool Overlaps(Extent2D extent) { // Check simplist case - triangle inside extent. if (extent.Contains(m_extent)) return true; // Use right-hand rule for each triangle segment against all points of extent rectangle. DelaunayPoint p1 = new DelaunayPoint(extent.MinX, extent.MinY, 0.0f, 0); DelaunayPoint p2 = new DelaunayPoint(extent.MaxX, extent.MinY, 0.0f, 0); DelaunayPoint p3 = new DelaunayPoint(extent.MaxX, extent.MaxY, 0.0f, 0); DelaunayPoint p4 = new DelaunayPoint(extent.MinX, extent.MaxY, 0.0f, 0); int ar = 0; if (DelaunayGeometry.CrossProduct(m_v[0], p1, m_v[1]) >= 0.0f) ++ar; if (DelaunayGeometry.CrossProduct(m_v[0], p2, m_v[1]) >= 0.0f) ++ar; if (DelaunayGeometry.CrossProduct(m_v[0], p3, m_v[1]) >= 0.0f) ++ar; if (DelaunayGeometry.CrossProduct(m_v[0], p4, m_v[1]) >= 0.0f) ++ar; int br = 0; if (DelaunayGeometry.CrossProduct(m_v[1], p1, m_v[2]) >= 0.0f) ++br; if (DelaunayGeometry.CrossProduct(m_v[1], p2, m_v[2]) >= 0.0f) ++br; if (DelaunayGeometry.CrossProduct(m_v[1], p3, m_v[2]) >= 0.0f) ++br; if (DelaunayGeometry.CrossProduct(m_v[1], p4, m_v[2]) >= 0.0f) ++br; int cr = 0; if (DelaunayGeometry.CrossProduct(m_v[2], p1, m_v[0]) >= 0.0f) ++cr; if (DelaunayGeometry.CrossProduct(m_v[2], p2, m_v[0]) >= 0.0f) ++cr; if (DelaunayGeometry.CrossProduct(m_v[2], p3, m_v[0]) >= 0.0f) ++cr; if (DelaunayGeometry.CrossProduct(m_v[2], p4, m_v[0]) >= 0.0f) ++cr; // There will be some sort intersection of triangle with rectangle if at least one point of // the rectangle is on, or to the right (not zero) of every segment of the triangle. if (ar != 0 && br != 0 && cr != 0) { return true; } return false; }
bool Overlaps(Extent2D extent) { // Check simplist case - triangle inside extent. if (extent.Contains(m_extent)) { return(true); } // Use right-hand rule for each triangle segment against all points of extent rectangle. DelaunayPoint p1 = new DelaunayPoint(extent.MinX, extent.MinY, 0.0f, 0); DelaunayPoint p2 = new DelaunayPoint(extent.MaxX, extent.MinY, 0.0f, 0); DelaunayPoint p3 = new DelaunayPoint(extent.MaxX, extent.MaxY, 0.0f, 0); DelaunayPoint p4 = new DelaunayPoint(extent.MinX, extent.MaxY, 0.0f, 0); int ar = 0; if (DelaunayGeometry.CrossProduct(m_v[0], p1, m_v[1]) >= 0.0f) { ++ar; } if (DelaunayGeometry.CrossProduct(m_v[0], p2, m_v[1]) >= 0.0f) { ++ar; } if (DelaunayGeometry.CrossProduct(m_v[0], p3, m_v[1]) >= 0.0f) { ++ar; } if (DelaunayGeometry.CrossProduct(m_v[0], p4, m_v[1]) >= 0.0f) { ++ar; } int br = 0; if (DelaunayGeometry.CrossProduct(m_v[1], p1, m_v[2]) >= 0.0f) { ++br; } if (DelaunayGeometry.CrossProduct(m_v[1], p2, m_v[2]) >= 0.0f) { ++br; } if (DelaunayGeometry.CrossProduct(m_v[1], p3, m_v[2]) >= 0.0f) { ++br; } if (DelaunayGeometry.CrossProduct(m_v[1], p4, m_v[2]) >= 0.0f) { ++br; } int cr = 0; if (DelaunayGeometry.CrossProduct(m_v[2], p1, m_v[0]) >= 0.0f) { ++cr; } if (DelaunayGeometry.CrossProduct(m_v[2], p2, m_v[0]) >= 0.0f) { ++cr; } if (DelaunayGeometry.CrossProduct(m_v[2], p3, m_v[0]) >= 0.0f) { ++cr; } if (DelaunayGeometry.CrossProduct(m_v[2], p4, m_v[0]) >= 0.0f) { ++cr; } // There will be some sort intersection of triangle with rectangle if at least one point of // the rectangle is on, or to the right (not zero) of every segment of the triangle. if (ar != 0 && br != 0 && cr != 0) { return(true); } return(false); }
bool IsContainedBy(Extent2D extent) { if (extent.Contains(m_v[0].X, m_v[0].Y) && extent.Contains(m_v[1].X, m_v[1].Y) && extent.Contains(m_v[2].X, m_v[2].Y)) { return true; } return false; }