1. 隐式方程转参数方程
二次曲线的一般方程为:
A
x
2
+
2
B
x
y
+
C
y
2
+
2
D
x
+
2
E
y
+
F
=
0.
(1)
A{x^2}+2Bxy+C{y^2}+2Dx+2Ey+F=0. \tag{1}
Ax2+2Bxy+Cy2+2Dx+2Ey+F=0.(1)
若
B
2
−
A
C
<
0
B^2-AC<0
B2−AC<0, 为椭圆;
B
2
−
A
C
=
0
B^2-AC=0
B2−AC=0, 为抛物线;
B
2
−
A
C
>
0
B^2-AC>0
B2−AC>0,为双曲线。
二次曲线可通过旋转和平移来变成标准方程,从而得到其几何参数。旋转的作用是消去交叉项,平移的作用是使中心为原点,下面以椭圆为例。
方程的二次项为:
[
x
,
y
]
[
A
B
B
C
]
[
x
y
]
.
(2)
[x, y] \left[ \begin{matrix} A &B\\ B &C \end{matrix} \right] \left[ \begin{matrix} x\\ y \end{matrix} \right]. \tag{2}
[x,y][ABBC][xy].(2)
一次项为
2
[
x
,
y
]
[
D
E
]
.
2[x, y] \left[ \begin{matrix} D\\ E \end{matrix} \right].
2[x,y][DE].我们对二次项进行旋转,消去交叉项,旋转角
θ
\theta
θ就是椭圆的偏角。假设新的坐标为
(
x
′
,
y
′
)
(x^{'}, y^{'})
(x′,y′), 那么
[
x
′
y
′
]
=
[
cos
θ
sin
θ
−
sin
θ
cos
θ
]
[
x
y
]
.
\left[ \begin{matrix} x^{'}\\ y^{'}\\ \end{matrix} \right]= \left[ \begin{matrix} \cos\theta & \sin\theta\\ -\sin\theta &\cos\theta\\ \end{matrix} \right] \left[ \begin{matrix} x\\ y\\ \end{matrix} \right].
[x′y′]=[cosθ−sinθsinθcosθ][xy].
将
[
x
y
]
=
[
cos
θ
−
sin
θ
sin
θ
cos
θ
]
[
x
′
y
′
]
\left[ \begin{matrix} x \\ y \\ \end{matrix} \right]= \left[ \begin{matrix} \cos\theta &-\sin\theta\\ \sin\theta & \cos\theta\\ \end{matrix} \right]\left[ \begin{matrix} x^{'}\\ y^{'}\\ \end{matrix} \right]
[xy]=[cosθsinθ−sinθcosθ][x′y′]
带入式(2),然后令矩阵(1,2) 位置的元素为0,可得,
(
C
−
A
)
sin
2
θ
+
2
B
cos
2
θ
=
0
,
(C-A)\sin2\theta+2B\cos2\theta=0,
(C−A)sin2θ+2Bcos2θ=0,
那么,
tan
2
θ
=
2
B
A
−
C
.
\tan2\theta=\frac{2B}{A-C}.
tan2θ=A−C2B. 那么原来的二次项矩阵变为:
[
cos
θ
sin
θ
−
sin
θ
cos
θ
]
[
A
B
B
C
]
[
cos
θ
−
sin
θ
sin
θ
cos
θ
]
=
[
A
′
0
0
C
′
]
.
\left[ \begin{matrix} \cos\theta &\sin\theta\\ -\sin\theta &\cos\theta\\ \end{matrix} \right] \left[ \begin{matrix} A & B\\ B& C\\ \end{matrix} \right] \left[ \begin{matrix} \cos\theta &-\sin\theta\\ \sin\theta & \cos\theta \end{matrix} \right]= \left[ \begin{matrix} A^{'} & 0\\ 0& C^{'}\\ \end{matrix} \right].
[cosθ−sinθsinθcosθ][ABBC][cosθsinθ−sinθcosθ]=[A′00C′].两边同时乘以旋转矩阵的逆,并比较两边矩阵的(1,1)和(2,2)位置元素可得:
A
′
=
A
+
B
tan
θ
,
C
′
=
C
−
B
tan
θ
.
A^{'}=A+B\tan\theta, C^{'}=C-B\tan\theta.
A′=A+Btanθ,C′=C−Btanθ.对于一次项,做同样的旋转操作可得,
[
D
′
E
′
]
=
[
cos
θ
sin
θ
−
sin
θ
cos
θ
]
[
D
E
]
=
[
D
cos
θ
+
E
sin
θ
−
D
sin
θ
+
E
cos
θ
]
.
\left[ \begin{matrix} D^{'}\\ E^{'} \end{matrix} \right]= \left[ \begin{matrix} \cos\theta & \sin\theta\\ -\sin\theta & \cos\theta\\ \end{matrix} \right] \left[ \begin{matrix} D\\ E\\ \end{matrix} \right]= \left[ \begin{matrix} D\cos\theta+E\sin\theta\\ -D\sin\theta+E\cos\theta\\ \end{matrix} \right].
[D′E′]=[cosθ−sinθsinθcosθ][DE]=[Dcosθ+Esinθ−Dsinθ+Ecosθ].那么化简后的椭圆方程为
A
′
x
′
2
+
C
′
y
′
2
+
2
D
′
x
′
+
2
E
′
y
′
+
F
=
0.
A^{'}x^{'}{^2}+C^{'}y^{'}{^2}+2D^{'}x^{'}+2E^{'}y^{'}+F=0.
A′x′2+C′y′2+2D′x′+2E′y′+F=0.
我们对它进一步配方化为标准椭圆方程:
(
x
′
+
D
′
/
A
′
)
2
D
′
2
A
′
2
+
E
′
2
C
′
A
′
−
F
A
′
+
(
y
′
+
E
′
/
C
′
)
2
D
′
2
A
′
C
′
+
E
′
2
C
′
2
−
F
C
′
=
1
,
\frac{(x^{'}+D^{'}/A^{'})^2}{\frac{D^{'}{^2}}{A^{'}{^2}}+\frac{E^{'}{^2}}{C^{'}A^{'}}-\frac{F}{A^{'}}}+\frac{(y^{'}+E^{'}/C^{'})^2}{\frac{D^{'}{^2}}{A^{'}C^{'}}+\frac{E^{'}{^2}}{C^{'}{^2}}-\frac{F}{C^{'}}}=1,
A′2D′2+C′A′E′2−A′F(x′+D′/A′)2+A′C′D′2+C′2E′2−C′F(y′+E′/C′)2=1,化简后我们得到椭圆5个参数
(
x
c
,
y
c
,
a
,
b
,
θ
)
(x_c, y_c, a,b,\theta)
(xc,yc,a,b,θ)为
{
x
c
=
B
E
−
C
D
A
C
−
B
2
y
c
=
B
D
−
A
E
A
C
−
B
2
a
=
x
c
2
+
(
y
c
2
(
C
−
B
tan
θ
)
−
F
)
A
+
B
tan
θ
b
=
y
c
2
+
(
x
c
2
(
A
+
B
tan
θ
)
−
F
)
C
−
B
tan
θ
tan
2
θ
=
2
B
A
−
C
(
θ
=
1
2
arctan
2
B
A
−
C
)
.
\left\{\color{blue}{ \begin{array}{rcl} &x_c=\frac{BE-CD}{AC-B^2} \\ &y_c=\frac{BD-AE}{AC-B^2}\\ &a=\sqrt{\frac{x_c^2+(y_c^2(C-B\tan\theta)-F)}{A+B\tan\theta}}\\ &b=\sqrt{\frac{y_c^2+(x_c^2(A+B\tan\theta)-F)}{C-B\tan\theta}}\\ &\tan2\theta=\frac{2B}{A-C}(\theta=\frac{1}{2}\arctan{\frac{2B}{A-C}}) \end{array}}. \right.
⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧xc=AC−B2BE−CDyc=AC−B2BD−AEa=A+Btanθxc2+(yc2(C−Btanθ)−F)b=C−Btanθyc2+(xc2(A+Btanθ)−F)tan2θ=A−C2B(θ=21arctanA−C2B).
将相应的值带入就好。
注
意
二
次
型
(
式
1
)
系
数
是
否
有
2
\color{red}{注意二次型 (式1) 系数是否有2}
注意二次型(式1)系数是否有2.
2. 参数方程化为隐式方程
假设椭圆5参数
(
x
c
,
y
c
,
a
,
b
,
θ
)
(x_c, y_c, a,b,\theta)
(xc,yc,a,b,θ), 其中
a
≥
b
a\geq b
a≥b。它对应的标准方程为
x
2
a
2
+
y
2
b
2
=
1.
\frac{x^2}{a^2}+\frac{y^2}{b^2}=1.
a2x2+b2y2=1. 通过坐标变换(旋转+平移)把标准坐标变到一般坐标:
[
x
′
y
′
]
=
[
cos
θ
sin
θ
−
sin
θ
cos
θ
]
[
x
y
]
+
[
x
c
y
c
]
.
\left[ \begin{matrix} x^{'}\\ y^{'}\\ \end{matrix} \right]= \left[ \begin{matrix} \cos\theta & \sin\theta\\ -\sin\theta &\cos\theta\\ \end{matrix} \right] \left[ \begin{matrix} x\\ y\\ \end{matrix} \right]+\left[ \begin{matrix} x_c\\ y_c\\ \end{matrix} \right].
[x′y′]=[cosθ−sinθsinθcosθ][xy]+[xcyc].反解出
(
x
,
y
)
(x, y)
(x,y) 带入标准方程,通过简单的化简可得:
{
A
=
cos
2
θ
a
2
+
sin
2
θ
b
2
B
=
sin
θ
cos
θ
(
1
a
2
−
1
b
2
)
C
=
sin
2
θ
a
2
+
cos
2
θ
b
2
D
=
−
x
c
cos
2
θ
−
y
c
sin
θ
cos
θ
a
2
+
−
x
c
sin
2
θ
+
y
c
sin
θ
cos
θ
b
2
E
=
−
y
c
sin
2
θ
−
x
c
sin
θ
cos
θ
a
2
+
−
y
c
cos
2
θ
+
x
c
sin
θ
cos
θ
b
2
F
=
(
x
c
cos
θ
+
y
c
sin
θ
)
2
a
2
+
(
x
c
sin
θ
−
y
c
cos
θ
)
2
b
2
−
1
.
\left\{\color{blue}{ \begin{aligned} &A=\frac{\cos^2\theta}{a^2}+\frac{\sin^2\theta}{b^2} \\ &B=\sin\theta\cos\theta(\frac{1}{a^2}-\frac{1}{b^2})\\ &C=\frac{\sin^2\theta}{a^2}+\frac{\cos^2\theta}{b^2} \\ &D=\frac{-x_c\cos^2\theta-y_c\sin\theta\cos\theta}{a^2}+\frac{-x_c\sin^2\theta+y_c\sin\theta\cos\theta}{b^2}\\ &E=\frac{-y_c\sin^2\theta-x_c\sin\theta\cos\theta}{a^2}+\frac{-y_c\cos^2\theta+x_c\sin\theta\cos\theta}{b^2} \\ &F=\frac{(x_c\cos\theta+y_c\sin\theta)^2}{a^2}+\frac{(x_c\sin\theta-y_c\cos\theta)^2}{b^2}-1&\\ \end{aligned}}. \right.
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧A=a2cos2θ+b2sin2θB=sinθcosθ(a21−b21)C=a2sin2θ+b2cos2θD=a2−xccos2θ−ycsinθcosθ+b2−xcsin2θ+ycsinθcosθE=a2−ycsin2θ−xcsinθcosθ+b2−yccos2θ+xcsinθcosθF=a2(xccosθ+ycsinθ)2+b2(xcsinθ−yccosθ)2−1.
注
意
二
次
型
(
式
1
)
系
数
是
否
有
2
\color{red}{注意二次型 (式1) 系数是否有2}
注意二次型(式1)系数是否有2.
3.MATLAB代码验证
%%=====================
%椭圆参数方程和隐式方程互化
%input: geometric parameter [xc,yc,a,b,theta], suppose a>=b;
% or algebraic parameter [A,B,C,D,E,F];
%
%output: the transformed result
%%=======================
function [result]=geo2alg(parameter)
close all;
if (nargin==0)
%parameter=[2,-1,5,4,1]; % geometric parameter
parameter=[0.0559 -0.0102 0.0466 -0.1221 0.0670 -0.6888];% algeraic
end
%-----------Geometric to Algebraic-----------%
if(size(parameter,2)==5)
%geometric
xc=parameter(1);
yc=parameter(2);
a=parameter(3);
b=parameter(4);
theta=parameter(5);
% convert to algebraic coefficients
A=cos(theta)^2/a^2+sin(theta)^2/b^2;
B=sin(theta)*cos(theta)*(1/(a^2)-1/(b^2));
C=sin(theta)^2/a^2+cos(theta)^2/b^2;
D=(-xc*cos(theta)^2-yc*sin(theta)*cos(theta))/a^2+(-xc*sin(theta)^2+yc*sin(theta)*cos(theta))/b^2;
E=(-yc*sin(theta)^2-xc*sin(theta)*cos(theta))/a^2+(-yc*cos(theta)^2+xc*sin(theta)*cos(theta))/b^2;
F=(xc*cos(theta)+yc*sin(theta))^2/a^2+(xc*sin(theta)-yc*cos(theta))^2/b^2-1;
result=[A,B,C,D,E,F];
end
%-----------Algebraic to Geometric-----------%
if(size(parameter,2)==6)
%algebraic
A=parameter(1);
B=parameter(2);
C=parameter(3);
D=parameter(4);
E=parameter(5);
F=parameter(6);
% convert to geometric
theta=1/2*atan2(2*B,(A-C));
xc=(B*E-C*D)/(A*C-B^2);
yc=(B*D-A*E)/(A*C-B^2);
a=sqrt(xc^2+(yc^2*(C-B*tan(theta))-F)/(A+B*tan(theta)));
b=sqrt(yc^2+(xc^2*(A+B*tan(theta))-F)/(C-B*tan(theta)));
result=[xc,yc,a,b,theta];
end
%-------------Plot Two Modes-------------%
%geometric
t= linspace(0,2*pi,60);
x=a*cos(t);
y=b*sin(t);
Ex = x*cos(theta)-y*sin(theta) + xc;
Ey = x*sin(theta)+y*cos(theta) + yc;
figure
plot(Ex,Ey,'g-','linewidth',2);
hold on;
%algebraic
syms x y;
z1=ezplot(A*x^2+2*B*x*y+C*y^2+2*D*x+2*E*y+F,[-8,8]);
set(z1,'Color','r');
legend('Geo','Alg');
if (size(parameter,2)==5)
title('Geo2Alg');
else
title('Alg2Geo');
end
end
结果:
1.Geo2Alg
input: parameter=[2,-1,5,4,1];
output: result=[0.0559 -0.0102 0.0466 -0.1221 0.0670 -0.6888];
几何参数转代数系数,绿色是几何作图,红色为转换的代数作图,两图重合.
2.Alg2Geo
input: parameter=[0.0559 -0.0102 0.0466 -0.1221 0.0670 -0.6888];
output: result=[2.0019 -0.9996 3.9593 4.9450 -0.5715];
代数系数转几何参数,绿色为转换的几何作图,红色为代数系数作图,两图重合。