Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Найти прямоугольник, охватывающий эллипс


Автор: mr.DUDA 23.1.2006, 14:03
Помогите решить такую задачку по геометрии, пожалуйста:

Есть эллипс, с центром в точке (0;0). Эллипс может быть повёрнут вокруг центра на угол Alpha. Нужно найти координаты прямоугольника, в который вписан эллипс, то есть охватывающий прямоугольник.

Эллипс можно задавать как угодно, например в параметрическом виде (через a и b), либо через функцию от t, как удобней.

Автор: maxim1000 23.1.2006, 14:07
записываем в параметрическом виде X координаты
получаем аналитическую функцию
находим экстремумы (производная=0)
считаем значения в этих точках
получаем min и max X эллипса...

Автор: mr.DUDA 23.1.2006, 14:23
Цитата(maxim1000 @ 23.1.2006, 13: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
Тогда действительно, получается нужно взять уравнение для конкретного эллипса и найти экстремумы функции. Осталось вывести уравнение для эллиса, "повернутого" относительно начала координат smile(

Автор: mr.DUDA 23.1.2006, 15:12
Цитата(DENNN @ 23.1.2006, 14:11 Найти цитируемый пост)
Тогда действительно, получается нужно взять уравнение для конкретного эллипса и найти экстремумы функции. Осталось вывести уравнение для эллиса, "повернутого" относительно начала координат (

вот-вот smile
можно не для конкретного а для любого...

Автор: 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) - другую...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)