Эллипс подгоняется к точке, изменяя одну ось - PullRequest
0 голосов
/ 03 декабря 2010

График этой проблемы здесь: http://dl.dropbox.com/u/13390614/Question2.jpg

Возьмите выровненный по оси эллипс с фиксированной малой осью и вытяните эллипс вдоль его главной оси, пока периметр эллипса не совпадет с точкой (A на рисунке). Какова длина новой большой оси?

Я могу решить эту проблему, когда обе оси должны быть изменены, но я в тупике, когда модифицирована только одна ось.

Любые идеи будут оценены.

Gary

Ответы [ 2 ]

1 голос
/ 03 декабря 2010

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

Представьте, что это был круг, где диаметр - ваша малая ось. Какова будет ширина круга вдоль линии, где y = P's y? Эквивалентно, что является x точки на диаметре круга, где y = P's y. (Есть два решения для этого. Любой из них подойдет, хотя вам, возможно, потребуется скорректировать знак позже.) Вы можете вычислить это, используя теорему трига или Пифагора.

Ваша большая ось теперь является малой осью * ((P's x) / x).

0 голосов
/ 04 декабря 2010

Большое спасибо за помощь, Лоренс, кажется, работает.

Гари

// В коде

Поскольку эллипс и точка выровнены по оси, точкаявляется вектором.

Переведите точку P на окружность радиуса малой оси, используя фиксированную длину малой оси и постоянный рост точки.

double y = fabs( P.y );
double x = sqrt( semiMnrAxLen * semiMnrAxLen - y * y );
// Calc the new Semi Major Axis length.
newSemiMajAxis = fabs( semiMnrAxLen * ( P.x / x ) );
...