我正在研究几何问题,需要在任何旋转中找到两个抛物线弧的交点。通过旋转平面以使弧与轴对齐,我能够将线和抛物线弧交叉,但是两个抛物线不能与轴对齐。我正在努力推导出公式,但我想知道是否有资源可用于此。

有帮助吗?

解决方案

我首先在没有旋转的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)

这些等式中的每一个都只是2阶多项式。这些很容易解决。

要找到交叉点,您可以求解上述等式(例如找到根)。

每个轴最多可以有两个根。在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。因此,Nils解决方案不起作用(他的错误:每个变量分别是每个变量中的二阶多项式,但它们一起不是)。

如果您手头有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]]]
    }]}]

一般解决方案涉及计算根源:

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