Вписать прямоугольник в эллипс (fast-n-dirty решение)
От: Spaider Верблюд  
Дата: 11.01.05 12:04
Оценка:
Задача состоит в следующем:

Найти прямоугольник наибольшей площади, вписанный в эллипс.

Условия и ограничения:

Объясняю, для чего это нужно:
есть некоторая рабочая область, на которой находятся объекты различной формы. У каждого объекта есть свойство Текст. Оный и требуется отобразить. Для простоты для каждой формы вычисляется прямоугольник, в который текст будет выводиться.

Т.е. особая точность не нужна, т.к. скорость пересчета влияет на скорость отрисовки.

В крайнем случае, "пошлите" меня к какому-нить сборищу алгоритмов по геометрии, что-то с кандачка не получается нарыть более-менее приличных.

NB Я знаю, что в эллипс можно вписать бесконечное число прямоугольников
--
К вашим услугам,
Re: Вписать прямоугольник в эллипс (fast-n-dirty решение)
От: AMogil Россия  
Дата: 11.01.05 12:26
Оценка:
Здравствуйте, Spaider, Вы писали:

S>Задача состоит в следующем:


S>Найти прямоугольник наибольшей площади, вписанный в эллипс.


S>Условия и ограничения:

S>
S>Объясняю, для чего это нужно:

S>есть некоторая рабочая область, на которой находятся объекты различной формы. У каждого объекта есть свойство Текст. Оный и требуется отобразить. Для простоты для каждой формы вычисляется прямоугольник, в который текст будет выводиться.

S>Т.е. особая точность не нужна, т.к. скорость пересчета влияет на скорость отрисовки.


S>В крайнем случае, "пошлите" меня к какому-нить сборищу алгоритмов по геометрии, что-то с кандачка не получается нарыть более-менее приличных.


S>NB Я знаю, что в эллипс можно вписать бесконечное число прямоугольников


Условия: Пересечение диагоналей прямоугольника и осей эллипса совпадают. И для простоты, считаем эту точку пересечения началом координта. Тогда уравнение эллипса :
x^2/a^2 + y^2/b^2 = 1

Решение:
Координаты верхнего левого угла прямоугольника:
x = a*(b^2/(1 + b^2))^0.5
y = (b^2/(1 + b^2))^0.5

Алексей.
... << RSDN@Home 1.1.3 stable >>
Re: Вписать прямоугольник в эллипс (fast-n-dirty решение)
От: Кодт Россия  
Дата: 11.01.05 12:29
Оценка: 8 (1)
Здравствуйте, Spaider, Вы писали:

S>Найти прямоугольник наибольшей площади, вписанный в эллипс.


Параметрическое уравнение эллипса: {x,y}(t) = {X·cos(t),Y·sin(t)} где X,Y — полуоси.
Вершины прямоугольника (-x,-y), (-x,+y), (+x,+y), (+x,-y).
Стороны прямоугольника равны 2x и 2y.
Площадь прямоугольника, очевидно, равна 4xy.
S(t) = 4XY·cos(t)·sin(t) = 4XY·sin(2t)/2 = 2XY·sin(2t)
Максимум достигается при t=45°, sin(2t)=1, sin(t)=cos(t)=sqrt(2)/2.
x = X·sqrt(2)/2
y = Y·sqrt(2)/2
Перекуём баги на фичи!
Re[2]: Вписать прямоугольник в эллипс (fast-n-dirty решение)
От: Spaider Верблюд  
Дата: 11.01.05 13:04
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Spaider, Вы писали:


S>>Найти прямоугольник наибольшей площади, вписанный в эллипс.


К>Максимум достигается при t=45°, sin(2t)=1, sin(t)=cos(t)=sqrt(2)/2.

К>x = X·sqrt(2)/2
К>y = Y·sqrt(2)/2

Ага-ага, большое спасибо.
--
К вашим услугам,
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.