【射影几何15】python双曲几何工具geometry_tools

目录

  • 一、说明
  • 二、​环境问题:如何安装
  • 三、实现一个简单的例子
  • 四、绘制双曲组
  • 五、使用有限状态自动机加快速度
  • 六、资源和代码

一、说明

   Geometry_tools 是一个 Python 包,旨在帮助您处理和可视化双曲空间和射影空间上的群动作。

   该包主要构建在 numpy、matplotlib 和 scipy 之上。或者,该包可以使用 Sage 提供的工具来执行(缓慢的)精确计算。

   几何工具可以帮助您:

  • 在多个模型(即克莱因模型、双曲面模型、射影模型、庞加莱模型和半空间模型)中对双曲空间中的对象执行数值(或有时是精确)计算

  • 在双曲平面、实射影平面、复射影线上画出漂亮的图画

  • 将有限生成组的表示处理为 O ( d , 1 ) \textrm{O}(d, 1) O(d,1)
    , GL ( d , R ) \textrm{GL}(d, \mathbb{R}) GL(d,R), 和 GL ( d , C ) \textrm{GL}(d, \mathbb{C}) GL(d,C)

  • 使用 Coxeter 群的表示进行实际计算 GL ( d , R ) \textrm{GL}(d, \mathbb{R}) GL(d,R)

  • 使用有限状态自动机在字双曲群中进行一些简单的计算在双曲平面、实射影平面、复射影线上画出漂亮的图画

   还提供了对 3D 图形的一些有限支持(通过 matplotlib)。

   这个包的所有功能(在数学上)都不是很深。大多数情况下,该软件包只是包装了更复杂的工具,旨在使您可以轻松地快速绘制好图画。在, H 2 \mathbb{H}^2 H2,和 H 3 \mathbb{H}^3 H3 R P 2 \mathbb{R}P^2 RP2 C P 1 \mathbb{C}P^1 CP1

二、​环境问题:如何安装

   现在,最简单的安装方法是从 git 存储库下载或克隆geometry_tools项目,然后运行

pip install .

   从您下载它的目录中。如果您没有安装 pip,则应先安装 pip。或者,您可以尝试从项目目录运行(不建议这样做)。

python setup.py install

三、实现一个简单的例子

   要在双曲平面上绘制直角五边形的图片:

from geometry_tools import hyperbolic, drawtools
from numpy import pi

# make a right-angled pentagon
pentagon = hyperbolic.Polygon.regular_polygon(5, angle=pi/2)

# draw the pentagon
figure = drawtools.HyperbolicDrawing()
figure.draw_plane()
figure.draw_polygon(pentagon, facecolor="lightblue")

figure.show()

   代码结果:
在这里插入图片描述

四、绘制双曲组

   该软件包方便绘制平铺图片geometry_tools在 H 2 \mathbb{H}^2 H2空间.在这里,我们将可视化 (2,3,7) 三角形平铺:

from geometry_tools import hyperbolic, coxeter, drawtools
from geometry_tools.automata import fsa

# make the triangle group representation and load a finite-state automaton
triangle_group = coxeter.TriangleGroup((2,3,7))
triangle_rep = triangle_group.hyperbolic_rep()
triangle_fsa = triangle_group.automaton()


# find a fundamental domain for the action by finding 
# fixed points of length-2 elements
vertices = triangle_rep.isometries(["ab", "bc", "ca"]).fixed_point()
fund_triangle = hyperbolic.Polygon(vertices)

# find all orientation-preserving isometries of length at most 30
words = triangle_fsa.enumerate_words(30)
even_words = [word for word in words if len(word) % 2 == 0]
pos_isometries = triangle_rep.isometries(even_words)

# draw the translated triangles
fig = drawtools.HyperbolicDrawing(model="poincare")
fig.draw_plane()
fig.draw_polygon(pos_isometries @ fund_triangle, 
                 facecolor="royalblue", edgecolor="none")

fig.show()


   首先,首先实例化该类coxeter.TriangleGroup以获得一个 (2,3,7) 三角形组,并将其几何表示计算为双曲平面的等距:

# get a representation for a triangle group.
# (these are built in to the program)
from geometry_tools import hyperbolic, coxeter, drawtools

triangle_rep = coxeter.TriangleGroup((2,3,7)).hyperbolic_rep()


   我们可以使用子包绘制组的反射墙:geometry_tools.drawtools

# find the fixed points at infinity for the generating reflections

reflections = triangle_rep.isometries(["a", "b", "c"])
walls = hyperbolic.Geodesic.from_reflection(reflections)

wall_a, wall_b, wall_c = walls

fig = drawtools.HyperbolicDrawing(model="poincare")
fig.draw_plane()

fig.draw_geodesic(wall_a, color="green")
fig.draw_geodesic(wall_b, color="blue")
fig.draw_geodesic(wall_c, color="red")

在这里插入图片描述
   我们可以通过取三角形群的顶点是群的长度 2 元素的固定点的三角形来找到三角形群的基本域。

triangle_vertices = triangle_rep.isometries(["ab", "bc", "ac"]).fixed_point()
fund_triangle = hyperbolic.Polygon(triangle_vertices)
fig = drawtools.HyperbolicDrawing(model="poincare")
fig.draw_plane()
fig.draw_polygon(fund_triangle, facecolor="lightgreen")

在这里插入图片描述
   如果我们想开始可视化 ( H 2 ) (\mathbb{H}^2) (H2)我们从这个三角形组中得到,我们可以开始绘制这个基本域的翻译。要做到这一点,最简单(但效率较低且吸引人)的方法是,只绘制由组中自由简化的单词图像翻译的基本域的副本。

words = triangle_rep.free_words_less_than(5)
isometries = triangle_rep.isometries(words)

tiles = isometries @ fund_triangle

fig = drawtools.HyperbolicDrawing(model="poincare")
fig.draw_plane()

fig.draw_polygon(tiles, facecolor="lightgreen")

在这里插入图片描述

五、使用有限状态自动机加快速度

   绘制由所有自由缩小的单词的图像翻译的三角形的副本有点慢。而且,我们最终多次在其顶部绘制同一个三角形。我们可以使用有限状态自动机为组中的每个元素选择一个唯一的单词,从而加快该过程。

   Geometry_tools.automata 子包提供了一些用于处理有限状态自动机的工具。它可以加载和操作 kbmag 程序生成的自动机。虽然 kbmag 不包含在 Geometry_tools 中,但该包确实为许多单词双曲群提供了预先计算的自动机。要获取预先计算的自动机列表,请导入 automata.fsa 子模块并调用 fsa.list_builtins()。调用 fsa.load_builtin() 加载自动机。

   感谢 Florian Stecker 提供的代码,geometry_tools 包还可以为任何 Coxeter 组生成自动机。所以我们可以得到 (2,3,7) 三角形组的自动机,如下所示:

# construct the (2,3,7) automaton
triangle_fsa = coxeter.TriangleGroup((2,3,7)).automaton()

# get a unique word for each group element of length < 25.
# (we convert to a list since enumerate_words returns a generator)
words = list(triangle_fsa.enumerate_words(30))

free_words = list(triangle_rep.free_words_less_than(9))

# compare unique words of length <30 to freely reduced words of length <9.
# when we don't consider the relation, we get many redundant words!
len(words), len(free_words)

(5951, 585937)
   为了让图片更漂亮一点,我们可以制作一个只接受偶数长度的单词的自动机。然后我们可以得到所有等距的集合,这些等距是这个自动机接受的单词的图像。

even_triangle_fsa = triangle_fsa.even_automaton()
pos_isometries = triangle_rep.automaton_accepted(even_triangle_fsa, 15)

tiles = pos_isometries @ fund_triangle

fig = drawtools.HyperbolicDrawing()
fig.draw_plane()
fig.draw_polygon(tiles, facecolor="royalblue", edgecolor="none")

在这里插入图片描述
回顾一下,以下是生成上图所需的所有代码:

from geometry_tools import hyperbolic, coxeter, drawtools

# make the triangle group representation
triangle_group = coxeter.TriangleGroup((2,3,7))
triangle_rep = triangle_group.hyperbolic_rep()

# find a fundamental domain for the action by finding 
# fixed points of length-2 elements
vertices = triangle_rep.isometries(["ab", "bc", "ca"]).fixed_point()
fund_triangle = hyperbolic.Polygon(vertices)

# find all orientation-preserving isometries of length at most 30 using an automaton
triangle_fsa = triangle_group.automaton(even_length=True)
pos_isometries = triangle_rep.automaton_accepted(triangle_fsa, 15)

# draw the translated triangles
fig = drawtools.HyperbolicDrawing(model="poincare")
fig.draw_plane()
fig.draw_polygon(pos_isometries @ fund_triangle, 
                 facecolor="royalblue", edgecolor="none")

六、资源和代码

本文资源下载地址是:
https://download.csdn.net/download/gongdiwudu/88826390

(未完待续)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/383572.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言求解猴子分桃子

问题&#xff1a;海滩上有一堆桃子&#xff0c;五只猴子来分。第一只猴子把这堆桃子平均分为五份&#xff0c;多了一个&#xff0c;这只 猴子把多的一个扔入海中&#xff0c;拿走了一份。第二只猴子把剩下的桃子又平均分成五份&#xff0c;又多了 一个&#xff0c;它同样把多的…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Divider组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Divider组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Divider组件 提供分隔器组件&#xff0c;分隔不同内容块/内容元素。 子组件 …

2024年湖南省考报名时间及流程,选岗很重要!

注册时间&#xff1a;2024年2月18日9:00-25日17:00 报名时间&#xff1a;2024年2月19日9:00-25日17:00 网上确认时间&#xff1a;2024年2月28日9:00-3月2日24:00 缴费时间&#xff1a;2024年2月28日9:00-3月2日24:00 打印准考证时间&#xff1a;2024年3月11日9:00-15日17:00 考…

漂亮不是工业HMI的追求?我劝你,这个想法要变了

对于工业HMI&#xff08;Human Machine Interface&#xff09;来说&#xff0c;漂亮并不是唯一的追求&#xff0c;但它仍然是一个重要的方面。在工业环境中&#xff0c;HMI的设计需要考虑到使用者的工作效率和安全性&#xff0c;因此功能性和易用性是首要考虑的因素。然而&…

【EAI 015】CLIPort: What and Where Pathways for Robotic Manipulation

论文标题&#xff1a;CLIPort: What and Where Pathways for Robotic Manipulation 论文作者&#xff1a;Mohit Shridhar1, Lucas Manuelli, Dieter Fox1 作者单位&#xff1a;University of Washington, NVIDIA 论文原文&#xff1a;https://arxiv.org/abs/2109.12098 论文出处…

【计算机网络】网络基础入门

需要云服务器等云产品来学习Linux的同学可以移步/–>腾讯云<–/官网&#xff0c;轻量型云服务器低至112元/年&#xff0c;优惠多多。&#xff08;联系我有折扣哦&#xff09; 文章目录 1. 局域网和广域网2. 协议2.1 认识协议2.2 协议分层 3. OSI七层模型和TCP五层&#x…

Ainx-V0.2-简单的连接封装与业务绑定

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d7;本文收录于Ainx系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏Rust初阶教程、go语言基础系列…

vue中watch和computed的不同

第076个 查看专栏目录: VUE ------ element UI Vue.js 中的 watch 和 computed 都是用于监听数据变化并执行相应操作的选项&#xff0c;但它们的使用场景和优劣势有所不同。 两者区别 watch 用于监听一个或多个数据属性的变化&#xff0c;并在变化时执行相应的处理函数。 它…

Windows快捷键大全(包含语音输入、剪切板历史快捷键)

最近发现了微软官网上给出的快捷键大全&#xff0c;并且使用了其中几个新的键盘快捷键&#xff08;语音输入、剪切板历史&#xff09;&#xff0c;确实方便快捷&#xff0c;所以写个博客记录分享一下。 注&#xff1a;windows快捷键大全微软官方已经给出&#xff0c;此处不再赘…

中创ET4410 台式LCR数字电桥 简单开箱测评

最近买了一台LCR电桥&#xff0c;完善一下自己实验室的设备&#xff0c;选了中创ET4410&#xff0c;这款性价比高一点。 1199元在PDD买的&#xff0c;好像胜利的VC4090C也是找中创代工的。 ET4410介绍 本系列LCR数字电桥是采用自动平衡电桥原理设计的元件参数分析仪&#xf…

数据库恢复

文章目录 前言一、事务1.概念2.定义语句3.ACID特性 二、数据库恢复的必要性1.为什么要进行数据库恢复2.数据库恢复机制的作用 三、数据恢复使用的技术1.数据转储2.登记日志文件 四 、不同故障的数据恢复策略1.事务内部的故障2.系统故障3.介质故障 五、具有检查点的恢复技术1.检…

JVM学习记录

JVM基础概念 JVM是一个运行在计算机上的程序&#xff0c;负责编译java字节码文件&#xff0c;支持跨平台特性。 java语言为了通过实时解释实现多平台支持&#xff0c;性能相对于C等语言较低&#xff0c;而JVM提供了JIT即时编译进行性能优化。 JVM与JIT JVM负责解释和执行Ja…

13 年后,我如何用 Go 编写 HTTP 服务(译)

原文&#xff1a;Mat Ryer - 2024.02.09 大约六年前&#xff0c;我写了一篇博客文章&#xff0c;概述了我是如何用 Go 编写 HTTP 服务的&#xff0c;现在我再次告诉你&#xff0c;我是如何写 HTTP 服务的。 那篇原始的文章引发了一些热烈的讨论&#xff0c;这些讨论影响了我今…

go安装与设置

开发环境 安装 下载地址 https://golang.org/dl/(国外的可能不能访问) https://studygolang.com/dl(国内网址,推荐) 安装 下载完成后点击运行,一直next,就可以,安装成功后打开winR输入cmd打开命令行输入go env, 输出 证明安装成功 改变$GOPATH $GOPATH是go存储第三方包和编…

《UE5_C++多人TPS完整教程》学习笔记4 ——《P5 局域网连接(LAN Connection)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P5 局域网连接&#xff08;LAN Connection&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff08;也是译者&…

精品springboot善筹网(众筹)互助前后台购物商城实现设计

《[含文档PPT源码等]精品基于springboot善筹网(众筹)前后台实现设计[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; Java——涉及技术&#xff1a; 前端使用技术&#xf…

数学实验第三版(主编:李继成 赵小艳)课后练习答案(八)(4)

实验八&#xff1a;近似计算 练习四 1.自己设置一种计算欧拉常数近似值的方法&#xff0c;看你对欧拉常数的计算能精确到小数点后多少位&#xff1f; 从示例7的图8.5我们已经得知&#xff0c;只要求出每个小矩形中在函数y1/x以上的部分的面积之和&#xff0c;我们就可以得知…

Seurat - 聚类教程 (1)

设置 Seurat 对象 在本教程[1]中&#xff0c;我们将分析 10X Genomics 免费提供的外周血单核细胞 (PBMC) 数据集。在 Illumina NextSeq 500 上对 2,700 个单细胞进行了测序。可以在此处[2]找到原始数据。 我们首先读取数据。 Read10X() 函数从 10X 读取 cellranger 管道的输出&…

Elasticsearch:使用查询规则(query rules)进行搜索

在之前的文章 “Elasticsearch 8.10 中引入查询规则 - query rules”&#xff0c;我们详述了如何使用 query rules 来进行搜索。这个交互式笔记本将向你介绍如何使用官方 Elasticsearch Python 客户端来使用查询规则。 你将使用 query rules API 将查询规则存储在 Elasticsearc…

【MySQL基础】:深入探索DQL数据库查询语言的精髓(上)

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; MySQL从入门到进阶 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一. DQL1.1 基本语法1.2 基础查询1.3 条件查询1.3 聚合函数 &#x1f324;️ 全篇…
最新文章