Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.133.159.224] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте, просьба разшарить задачку.
Есть два эллипса. Первый с центром в начале координат, а=2, b=4; Центр второго (0,2), а=3, b=1; Важен не конечный результат, а последовательность решения. |
Сообщ.
#2
,
|
|
|
Напиши уравнения обоих эллипсов. x*x/a*a + x*x/b*b = 1 - уравнение для эллипса с центом в начале. Для второго сдвинь переменные. Таким образом получишь два уравнения с двумя неизвестными.
|
Сообщ.
#3
,
|
|
|
при решенье пересичение двух елипсов
випиши уравненние и реши их если ти правильно все зделал то у тебя должно получится полином 4й степени и ето уравненние легко решаетса формулой Ферарри я уже демонстрировал етот пример (r1x,r1y) - радиус первого еллипса (cx,cy) - координати второго еллипса (r2x,r2y) - радиус второго еллипса // для упрощение подсчетов виделем в памяти ячейку для квадратов, чтоби потом процесор не пересчитовал каждий раз const double cx_2 = cx * cx; const double cy_2 = cy * cy; const double r1x_2 = r1x*r1x; const double r1y_2 = r1y*r1y; const double r2x_2 = r2x*r2x; const double r2y_2 = r2y*r2y; const double RyRx = r2y_2/r2x_2 - r1y_2/r1x_2 ; const double z4 = -RyRx*RyRx; const double z3 = 4.0*cx*r2y_2*RyRx/r2x_2; const double z2 = - 4.0 * ( cy_2 * r2x_2 * r2y_2 + cx_2 * r2y_2 * r2y_2 )/(r2x_2 * r2x_2) - 2.0 * RyRx * (( cx_2 / r2x_2 - 1.0) * r2y_2 - cy_2 + r1y_2 ); const double z1 = (4.0 * cx * r2y_2 * (cy_2 * r2x_2 + r1y_2 * r2x_2 + (cx_2 - r2x_2) * r2y_2))/(r2x_2*r2x_2); const double z0 = 4.0 * cy_2 * r2y_2 - (4.0 * cx_2 * cy_2 * r2y_2)/r2x_2 - SQR(r1y_2 - cy_2 + (cx_2/r2x_2 - 1.0) * r2y_2); // решить уравненние: z4 * x^4 + z3 * x^3 + z2 * x^2 + z1 * x + z0 == 0 получем координати X пересичения но чтоби получить координати Y пересечения нужно подставить X в уравненние первого елипса получем две точки но не обезательно обе являютса пересечениями поетому нужно координати X Y подставить в уравненния второго елипса если не подошли тогда ето не пересичение илюстрация: нашол 4 координати X точки пересичения но когда X подставляем будет 8 точек нужно отсеять ненужние в пример програма которая ичет пересичения любого еллипса ---------------------------------- Внимание!!! обратите внимание что могут пересичения пропадать когда они должни бить, ето иизза того что в формуле процесор вичислял сначала очень большое число больше чем 1e+10 (поетому округлил все слеледуюсчи цифри в ноль, помня толька старшии цифри ) потом делил и получалось число довольно приближенное к настоясчиму числу но ето не точнее число когда происходит проверка, точки отбрасиваютса иза етои неточности... формула не совпадает как с етим боротса я даже не думал пока что.... мне небило необходимости но думаю длиная математика и проблеми не будет, хотя уверен можно обойтись условием поиска одной из двух точек подходясчий Прикреплённый файлagg_EllipseAndEllipse.rar (48,07 Кбайт, скачиваний: 246) Добавлено ах да совсем забил мне както/когдато нечем било занятса решил решить ету задачу когда один с елипсов являетса с неким углом поворота уравненния я решил и похоже я все правильно решил но ксожелению у меня получилась полином 6й степени поетому точних координат наййти невозможно тольпо приблеженние... остальное без изменнения коефициенти полинома виписивать не буду ето займет много строчек |