Пример #1
0
        public virtual Segment2D ClosestEdgeTo(Segment2D segment)
        {
            Vector2 closestVertex = ClosestVertexTo(segment);
            int     vertexIndex   = GetVertexIndex(closestVertex);

            int previousVertex = vertexIndex > 0 ? vertexIndex - 1 : Vertices.Length - 1;
            int nextVertex     = vertexIndex < Vertices.Length - 1 ? vertexIndex + 1 : 0;

            float previousDistance = segment.PerpendicularDistance(Vertices[previousVertex]);
            float nextDistance     = segment.PerpendicularDistance(Vertices[nextVertex]);

            if (previousDistance >= nextDistance)
            {
                return(new Segment2D(closestVertex, Vertices[previousVertex]));
            }
            else
            {
                return(new Segment2D(closestVertex, Vertices[nextVertex]));
            }
        }
Пример #2
0
        /// <summary>
        /// Returns the furthest point of this polygon to a segment.
        /// </summary>
        /// <param name="segment"></param>
        /// <returns>The furthest point of this polygon to another segment.</returns>
        public virtual Vector2 FurthestPointFrom(Segment2D segment)
        {
            float furthestDistance = int.MinValue;
            int   index            = 0;

            for (int i = 0; i < Vertices.Length; i++)
            {
                float distance = segment.PerpendicularDistance(Vertices[i]);
                if (distance > furthestDistance)
                {
                    furthestDistance = distance;
                    index            = i;
                }
            }

            return(Vertices[index]);
        }
Пример #3
0
 /// <summary>
 /// Returns the furthest Vertex of this polygon to a segment.
 /// </summary>
 /// <param name="segment"></param>
 /// <returns>The furthest Vertex of this polygon to a segment.</returns>
 public virtual Vector2 FurthestVertexFrom(Segment2D segment)
 {
     return(Hedra.FurthestObject(Vertices.ToList(), (vertex => segment.PerpendicularDistance(vertex))));
 }