当前位置:   article > 正文

【射影几何06】齐次坐标下“点-线”几何表示_射影几何中的坐标怎么求

射影几何中的坐标怎么求

目录

一、先从平面上射影开始

二、关于齐次坐标

三、其次坐标下的直线方程

四、直线过原点

五、一般直线方程


一、先从平面上射影开始

        我们知道,平面上任意一个点,都可用二维直角坐标系来指示。这是解析几何的基本要点。然而,平面上的点,在射影几何中,将存在投影问题,需要用全新的概念去构造这种模式。现在将平面坐标扩展一个维度,将出现如图情形:

 上图解释:

  • 1)左边是一个平面坐标系,上有O原点,Q坐标轴上点,P平面上点,因为三点决定一个平面,因此,以上三点足以代表平面XOY。
  • 2)将左边平面任意点P(x,y)扩张一个维度,变成P(x,y,Z)来表示。规定P(x,y,1)和P(x,y)是重合,也就是射影坐标的点与直角坐标的变换入口点就是P(x,y,1) \Leftrightarrow P(x,y),也就是说,对于任意射影坐标系的点P(x,y,z),它真正在平面XOY上的位置是P(\frac{ x}{z},\frac{y}{z},\frac{z}{z}),不断增加Z的值,在Z的位置上,有一个缩小版的XOY平面,几何上与XOY成比例。继续增加Z必然在无穷远Z=\infty显然,整个平面XOY收缩成一个点P(x,y, \infty )
  • 3)当P(x,y,Z)坐标中,Z逐步缩小,当Z接近0时,平面XOY被无限放大。
  • 4)在射影坐标下,任意点坐标P(x,y,z)和P1(ax,ay,az)是同一个点,更一般的,P(x,y,z)和P1(ax,ay,az)和P2(x,y,1)是同一个点。

二、关于齐次坐标

        真正的射影平面可以被认为是添加了额外点的欧几里得平面,这些点被称为无穷远点,并且被认为位于一条新线上,即无穷远线。每个方向都有一个无穷远点(数值由直线的斜率给出),非正式地定义为沿该方向远离原点的点的极限。欧几里得平面中的平行线相交于无限远的一点,对应于它们的共同方向。给定欧几里得平面上的一个点 (x, y),对于任何非零实数 Z,三元组 (xZ, yZ, Z) 称为该点的齐次坐标集。根据这个定义,将三个齐次坐标乘以一个共同的非零因子可以为同一点提供一组新的齐次坐标。特别是,(x, y, 1) 是点 (x, y) 的齐次坐标系。例如,笛卡尔点 (1, 2) 可以在齐次坐标中表示为 (1, 2, 1) 或 (2, 4, 2)。通过将前两个位置除以第三个位置来恢复原始笛卡尔坐标。因此,与笛卡尔坐标不同,一个点可以由无限多个齐次坐标表示。 

        一些作者对齐次坐标使用不同的符号,这有助于将它们与笛卡尔坐标区分开来。使用冒号代替逗号,例如 (x:y:z) 代替 (x, y, z),强调坐标应被视为比率。 [5]方括号,如 [x, y, z] 强调多组坐标与单个点相关联。 [6]一些作者使用冒号和方括号的组合,如 [x:y:z]。

三、其次坐标下的直线方程

        平面上点有M( x1 , x2 , x3 ),其中的 x3 ≠0;等价的二维坐标是:( x1/x3 , x2/x3) \large x = x1/x3 , y = x2/x3  该点的直角坐标。

过M点的任意直线方程是:\large ax+by+c=0;等价的写法是:

\large a\frac{x_1}{x_3} +b\frac{x_2}{x_3}+c=0,

\large a {x_1} +b {x_2}+cx_3=0

四、直线过原点

        通过原点 (0, 0) 的直线方程可以写成 nx + my = 0,其中 n 和 m 不都是 0。在参数形式中,这可以写成 x = mt, y = -nt。令 Z = 1/t,因此线上一点的坐标可以写成 (m/Z, -n/Z)。在齐次坐标中,这变为 (m, -n, Z)。在极限中,随着 t 接近无穷大,即随着点远离原点,Z 接近 0,该点的齐次坐标变为 (m, -n, 0)。因此,我们将 (m, -n, 0) 定义为无穷远点的齐次坐标,对应于线 nx + my = 0 的方向。由于欧几里得平面的任何线都平行于通过原点的线,由于平行线在无穷远处有同一个点,所以欧几里得平面每条线上的无穷大点都被赋予齐次坐标。

五、一般直线方程

对于过M(x1:y1:z1)和点N(x2:y2:z2)的直线为L;求该直线方程。

\large \xi _1 {x_1} +\xi_2 {y_1}+\xi_3 { z_1}=0

\large \xi_1 {x_2} +\xi_2 {y_2}+\xi_3{ z_2}=0

两边同除\large \xi_3;因此:

\large \xi _1/ \xi_3 {x_1} +\xi_2 /\xi_3{y_1}+ { z_1}=0

\large \large \xi_1/\xi_3 {x_2} +\xi_2/\xi_3 {y_2}+{ z_2}=0

求解方程:

\large Det = \begin{vmatrix} x_1 & y_1\\ x_2& y_2 \end{vmatrix};      \large Det(\xi _1/\xi_3) = \begin{vmatrix} x_1 & z_1\\ x_2& z_2 \end{vmatrix};   \large Det(\xi _2/\xi_3) = \begin{vmatrix}z_1 & y_1\\ z_2& y_2 \end{vmatrix}

\large \xi _1/\xi_3 = \frac{Det(\xi_1/\xi_3)}{Det}

\large \xi _2/\xi_3 = \frac{Det(\xi_2/\xi_3)}{Det}

因此,原方程形式为内积关系:

\large <(x1,y1,z1)\cdot (\xi _1/\xi_3,\xi _2/\xi_3,1)> =0

也就是

\large <(x1,y1,z1)\cdot (\xi _1 ,\xi _2 ,\xi_3)> =0

也可以这样讲:M(x1:y1:z1)和点N(x2:y2:z2)构成直线\large (\xi _1 ,\xi _2 ,\xi_3)

且:

\large (\xi _1 ,\xi _2 ,\xi_3) = (Det,Det(\xi_1/\xi_3) , Det(\xi_2/\xi_3))

参考代码: 

  1. import math
  2. import numpy as np
  3. M = np.array([x1,y1,z1])
  4. N = np.array([x2,y2,z2])
  5. def getLine(M ,N):
  6. line = np.array([0,0,0])
  7. line[0] = x1*y2 - x2*y1
  8. line[1] = z1*z2 - x2*y1
  9. line[2] = x1*z2 - z1*x2
  10. return line

 (未完待续)

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号