Beispiel #1
0
 /// <summary>
 /// Translates the control points by the specified vector.
 /// </summary>
 /// <param name="vector">The vector.</param>
 public void Translate(ref FPVector2 vector)
 {
     for (int i = 0; i < ControlPoints.Count; i++)
     {
         ControlPoints[i] = FPVector2.Add(ControlPoints[i], vector);
     }
 }
Beispiel #2
0
        public static FP DistanceBetweenPointAndLineSegment(ref FPVector2 point, ref FPVector2 start, ref FPVector2 end)
        {
            if (start == end)
            {
                return(FPVector2.Distance(point, start));
            }

            FPVector2 v = FPVector2.Subtract(end, start);
            FPVector2 w = FPVector2.Subtract(point, start);

            FP c1 = FPVector2.Dot(w, v);

            if (c1 <= 0)
            {
                return(FPVector2.Distance(point, start));
            }

            FP c2 = FPVector2.Dot(v, v);

            if (c2 <= c1)
            {
                return(FPVector2.Distance(point, end));
            }

            FP        b           = c1 / c2;
            FPVector2 pointOnLine = FPVector2.Add(start, FPVector2.Multiply(v, b));

            return(FPVector2.Distance(point, pointOnLine));
        }