5

我正在研究一个几何问题,该问题需要在任何旋转中找到两个抛物线弧的交点。我能够通过旋转平面以将弧与轴对齐来对直线和抛物线进行交叉,但两条抛物线不能同时与轴对齐。我正在推导公式,但我想知道是否有可用的资源。

4

3 回答 3

6

我首先定义没有旋转的 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。

于 2008-09-24T20:51:03.400 回答
1

不幸的是,一般答案需要求解四阶多项式。如果我们变换坐标,使两条抛物线之一为标准形式 y=x^2,那么第二条抛物线满足 (ax+by)^2+cx+dy+e==0。要找到交叉点,请同时解决这两个问题。代入 y=x^2 我们看到结果是一个四阶多项式:(ax+bx^2)^2+cx+dx^2+e==0。因此,Nils 解决方案将不起作用(他的错误:每个变量分别是每个变量的二阶多项式,但它们一起不是)。

于 2010-12-02T02:40:53.910 回答
1

如果您手头有 CAS,这很容易。

请参阅 Mathematica 中的解决方案。

选择一条抛物线并更改坐标,使其方程变为 y(x)=ax^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 中都很容易完成。

于 2011-03-26T06:51:42.613 回答