Example #1
0
 /// <summary>
 /// Расстояние от точки до полигона
 /// </summary>
 /// <param name="pnt">Точка</param>
 /// <returns></returns>
 public float DistancePoint(PointF pnt)
 {
     if (pnts.Count < 3) throw new Exception("Точек в полигоне должно быть минимум 3");
     var v1 = new Vector();
     float minDistPow2 = float.MaxValue, distPow2;
     PointF curr;
     for (var i = 0; i < pnts.Count; i++)
     {
         v1.Begin = pnts[i];
         v1.End = pnts[(i + 1) % pnts.Count];
         curr = v1.GetNormal(pnt);
         distPow2 = pnt.DistancePow2(curr);
         if (distPow2 < minDistPow2)
             minDistPow2 = distPow2;
     }
     minDistPow2 = (float)Math.Sqrt(minDistPow2);
     return JointPoint(pnt) ? -minDistPow2 : minDistPow2;
 }
Example #2
0
 /// <summary>
 /// Точка нормали лежащая на границе полигона
 /// </summary>
 /// <param name="pnt">Внешняя точка</param>
 /// <returns></returns>
 public PointF GetNormalPoint(PointF pnt)
 {
     if (pnts.Count < 3) throw new Exception("Точек в полигоне должно быть минимум 3");
     var v1 = new Vector();
     float minDistPow2 = float.MaxValue, distPow2;
     PointF curr, res = new PointF();
     for (var i = 0; i < pnts.Count; i++)
     {
         v1.Begin = pnts[i];
         v1.End = pnts[(i + 1) % pnts.Count];
         curr = v1.GetNormal(pnt);
         distPow2 = pnt.DistancePow2(curr);
         if (distPow2 < minDistPow2)
         {
             res = curr;
             minDistPow2 = distPow2;
         }
     }
     return res;
 }