На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> пересечение эллипсов , найти точки пересечения
    Здравствуйте, просьба разшарить задачку.

    Есть два эллипса.
    Первый с центром в начале координат, а=2, b=4;
    Центр второго (0,2), а=3, b=1;

    Важен не конечный результат, а последовательность решения.
      Напиши уравнения обоих эллипсов. x*x/a*a + x*x/b*b = 1 - уравнение для эллипса с центом в начале. Для второго сдвинь переменные. Таким образом получишь два уравнения с двумя неизвестными.
        при решенье пересичение двух елипсов
        випиши уравненние и реши их

        если ти правильно все зделал
        то у тебя должно получится полином 4й степени
        и ето уравненние легко решаетса формулой Ферарри

        я уже демонстрировал етот пример

        (r1x,r1y) - радиус первого еллипса
        (cx,cy) - координати второго еллипса
        (r2x,r2y) - радиус второго еллипса





        ExpandedWrap disabled
          // для упрощение подсчетов виделем в памяти ячейку для квадратов, чтоби потом процесор не пересчитовал каждий раз
          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 подставить в уравненния второго елипса если не подошли тогда ето не пересичение
        илюстрация:
        user posted image
        нашол 4 координати X точки пересичения
        но когда X подставляем будет 8 точек нужно отсеять ненужние


        в пример програма которая ичет пересичения любого еллипса

        ----------------------------------
        Внимание!!!
        обратите внимание что могут пересичения пропадать когда они должни бить, ето иизза того что в формуле процесор вичислял сначала очень большое число больше чем 1e+10 (поетому округлил все слеледуюсчи цифри в ноль, помня толька старшии цифри )
        потом делил и получалось число довольно приближенное к настоясчиму числу но ето не точнее число
        когда происходит проверка, точки отбрасиваютса иза етои неточности... формула не совпадает

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

        Прикреплённый файлПрикреплённый файлagg_EllipseAndEllipse.rar (48,07 Кбайт, скачиваний: 246)

        Добавлено
        ах да
        совсем забил
        мне както/когдато нечем било занятса
        решил решить ету задачу когда один с елипсов являетса с неким углом поворота
        user posted image

        уравненния я решил и похоже я все правильно решил
        но ксожелению у меня получилась полином 6й степени
        поетому точних координат наййти невозможно тольпо приблеженние... остальное без изменнения

        коефициенти полинома виписивать не буду
        ето займет много строчек
        Сообщение отредактировано: Mishamp -
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0244 ]   [ 17 queries used ]   [ Generated: 24.04.24, 16:13 GMT ]