![]() |
|
|
![]()
|
|
| tennisru |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 3.12.2011 Репутация: нет Всего: нет |
дано координаты центра и радиус окружности, координаты треугольника. найти площадь пресечения круга и треугольника , с погрешностью 0,0000001 даже не представляю как это делать, через вектора но как? |
|||
|
||||
| maxdiver |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 29.1.2008 Где: Саратов Репутация: 16 Всего: 18 |
||||
|
||||
| sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: нет Всего: 13 |
Очень хороший вариант описан тут
Но можно и через векторы. Функция считает пересечения между прямой заданой двуми точками и окружностью лежащей в начале координат с радиусом r Вроде как в расчетах не должен был ошибиться, ибо считал не я а wolframalpha.com
До первого варианта легко дойти и точность у него приемлемая. Второй вариант работает молниеносно (компилятор еще и сильно оптимизирует), а точность зависит только от компьютера. Смысл в том, что берете уравнение круга, уравнение прямой по двум точкам (или вектора, как хотите) и приравниваете. Уравнение круга можно взять для начала координат и просто сдвинуть точки треугольника на расстояние до центра коружности по каждой оси. (так сделано у меня) То что получается считать не обязательно, на это есть wolframalpha.com Главное не забыть потом проверить точки на пренадлежность к отрезку, так как пересечение считается по прямой. А далее площадь по формуле площади полигона (через детерменант), как это указано в топике который вам скинул maxdiver |
|||
|
||||
| maxdiver |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 29.1.2008 Где: Саратов Репутация: 16 Всего: 18 |
sQu1rr
Вы привели, как искать точки пересечения треугольника с кругом, что в общем-то очень боянистая задача, и её можно решать и из геометрических соображений, избегая явного решения сложных квадратных уравнений. Однако самое интересное ведь начинается дальше: как считать площадь? Тут есть несколько трудностей: 1) некоторые вершины треугольника могли лежать внутри круга, как вы предлагаете это обрабатывать 2) в искомом пересечении круга и треугольника некоторые рёбра являются прямыми отрезками, а некоторые - дугами окружности (например, когда две вершины треугольника лежат внутри круга, а одна - вне). Опять же, вы не описали, как это обрабатывать, да и, кроме того, вообще посчитать площадь такого "кривого сектора" круга - не самая простая задача, связанная с вычислением интегралов. P.S. В той теме я кратко описал точное решение, которое учитывает всё это. Само собой, в нём тоже используется пересечение прямой и окружности, но я просто хотел сказать, что это, imho, где-то лишь 10% от всего решения. |
|||
|
||||
| sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: нет Всего: 13 |
Преведенная мною функция выдаст пересечения линии образованными сторонами с окружностью. Принадлежность точки к сторонее треугольника можно вычеслить сравнением ее координат с крайними координатами отрезка. Не вижу особой проблемы. ТС спросил про векторы, я указал на возможное решение для нахождения пересчений, первым делом повторно указав на ваш топик, так как мой алгоритм покрывает, как вы правильно указали только лишь альтернативное нахождение пересечений треугольника и круга. Нигде не было мною заявлено что это решение задачи, более того, внизу я сослался на ваше решение в плане вычесления площади, указывая формулу площади полигона, что само собой непременимо в подходе описанным мной, имея ввиду ваш способ решения. |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |