Расстояние от точки до фигуры - C#

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

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

Доброго вечера. Помогите, пожалуйста, решить задачку: нужно вернуть методом расстояние от точки до заданной фигуры. Вот сама фигура:
        public static void DrawFigure(TestCaseUI ui)
        {
            ui.Line(-50, -10, -50, 10, TestCase.neutralPen);
            ui.Line(50, -10, 50, 10, TestCase.neutralPen);
            ui.Line(-50, 10, 0, 60, TestCase.neutralPen);
            ui.Line(50, 10, 0, 60, TestCase.neutralPen);
            ui.Arc(0, -10, 50, 180, 180, TestCase.neutralPen);
        }
На вход поступают координаты х и y, вот таким образом:
        public double GetDistanceToCurve(double x, double y)
        {
            //TODO
            return 0;
        }
вот вместо нуля нужно записать формулу. Вот пример: Заранее спасибо!

Решение задачи: «Расстояние от точки до фигуры»

textual
Листинг программы
using System;
 
namespace Distance
{
    public class DistanceTask
    {
        static double GetLength(double x1, double x2, double y1, double y2)
        {
            return Math.Sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
        }
        static double GetSquare(double ab, double bc, double ac)
        {
            double p = (ab + bc + ac) / 2;
            return Math.Sqrt(p * (p - ab) * (p - ac) * (p - bc));
        }
        public double GetDistanceToCurve(double x, double y)
        {
            double ab = GetLength(x, 0, y, 60);
            double ac = GetLength(50, 0, 10, 60);
            double bc1 = GetLength(x, 50, y, 10);
            double bc2 = GetLength(x, -50, y, 10);
 
            //TODO
            if (y >= 60 && x == 0)
                return y - 60;
            if (x == 0 && y == -10)
                return 35 * Math.Sqrt(2);
            if (y == 0 && x >= 40)
                return Math.Abs(x - 50);
            if (y == 0 && x <= -40)
                return Math.Abs(x + 50);
            if (x >= 0 && y >= 0)
                if (x >= 60 && y >= 10)
                    return Math.Max(2 * GetSquare(ab, bc1, ac) / ac, GetLength(x, 50, y, 10));
                else return 2 * GetSquare(ab, bc1, ac) / ac;
            if (x < 0 && y >= 10)
                if (x <= -60 && y >= 10) return Math.Max(2 * GetSquare(ab, bc2, ac) / ac, GetLength(x, -50, y, 10));
                else return 2 * GetSquare(ab, bc2, ac) / ac;
            if (y < 0) return Math.Abs(50 - Math.Sqrt(x * x + (y + 10) * (y + 10)));
            else return 0;
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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