Напишите метод вычисления расстояния от отрезка до точки - C#

Узнай цену своей работы

Формулировка задачи:

// Вставьте сюда финальное содержимое файла DistanceTask.cs
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 ak = Math.Sqrt(((x - ax)*(x - ax))+((y-ay)*(y-ay)));
            double kb = Math.Sqrt(((x - bx)*(x - bx))+((y-by)*(y-by)));
            double ab = Math.Sqrt(((ax - bx)*(ax - bx))+((ay-by)*(ay-by)));
            
            if(x >= ax && x <= bx && ab != 0 )
            {
                
                double p = (ak + kb + ab)/2;
                double s = Math.Sqrt((p*(p - ak)*(p - kb)*(p - ab)));
                
                return (2 * s)/ab;
            }
            
            else if((x <= ax || x >= bx) && ab != 0)
            {
                return Math.Min(ak,kb);
            }else return 0;
        }
    }
}
Помогите найти ошибку. Ответ при AB({X=0, Y=-3},{X=-3, Y=2}) и точке X({X=-2, Y=2}) должен быть 0.857492925712544. А по моему коду получается 1. Я проверил и подставил в формулы, должно получится 1, но задачник не принимает. Глюки в нем исключены, где-то в формулах налажал, но где не могу найти.

Решение задачи: «Напишите метод вычисления расстояния от отрезка до точки»

textual
Листинг программы
double p = (ak + kb + ab)/2.0;
                double s = Math.Sqrt((p*(p - ak)*(p - kb)*(p - ab)));
                
                return (2.0 * s)/ab;

Оцени полезность:

12   голосов , оценка 4.167 из 5
Похожие ответы