Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- namespace DistanceTask
- {
- public static class DistanceTask
- {
- // Расстояние от точки (x, y) до отрезка AB с координатами A(ax, ay), B(bx, by)
- public static double GetDistanceToSegment(double ax, double ay, double bx, double by, double x, double y)
- {
- double otrezokAB = Math.Sqrt(Math.Pow(ax - bx, 2) + Math.Pow(ay - by, 2));
- double otrezokAX = Math.Sqrt(Math.Pow(ax - x, 2) + Math.Pow(ay - y, 2));
- double otrezokBX = Math.Sqrt(Math.Pow(x - bx, 2) + Math.Pow(y - by, 2));
- double cosABBХ = ((x - ax) * (bx - ax) + (y - ay) * (by - ay)) / (otrezokAX * otrezokAB);
- double cosBAAХ = ((x - bx) * (ax - bx) + (y - by) * (ay - by)) / (otrezokBX * otrezokAB);
- if (Math.Round(otrezokAX,3) + Math.Round(otrezokBX,3) == Math.Round(otrezokAB,3))
- {
- return 0.0;
- }
- if ((cosABBХ >= 0 && cosABBХ < 1) && (cosBAAХ >= 0 && cosBAAХ < 1))
- {
- //Через Площадь
- double polysumma = (otrezokAB + otrezokAX + otrezokBX) / 2;
- double s = Math.Sqrt(polysumma *(polysumma - otrezokAB)*(polysumma - otrezokBX)*(polysumma - otrezokAX));
- double visota = (2 * s) / otrezokAB;
- return visota;
- }
- return Math.Min(otrezokAX, otrezokBX);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement