利用齐次坐标处理二次曲线

· · 算法·理论

虽然这些部分OI没有要求是超纲的,但是了解下并非坏事,默认读者具有同济线代水平。

形如ax^2+by^2+2cxy=1 的二次曲线的处理是显然的,左边是一个二次型,对系数矩阵

\begin{pmatrix} a & c \\ c & b \\ \end{pmatrix}

对角化即可确定二次曲线的类型。

这里我们考虑更一般的二次曲线ax^2+by^2+2cxy+dx+ey=1的情况,左边并不是一个二次型,要怎么办呢?

这就需要引入齐次坐标:

x & y &1 \end{pmatrix}

把二次曲线写的更好看一些,让d=\frac{d}{2},e=\frac{e}{2},二次曲线变成ax^2+by^2+2cxy+2d\times 1\cdot x+2e\times 1\cdot y+1^2=2,不难看出左边其实就是:

\begin{pmatrix} x & y &1 \end{pmatrix} \begin{pmatrix} a & c &d\\ c& b &e\\ d&e & 1 \end{pmatrix} \begin{pmatrix} x \\ y\\ 1 \end{pmatrix}

系数矩阵A=\begin{pmatrix} a & c &d\\ c& b &e\\ d&e & 1 \end{pmatrix}是对称矩阵,一定有A=QDQ^{T},其中Q为正交矩阵,D为对角阵。

做代换\begin{pmatrix} x' & y' &1 \end{pmatrix}=\begin{pmatrix} x & y &1 \end{pmatrix}Q,注意这是一个正交变换,意味着椭圆保持为椭圆,双曲线保持为双曲线,抛物线保持为抛物线,圆保持为圆

左边有:

x & y &1 \end{pmatrix}QDQ^T\begin{pmatrix} x \\ y\\ 1 \end{pmatrix}=\begin{pmatrix} x' & y' &1 \end{pmatrix}D\begin{pmatrix} x' \\ y'\\ 1 \end{pmatrix}=\lambda_1x'^2+\lambda_2y'^2+\lambda_3

带回去就得到了:

\dfrac{\lambda_1}{2-\lambda_3}x'^2+\dfrac{\lambda_2}{2-\lambda_3}y'^2=1(\lambda_1,\lambda_2\ ,\lambda_3-2 \neq0)

若不满足条件\lambda_1,\lambda_2\ ,\lambda_3-2 \neq0,则称该二次曲线是退化

\lambda_1,\lambda_2\ ,\lambda_3-2全部为0:

这种情况是不存在的,因为此时方程会覆盖整个平面,违背了二次方程最多两个实数解的要求

\lambda_1,\lambda_2有一个为0

这时该方程表示一条垂直于x轴或y轴的直线,由于x',y'均是x,y的一次函数,原方程ax^2+by^2+2cxy+2dx+2ey=1表示了一条直线(不一定垂直于坐标轴),比如-x^2-y^2-2xy+2x+2y=1

\lambda_1,\lambda_2均不为0 ,\lambda_3-2=0

该方程表示原点(\lambda_1,\lambda_2同号),或两条直线(\lambda_1,\lambda_2异号),原方程ax^2+by^2+2cxy+2dx+2ey=1对应表示了一个点或者两条直线,比如-x^2-y^2+2y=1表示一个点,-x^2+2x+y^2=1表示两条直线