射影几何笔记7:直线方程

射影几何笔记7:直线方程,第1张

射影几何笔记6:齐次坐标下“点-线”几何关系


一、两条直线的关系

假定存在两条直线:L1:和 L2: ;他们的关系,两条线的方程是:

1)两线相交于有界区域

交点坐标是

            

这是一个普通的其次坐标。


2)当两线平行

此时,和无普通点相交;能满足方程,然而是无穷远点,并非普通点。


注意:事实上,任意直线 上的无穷远点,总是点,这可以立刻给出!

3)直线倾斜角

对直线 来说,其倾斜角是:


二、总结

  •  (1) 拓广平面上点可以用齐次坐标( x1 , x2 , x3 )表示,成比例 的齐次坐标表示同一点, x1 , x2 , x3 不全为 0.当 x3 ≠0 时, ( x1 , x2 , x3 )表示普通点;当 x3 = 0 时表示无穷远点.
  •  (2) 拓广平面上直线也可用齐次坐标(ξ1 ,ξ2 ,ξ3 )表示,ξ1 ,ξ2 不全为零时是拓广直线;ξ1 = ξ2 = 0,而 ξ3 ≠0,表示无穷远直线.
  •  (3) 过两个不同点 A( a1 , a2 , a3 ), B ( b1 , b2 , b3 )的直线 ξ的 齐次坐标是

  • (4) 两直线 ξ(ξ1 ,ξ2 ,ξ3 ),η(η1 ,η2 ,η3 )的交点 A 的齐次坐 标是

        上面(3)与(4)的证明很容易.例如,点 A 与 B 都满足ξ的方 程 a2 a3 b2 b3 x1 + a3 a1 b3 b1 x2 + a1 a2 b1 b2 x3 = 0, 因此它是过 A, B 的直线方程. 可以证明.如果 a1 a2 b1 b2 = 0,


三、齐次函数性质

        齐次坐标不是由一个点唯一确定的,因此在坐标上定义的函数,例如 f(x, y, z),不会像笛卡尔坐标那样确定在点上定义的函数。


但是,如果函数是齐次的,则在坐标上定义的条件 f(x, y, z) = 0(可用于描述曲线)确定了点上的条件。


具体来说,假设有一个 k 使得

        

         如果一组坐标表示与 (x, y, z) 相同的点,那么对于某个非零值 λ,它可以写成 (λx, λy, λz)。


        齐次坐标在计算机图形学中无处不在,因为它们允许将常见的向量 *** 作(例如平移、旋转、缩放和透视投影)表示为与向量相乘的矩阵。


通过链式法则,任何此类 *** 作序列都可以乘以单个矩阵,从而实现简单高效的处理。


相比之下,使用笛卡尔坐标,平移和透视投影不能表示为矩阵乘法,尽管其他 *** 作可以。


现代 OpenGL 和 Direct3D 图形卡利用齐次坐标来使用具有 4 元素寄存器的矢量处理器有效地实现顶点着色器。


[19][20]

        例如,在透视投影中,空间中的位置与从它到称为投影中心的固定点的线相关联。


然后通过找到该平面与直线的交点将该点映射到该平面。


这可以准确表示 3D 对象在眼睛中的显示方式。


在最简单的情况下,投影中心是原点,点映射到平面 z = 1,暂时在笛卡尔坐标中工作。


对于空间中的给定点 (x, y, z),线和平面相交的点是 (x/z, y/z, 1)。


删除现在多余的 z 坐标,变成 (x/z, y/z)。


在齐次坐标中,点(x,y,z)用(xw,yw,zw,w)表示,它映射到平面上的点用(xw,yw,zw)表示,所以投影可以表示以矩阵形式为。



四、有关python代码

#yeah suppose I've done that.

import bpy
from  mathutils import Matrix
from math import radians
ob =  bpy.context.object

m = Matrix( ([1, 0, 0, 0],
             [0, 1, 0, 0],
             [0, 0, 1, 1],
             [0, 0, 0, 0] )  )

m.transpose()

R = Matrix.Rotation(radians(30), 4, 'X')
#m = R @ m
for vert in ob.data.vertices:
    v = m @ vert.co.to_4d() # sets vert.co.w to 1

    '''
    # vert.co.w is set to vert.co.z
    v =  vert.co.to_4d()
    v.w = v.z
    v = m @ v
    '''
    vert.co = 1 / v.w * v.to_3d()

参考文章:

https://en.wikipedia.org/wiki/Transformation_matrix#Perspective_projection

transforms - Can you work with homogeneous coordinates in the Python API? - Blender Stack Exchange

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/571768.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存