Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
HappyJoe
3 / 3 / 1
Регистрация: 16.09.2013
Сообщений: 31
#1

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

23.09.2013, 20:06. Просмотров 2322. Ответов 12
Метки нет (Все метки)

Доброго вечера. Помогите, пожалуйста, решить задачку: нужно вернуть методом расстояние от точки до заданной фигуры.
Вот сама фигура:
C#
1
2
3
4
5
6
7
8
        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, вот таким образом:
C#
1
2
3
4
5
        public double GetDistanceToCurve(double x, double y)
        {
            //TODO
            return 0;
        }
вот вместо нуля нужно записать формулу.

Вот пример:

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

Заранее спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2013, 20:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Расстояние от точки до фигуры (C#):

Для каждой четверти напечатать точки, принадлежащие ей, и две точки, расстояние между которыми минимально. - C#
Как можно это реализовать ? Случайным образом формируются координаты X и Y 100 точек. Диапазон значений координат от -150 до +150....

Для каждой четверти напечатать точки, принадлежащие ей, и две точки, расстояние между которыми минимально. - C#
Только начали проходить массивы, люди помогите пожалуйста с решением этой задачи, буду признателен. Случайным образом формируются...

Построить контур фигуры равноудаленный от заданной на n-ное расстояние - C#
Добрый вечер уважаемые форумчане) мне тут попалась одна задачка и у меня возникли небольшие трудности с составлением алгоритма. Итак задача...

Определить расстояние до линии горизонта от точки - C#
Считая, что Земля — идеальная сфера с радиусом R 6350 км, определить расстояние до линии горизонта от точки с высотой над Землей, равной...

Определить наименьшее расстояние от точки до прямой - C#
Здравствуйте, хочу посоветоваться по 1 не очень сложному заданию, новичок в си шарп. Определить наименьшее расстояние от точки (x1,y1) до...

вращение фигуры (точки) - C#
Создать приложение, в котором при движении мыши точка(или другая фигура) будет вращаться по кругу. Указания: x = cos t; y = sin t; ...

12
Psilon
Master of Orion
Эксперт .NET
5917 / 4816 / 634
Регистрация: 10.07.2011
Сообщений: 14,434
Записей в блоге: 5
Завершенные тесты: 4
23.09.2013, 20:58 #2
HappyJoe,
в 2 этапа
1) ищем, до центра какой кривой расстояние наименьшее
2) строим перпендикуляр к этой кривой и считаем длину.

Добавлено через 2 минуты
Естественно, нужно матиматическое представление всех кривых/кривой.
0
HappyJoe
3 / 3 / 1
Регистрация: 16.09.2013
Сообщений: 31
23.09.2013, 21:09  [ТС] #3
Цитата Сообщение от Psilon Посмотреть сообщение
HappyJoe,
в 2 этапа
1) ищем, до центра какой кривой расстояние наименьшее
2) строим перпендикуляр к этой кривой и считаем длину.

Добавлено через 2 минуты
Естественно, нужно матиматическое представление всех кривых/кривой.
не очень понятно, как строить перпендикуляр к полуокружности. и вообще, что понимать под "расстоянием" в первом пункте? это ведь и есть перпендикуляр
0
Psilon
Master of Orion
Эксперт .NET
5917 / 4816 / 634
Регистрация: 10.07.2011
Сообщений: 14,434
Записей в блоге: 5
Завершенные тесты: 4
23.09.2013, 21:10 #4
HappyJoe, ну да.
Находить нужно с помощью любого метода оптимизации, но для этого нужна унимодальность, а для этого нужно определить сегмент, на котором ищем.
0
HappyJoe
3 / 3 / 1
Регистрация: 16.09.2013
Сообщений: 31
23.09.2013, 21:20  [ТС] #5
Цитата Сообщение от Psilon Посмотреть сообщение
HappyJoe, ну да.
Находить нужно с помощью любого метода оптимизации, но для этого нужна унимодальность, а для этого нужно определить сегмент, на котором ищем.
а нельзя ли каким-то образом сделать так, чтоб программа рисовала круги с постоянно увеличивающимся радиусом до тех пор, пока не пересечется с прямой?
0
Koropet
13 / 12 / 1
Регистрация: 24.02.2013
Сообщений: 31
23.09.2013, 21:32 #6
Может прогнать некую точку по самой фигуре и считать расстояния между ней и заданной точкой и найти наименьшее.
0
HappyJoe
3 / 3 / 1
Регистрация: 16.09.2013
Сообщений: 31
23.09.2013, 21:37  [ТС] #7
Цитата Сообщение от Koropet Посмотреть сообщение
Может прогнать некую точку по самой фигуре и считать расстояния между ней и заданной точкой и найти наименьшее.
совсем непонятно :С
появилась такая мысль: если мы обнаружили, что она ближе к полуокружности, то находим расстояние так: " расстояние между нашей точкой до центра окр. МИНУС радиус окр."
а если ближе к прямым - то через площадь(формула герона, например, или еще как-то) выразить высоту.

остался 1 вопрос - как определить, к какой прямой ближе все таки?

p.s.: кстати, код должен быть коротким и читабельным. говорят, укладывались в 6 строчек. если у кого-то есть идеи как это сделать - пишите свои варианты кода, позязя :3
0
Koropet
13 / 12 / 1
Регистрация: 24.02.2013
Сообщений: 31
23.09.2013, 21:49 #8
Цитата Сообщение от HappyJoe Посмотреть сообщение
совсем непонятно :С
Я имею в виду, что можно разбить все отрезки и окружность на n кусочков и от каждой получившейся вершины посчитать расстояния, найти наименьшее и соответствующий ему отрезок будет ближайшим.
0
HappyJoe
3 / 3 / 1
Регистрация: 16.09.2013
Сообщений: 31
23.09.2013, 21:56  [ТС] #9
Цитата Сообщение от Koropet Посмотреть сообщение
Я имею в виду, что можно разбить все отрезки и окружность на n кусочков и от каждой получившейся вершины посчитать расстояния, найти наименьшее и соответствующий ему отрезок будет ближайшим.
это n должно быть бесконечным, чтоб ответ совпадал с реальным, либо будет просто приближенное значение. а это не пойдет(
0
Koropet
13 / 12 / 1
Регистрация: 24.02.2013
Сообщений: 31
23.09.2013, 22:28 #10
Это n может быть небольшим, оно даст нам понять какой отрезок является ближайшим а там уже точнее все сделать.
1
Psilon
Master of Orion
Эксперт .NET
5917 / 4816 / 634
Регистрация: 10.07.2011
Сообщений: 14,434
Записей в блоге: 5
Завершенные тесты: 4
23.09.2013, 22:29 #11
Koropet, спасибо, что разжевали первый ответ. А то видимо слишком сложно было написано...
0
HappyJoe
3 / 3 / 1
Регистрация: 16.09.2013
Сообщений: 31
23.09.2013, 23:45  [ТС] #12
Цитата Сообщение от Psilon Посмотреть сообщение
Koropet, спасибо, что разжевали первый ответ. А то видимо слишком сложно было написано...
Ну да, в общем-то, спасибо. Я же тупой просто, не смогу сам догадаться. Иначе зачем тогда форум для начинающих, если не объяснять то, что для меня "сложно" написано?

Добавлено через 17 минут
в общем-то и без вас разобрался, как сделать это задание. получилось что-то типа такого
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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;
        }
    }
}
если у кого-то есть идеи, как сделать код короче - буду очень признателен любой критике. спасибо за внимание
0
Psilon
Master of Orion
Эксперт .NET
5917 / 4816 / 634
Регистрация: 10.07.2011
Сообщений: 14,434
Записей в блоге: 5
Завершенные тесты: 4
24.09.2013, 00:33 #13
HappyJoe, для "начинающих" и для "Ограниченных" - немного разные определения.

Ваш вариант работает, для конкретных кривых. Сказали бы "набыдлокодьте быстренько для данной реализации код" сразу - было бы проще.
0
24.09.2013, 00:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2013, 00:33
Привет! Вот еще темы с ответами:

Метод возвращает неправильно расстояние от отрезка до точки - C#
В частности при A(-30;0), B(30;0), K(60;30) правильный ответ 42,4264068711929. Я вычисляю, с расчерчивание в тетради и получается 30....

Вычислить расстояние от отрезка до точки без кучи условий - C#
Как это сделать без кучи условий?

Найти расстояние от данной точки до ближайшей стороны треугольника - C#
Даны координаты вершин треугольника и координаты некоторой точки внутри него. Найти расстояние от данной точки до ближайшей стороны...

Определить расстояние до линии горизонта от точки с высотой над Землей ... - C#
Решить задачу в приложении Windows Forms: Считая, что Земля — идеальная сфера с радиусом R ~ 6350 км. опреде¬лить расстояние до линии...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.