Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > Найти прямоугольник, охватывающий эллипс |
Автор: mr.DUDA 23.1.2006, 14:03 |
Помогите решить такую задачку по геометрии, пожалуйста: Есть эллипс, с центром в точке (0;0). Эллипс может быть повёрнут вокруг центра на угол Alpha. Нужно найти координаты прямоугольника, в который вписан эллипс, то есть охватывающий прямоугольник. Эллипс можно задавать как угодно, например в параметрическом виде (через a и b), либо через функцию от t, как удобней. |
Автор: maxim1000 23.1.2006, 14:07 |
записываем в параметрическом виде X координаты получаем аналитическую функцию находим экстремумы (производная=0) считаем значения в этих точках получаем min и max X эллипса... |
Автор: DENNN 23.1.2006, 14:23 |
Непонятно: стороны прямоугольника д.б. параллельны осям координат или он тоже повернут? |
Автор: mr.DUDA 23.1.2006, 14:25 |
стороны прямоугольника параллельны осям |
Автор: DENNN 23.1.2006, 14:32 |
М.б. не самое изящное решение, но самое простое. Считаем длину проекции каждой из полуосей на ось X. Та, которая больше - задает нам длину прямоугольника по этой оси. Повторяем эту же операцию для оси Y. Т.е., если угол отсчитывается против часовой стрелки от оси OX S1=cos(alfa)*a S2=cos(90+alfa)*b В данном случае предполагается, что полуось a при alfa=0 параллельна OX. |
Автор: mr.DUDA 23.1.2006, 14:39 |
вроде, полуось необязательно проходит через крайнюю по X или Y точку эллипса, если эллипс повёрнутый: |
Автор: DENNN 23.1.2006, 14:51 |
Вот схема S1=cos(alfa)*a S2=sin(alfa)*b S1>S2 -> Width=2*S1=2*cos(alfa)*a S3=cos(alfa)*b S4=sin(alfa)*a S3>S4 - > HEIGHT=2*S3=2*cos(alfa)*b Добавлено @ 15:01 mr.DUDA меня уже поправил - я был не прав. Высота в данном примере будет найдена неверно. |
Автор: DENNN 23.1.2006, 15:11 |
Тогда действительно, получается нужно взять уравнение для конкретного эллипса и найти экстремумы функции. Осталось вывести уравнение для эллиса, "повернутого" относительно начала координат ![]() |
Автор: mr.DUDA 23.1.2006, 15:12 | ||
вот-вот ![]() можно не для конкретного а для любого... |
Автор: Fin 23.1.2006, 19:53 |
Уравнение элипса: X = A * cos(t) Y = B * sin(t) ,где A - апогей элипса B - перигей элипса Что то мне подсказывает, хотя я не доказал, что искомые уравнения будут Ширина = 2 * (A - (A-B)*sin(Al)) Высота = 2 * (B + (A-B)*sin(Al)) где Al - угол поворота элипса (Углы поворота от 0 до 180 градусов) Еше раз повторяю, данные уравнения не доказаны. |
Автор: maxim1000 23.1.2006, 20:01 |
1-й способ: пишем уравнение обычного эллипса, действуем на него матрице поворота 2-й способ: уравнение эллипса можно записать еще так: (x,y)=sin(t) * (ax,ay) + cos(t) * (bx,by) (ax,ay) - вектор, задающий одну полуось (bx,by) - другую... |