Код или формула пересечения двух парабол при любом вращении

StackOverflow https://stackoverflow.com/questions/129815

Вопрос

Я работаю над геометрической задачей, которая требует найти пересечение двух параболических дуг при любом вращении.Мне удалось пересечь линию и параболическую дугу, повернув плоскость, чтобы совместить дугу с осью, но две параболы не могут одновременно совпадать с осью.Я работаю над выводом формул, но хотел бы знать, есть ли уже доступный для этого ресурс.

Это было полезно?

Решение

Сначала я бы определил уравнение параболической дуги в 2D без вращений:

  x(t) = ax² + bx + c
  y(t) = t;

Теперь вы можете применить вращение, построив матрицу вращения:

  s = sin(angle)
  c = cos(angle)

  matrix = | c -s |
           | s  c |

Примените эту матрицу, и вы получите повернутое параметрическое уравнение:

x' (t) = x(t) * c - s*t;
y' (t) = x(t) * s + c*t;

Это даст вам два уравнения (для x и y) ваших параболических дуг.

Сделайте это для обеих повернутых дуг и вычтите их.Это дает вам такое уравнение:

  xa'(t) = rotated equation of arc1 in x
  ya'(t) = rotated equation of arc1 in y.
  xb'(t) = rotated equation of arc2 in x
  yb'(t) = rotated equation of arc2 in y.
  t1 = parametric value of arc1
  t2 = parametric value of arc2

  0 = xa'(t1) - xb'(t2)
  0 = ya'(t1) - yb'(t2)

Каждое из этих уравнений представляет собой всего лишь полином второго порядка.Их легко решить.

Чтобы найти точки пересечения, вы решаете приведенное выше уравнение (например,найди корни).

Вы получите до двух корней для каждой оси.Любой корень, равный по x и y, является точкой пересечения кривых.

Получить должность теперь легко:Просто подставьте корень в параметрическое уравнение, и вы сможете напрямую получить x и y.

Другие советы

К сожалению, общий ответ требует решения полинома четвертого порядка.Если мы преобразуем координаты так, чтобы одна из двух парабол имела стандартную форму y=x^2, то вторая парабола удовлетворяет условию (ax+by)^2+cx+dy+e==0.Чтобы найти пересечение, решите обе задачи одновременно.Подставив y=x^2, мы видим, что результатом является полином четвертого порядка:(ax+bx^2)^2+cx+dx^2+e==0.Поэтому решение Нильса не будет работать (его ошибка:каждый из них является полиномом 2-го порядка по каждой переменной в отдельности, а вместе — нет).

Это легко, если у вас под рукой есть CAS.

Посмотрите решение в системе Mathematica.

Выберите одну параболу и измените координаты так, чтобы ее уравнение стало y(x)=a x^2 (нормальная форма).

Другая парабола будет иметь общий вид:

A x^2 + B x y + CC y^2 + DD x + EE y + F == 0 

where B^2-4 A C ==0 (so it's a parabola)  

Давайте решим числовой случай:

p = {a -> 1, A -> 1, B -> 2, CC -> 1, DD -> 1, EE -> -1, F -> 1};
p1 = {ToRules@N@Reduce[
       (A x^2 + B x y + CC y^2 + DD x + EE y +F /. {y -> a x^2 } /. p) == 0, x]}

{{x -> -2.11769}, {x -> -0,641445}, {x -> 0,379567- 0,76948 i}, {x -> 0,379567+ 0,76948 I}}}

Давайте построим это:

Show[{
  Plot[a x^2 /. p, {x, -10, 10}, PlotRange -> {{-10, 10}, {-5, 5}}], 
  ContourPlot[(A x^2 + B x y + CC y^2 + DD x + EE y + F /. p) == 
    0, {x, -10, 10}, {y, -10, 10}],
  Graphics[{
    PointSize[Large], Pink, Point[{x, x^2} /. p /. p1[[1]]],
    PointSize[Large], Pink, Point[{x, x^2} /. p /. p1[[2]]]
    }]}]

enter image description here

Общее решение включает в себя вычисление корней:

4 A F + 4 A DD x + (4 A^2 + 4 a A EE) x^2 + 4 a A B x^3 + a^2 B^2 x^4 == 0  

Что легко делается в любом CAS.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top