基于投影几何和numpy的python几何包。
geometer的Python项目详细描述
几何仪
geometer是python 3的一个几何库,它使用射影几何和numpy进行快速几何计算。 在射影几何中,二维的每一点都由三维矢量表示,三维的每一点都由三维矢量表示。 由四维向量表示。这有以下优点:
- 在无穷远处有一些点可以像正常点一样处理。
- 投影变换由矩阵描述,但它们也可以 表示仿射变换,也就是翻译。
- 如果两条线位于同一条线上,则每两条线都有一个唯一的交点 飞机。平行线在无穷远处有一个交点。
- 通过给定点的交点、平面或直线可以是 用简单的交叉积或张量图计算。
- 可以使用无穷远和交叉比处的特殊复数点来计算 角度和构造垂直的几何结构。
库中的大多数计算都是通过张量图(使用numpy.einsum)完成的。
包的源代码可以在GitHub上找到 以及关于Read the Docs的文档。
安装
您可以直接从pypi安装包:
pip install geometer
用法
fromgeometerimport*importnumpyasnp# Meet and Join operationsp=Point(2,4)q=Point(3,5)l=Line(p,q)m=Line(0,1,0)l.meet(m)# Point(-2, 0)# Parallel and perpendicular linesm=l.parallel(through=Point(1,1))n=l.perpendicular(through=Point(1,1))is_perpendicular(m,n)# True# Angles and distances (euclidean)a=angle(l,Point(1,0))p+2*dist(p,q)*Point(np.cos(a),np.sin(a))# Point(4, 6)# Transformationst1=translation(0,-1)t2=rotation(-np.pi)t1*t2*p# Point(-2, -5)# Quadratic formsa=Point(-1,0)b=Point(0,3)c=Point(1,2)d=Point(2,1)e=Point(0,-1)conic=Conic.from_points(a,b,c,d,e)# 3-dimensional objectsp1=Point(1,1,0)p2=Point(2,1,0)p3=Point(3,4,0)l=p1.join(p2)A=join(l,p3)A.project(Point(3,4,5))# Point(3, 4, 0)l=Line(Point(1,2,3),Point(3,4,5))A.meet(l)# Point(-2, -1, 0)# Cross ratiost=rotation(np.pi/16)crossratio(q,t*q,t**2*q,t**3*q,p)# 2.093706208978352# Higher dimensionsp1=Point(1,1,4,0)p2=Point(2,1,5,0)p3=Point(3,4,6,0)p4=Point(0,2,7,0)E=Plane(p1,p2,p3,p4)l=Line(Point(0,0,0,0),Point(1,2,3,4))E.meet(l)# Point(0, 0, 0, 0)
参考文献
包中实现的许多算法和公式来自 以下书籍和论文:
- Jürgen Richter Gebert,《射影几何透视》
- Jürgen Richter Gebert和Thorsten Orendt,Geometrikekalküle
- 奥利维尔·福格拉斯,三维计算机视觉
- Jim Blinn,《空间中的线条:4D交叉产品》
- Jim Blinn,《空间中的线:线公式》
- Jim Blinn,《空间中的直线:两个矩阵》
- Jim Blinn,《空间中的线条:回到图表
- 吉姆·布林,《空间中的线:两条线的故事》
- Jim Blinn,《空间中的线:我们的朋友双曲抛物面》
- Jim Blinn,《空间中的线:Tinkertoys的代数》
- Jim Blinn,《空间中的线:从线到四线》