Advertisement
Guest User

Untitled

a guest
Sep 18th, 2019
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.49 KB | None | 0 0
  1. using System;
  2.  
  3. namespace DistanceTask
  4. {
  5.     public static class DistanceTask
  6.     {
  7.         // Расстояние от точки (x, y) до отрезка AB с координатами A(ax, ay), B(bx, by)
  8.         public static double GetDistanceToSegment(double ax, double ay, double bx, double by, double x, double y)
  9.         {
  10.             double otrezokAB = Math.Sqrt(Math.Pow(ax - bx, 2) + Math.Pow(ay - by, 2));
  11.             double otrezokAX = Math.Sqrt(Math.Pow(ax - x, 2) + Math.Pow(ay - y, 2));
  12.             double otrezokBX = Math.Sqrt(Math.Pow(x - bx, 2) + Math.Pow(y - by, 2));
  13.             double cosABBХ = ((x - ax) * (bx - ax) + (y - ay) * (by - ay)) / (otrezokAX * otrezokAB);
  14.             double cosBAAХ = ((x - bx) * (ax - bx) + (y - by) * (ay - by)) / (otrezokBX * otrezokAB);
  15.             if (Math.Round(otrezokAX,3) + Math.Round(otrezokBX,3) == Math.Round(otrezokAB,3))
  16.             {
  17.                 return 0.0;
  18.             }
  19.  
  20.             if ((cosABBХ >= 0 && cosABBХ < 1) && (cosBAAХ >= 0 && cosBAAХ < 1))
  21.             {
  22.                 //Через Площадь
  23.                 double polysumma = (otrezokAB + otrezokAX + otrezokBX) / 2;
  24.                 double s = Math.Sqrt(polysumma *(polysumma - otrezokAB)*(polysumma - otrezokBX)*(polysumma - otrezokAX));
  25.                 double visota = (2 * s) / otrezokAB;
  26.                 return visota;
  27.             }
  28.  
  29.            
  30.             return Math.Min(otrezokAX, otrezokBX);
  31.            
  32.            
  33.         }
  34.     }
  35. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement