Math 任意旋转中两条抛物线相交的代码或公式

Math 任意旋转中两条抛物线相交的代码或公式,math,graphics,geometry,planerotation,Math,Graphics,Geometry,Planerotation,我正在研究一个几何问题,需要找到任意旋转中两条抛物线弧的交点。我可以通过旋转平面将一条直线和一条抛物线弧与一个轴对齐来连接,但是两条抛物线不能同时与一个轴对齐。我正致力于推导公式,但我想知道是否有资源可用于此。我首先定义二维抛物线弧的方程式,不带旋转: x(t) = ax² + bx + c y(t) = t; 现在可以通过构建旋转矩阵来应用旋转: s = sin(angle) c = cos(angle) matrix = | c -s | | s

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

我首先定义二维抛物线弧的方程式,不带旋转:

  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。因此,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中都是很容易做到的。< /P>你如何解决C++中的方程组(因此,不需要内置的MATLAB函数)@羊先生,对不起,我不会让你通过这个解决方案。我也从来没有使用过Matlab,所以我可以在这里提供帮助。我会找到答案的,不过我真的很感激你在这里的解决方案-谢谢。