Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/30: Рейтинг темы: голосов - 30, средняя оценка - 4.70
3 / 3 / 1
Регистрация: 16.09.2013
Сообщений: 31

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

23.09.2013, 20:06. Показов 6571. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.09.2013, 20:06
Ответы с готовыми решениями:

Кратчайшее расстояние от произвольной точки M(x, y) до контура фигуры
Найти кратчайшее расстояние от произвольной точки M(x,y) с координатами x и y до контура фигуры,точка может располагаться как внутри так и...

найти кратчайшее расстояние от произвольной точки M(X,Y) с координатами X и Y до контура фигуры
найти кратчайшее расстояние от произволь- ной точки M(X,Y) с координатами X и Y до контура фигуры, точка может распо- лагаться внутри и...

Показать,что ГМТ точки, расстояние которой от прямой Х=45 в 3 рза больше, чем расстояние от точки А(5,0)
показать,что ГМТточки ,расстояние которой от прямой Х=45 в 3 рза больше,чемрасстояние от точки А(5,0) до эллипса

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

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

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

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

p.s.: кстати, код должен быть коротким и читабельным. говорят, укладывались в 6 строчек. если у кого-то есть идеи как это сделать - пишите свои варианты кода, позязя :3
0
18 / 15 / 8
Регистрация: 24.02.2013
Сообщений: 47
23.09.2013, 21:49
Цитата Сообщение от HappyJoe Посмотреть сообщение
совсем непонятно :С
Я имею в виду, что можно разбить все отрезки и окружность на n кусочков и от каждой получившейся вершины посчитать расстояния, найти наименьшее и соответствующий ему отрезок будет ближайшим.
0
3 / 3 / 1
Регистрация: 16.09.2013
Сообщений: 31
23.09.2013, 21:56  [ТС]
Цитата Сообщение от Koropet Посмотреть сообщение
Я имею в виду, что можно разбить все отрезки и окружность на n кусочков и от каждой получившейся вершины посчитать расстояния, найти наименьшее и соответствующий ему отрезок будет ближайшим.
это n должно быть бесконечным, чтоб ответ совпадал с реальным, либо будет просто приближенное значение. а это не пойдет(
0
18 / 15 / 8
Регистрация: 24.02.2013
Сообщений: 47
23.09.2013, 22:28
Это n может быть небольшим, оно даст нам понять какой отрезок является ближайшим а там уже точнее все сделать.
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
23.09.2013, 22:29
Koropet, спасибо, что разжевали первый ответ. А то видимо слишком сложно было написано...
0
3 / 3 / 1
Регистрация: 16.09.2013
Сообщений: 31
23.09.2013, 23:45  [ТС]
Цитата Сообщение от 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
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
24.09.2013, 00:33
HappyJoe, для "начинающих" и для "Ограниченных" - немного разные определения.

Ваш вариант работает, для конкретных кривых. Сказали бы "набыдлокодьте быстренько для данной реализации код" сразу - было бы проще.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.09.2013, 00:33
Помогаю со студенческими работами здесь

Определить кратчайшее расстояние от заданной точки до границы заданной фигуры
Определить кратчайшее расстояние от заданной точки до границы заданной фигуры, если точка находится внутри фигуры, иначе вывести...

Определить кратчайшее расстояние от заданной точки до границы заданной фигуры, считая, что точка находится вне
Определить кратчайшее расстояние от заданной точки до границы заданной фигуры, считая, что точка находится вне

Требуется требуется найти кратчайшее расстояние от произвольной точки M(X,Y) с координатами X и Y до контура фигуры , точка может распологаться как вн
Требуется требуется найти кратчайшее расстояние от произвольной точки M(X,Y) с координатами X и Y до контура фигуры , точка может...

Найти расстояние от начала координат до каждой точки и расстояние между точками
задача на С++ На плоскости заданы точки своими координатами. Найти расстояние от начала координат до каждой точки и расстояние между...

Аналитическая геометрия: расстояние между точками, расстояние от точки до прямой и т.д
всем привет! есть несколько задачек, которые нужно реализовать на vb .net, буду рад если поможете собственно задачи (по аналитической...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru