![]() |
окружность вписанная в эллипс?
Есть эллипс, в него вписан круг, круг таскается мышкой, круг не должен вылазить за пределы эллипса. http://prntscr.com/2npnz9
Может кто за делиться кодом, либо хорошей ссылке по теме. |
http://ru.wikipedia.org/wiki/%DD%EB%EB%E8%EF%F1 :о)
Добавлено через 9 минут Я бы попробовал так. Из центра эллипса вектор в центр окружности, находим радиус эллипса через этот вектор. Если радиус эллипса больше, чем длина отрезка между центрами сущностей + радиус окружности, то все ок. Но думаю, бывалые скажут лучше. |
Меня с недавнего времени волнует тема с пересечениями и мне хочется спросить, чтобы, как многие говорят, не выдумывать велосипеды - есть ли смысл в проверки на принадлежность точки фигуре или, как в данном случаи, проверка на вписанность, прибегать к геометрии? Или проще и менее затратно работать с BMD и проверять по пикселям?
Добавлено через 1 минуту В жизни Вам вообще эти алгоритмы помогали? Или в жизни, когда делаешь что-то большое, не пользуешься самописными проверками?) |
Нормальная геометрия почти всегда быстрее и точнее. Это задача должны быть очень изощрённой чтобы по пикселям было быстрее.
|
GBee
Спасибо, звучит очень хорошо, но что то сейчас не особо могу переварить, с утра за компом. А с математикой/геометрией сейчас голова отказываеться работать)) Мне бы кода)) Да и как я понял у меня задача усложнилась, когда я сделал ограничения на коробку http://prntscr.com/2nqhsy то есть в дебаг не эллипс а прямоугольник, мне стало понятно, что когда вожу мышь за пределами допустимой области, то мне надо что бы кружок двигался по максимальной допустимой границы эллипса. |
Aquahawk Спасибо! Вы вроде не чего не сказали, а даже представить не можете, как мне помогли.
|
Вложений: 1
GBee, это в окружности любая прямая, проходящая через центр, перпендикулярна окружности. В эллипсе — только оси. Так что придется искать перпендикуляр (кратчайшее расстояние) из центра окружности к дуге эллипса и сверять его с радиусом окружности.
Вложение 30421 |
Wolsh, я же в голове рисовал :D
|
Можно решить систему уравнений окружности и эллипса, если все корни комплексные, значит окружность не пересекает эллипс. Вот примеры для наглядности:
1) Пересечение в четырех точках (4 вещественных корня) 2) Пересечение в двух точках (2 вещественных корня) 3) Еще раз пересечение в двух точках (2 вещественных + 2 комплексных корня) 4) Нет пересечения (4 комплексных корня) 5) Еще раз нет пересечения (4 комплексных корня) 6) Одна точка пересечения (1 вещественный + 2 комплексных корня) |
Вложений: 1
А у меня другая идея - уменьшить оба радиуса эллипса (обе полуоси) на радиус окружности и вычислять радиус в точке, в которой находится центр круга по формуле
Вложение 30424 Если расстояние до центра эллипса меньше, чем вычисленное значение радиуса, то круг внутри эллипса a и b - это большая и малая полуось эллипса. угол фи находится через арктангенс координат центра круга, функция Math.atan2() Я правда не знаю точно, приведет ли уменьшение полуосей эллипса на радиус к тому, что круг будет всегда внутри эллипса, но по идее должно работать. Если поворачивать эллипс, то можно заперентить его на какой нибудь ДО, и повернуть родительский ДО. Тогда дочерние ДО (эллипс и круг) будут иметь локальные координаты, как будто горизонтально, без поворота Плюсы - быстро, модно, молодежно, без уравнений и корней Минусы - при повороте эллипса придется либо формулы менять, либо вешать внутрь какого-либо родительского ДО для поворота этого родительского ДО --UPD Или стоп, можно изначально не уменьшать полуоси, а потом после вычисления радиуса по формуле вычесть из него. Вот тогда точно будет работать |
Практически ваша задача
http://www.gamedev.ru/code/forum/?id=72507 |
если устроит не совсем элипс, а скорее овал из кривых, то с помощью безьевых утилит Дембицкого можно
Код AS3:
а можно и не связываться с безье, а строить просто отрезками и брать ближайший по наименьшему расстоянию, тогда и эллипс будет как эллипс Код AS3:
|
Спасибо всем за вкусные ссылочки. Сейчас срочную работу кинули и не могу их оценить по достоинству, но вижу что решения в них. Как разгребусь, покажу что получилось.
|
Цитата:
это сам придумал или есть где? по стандартной Код AS3:
onStage_mouseMove |
Цитата:
1. Зачем "_" в названиях функций? Очень некрасиво. 2. Лишний постфикс "Handler" к каждому хендлеру? Это то же самое, что и писать: Код AS3:
Код AS3:
Но это всё ИМХО. Не стоит спорить по этому поводу :) |
Цитата:
|
Во как получилось
http://vorodis2.com/test/debagElips/ Изюминка в том что надо было искать не край а центр, эллипса меньше на радиус круга. Правда при плоских эллипсах немного круг вылазит, но для моей задачи это не критично. Кому надо, вот исходник. http://vorodis2.com/test/debagElips/debagElips.rar |
Выбрали мой метод! Урещщии!
|
| Часовой пояс GMT +4, время: 20:10. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.