基于投影几何和numpy的python几何包。

geometer的Python项目详细描述


几何仪

imageimageimageBuild Statuscodecov

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,《空间中的线:从线到四线》

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java三角测距   java Spring异步任务返回未来   java如何显示数据库中的下一条记录   java这些读取用户输入的方法有什么不同?   java Spring+Spring安全请求只接受contenttype xwwwformurlencoded   checkName()和将用户输入存储到ArrayList和boolean[]的java问题   java如何使用JPA和Facade?   java Neo4j类型不匹配   java如何依赖Maven的系统包?   通过FileChooser保存pdf格式会提示在java中出现第二个对话框   java如何将通量链接到另一个通量/单声道并应用另一个背压?   java如何修复安卓 studio中的权限错误?   尝试清除JavaFX ObservableMap时出现java ConcurrentException   java编辑文本。GetText,返回关于null引用的异常,但已声明该异常   mysql组织。乔达。时间LocalDate在Redhat(Linux)java上显示少一天   在java中通过序列化获取多个对象   有人有java注释“java.lang.Synthetic”的背景吗?