【莫比乌斯变换-03】python实现圆对圆的变换

在这里插入图片描述

文章目录

  • 一、说明
  • 二、python实现复平面的莫比乌斯变换
  • 三、线的变换
  • 四、画笑脸

一、说明

我们在前面的文章中,叙述了莫比乌斯变换的复数分析,以及种种几何属性,本篇中叙述如何程序地实现:复平面上的圆在莫比乌斯变换下的图像是另一个圆。为了使这一点始终成立,您必须将一条线作为圆的特例,如果您愿意,可以是无限半径的圆。

二、python实现复平面的莫比乌斯变换

这篇文章将用 Python 代码和图表来说明这些陈述。首先,一些在复平面上绘制圆和其他曲线的代码。

 from numpy import exp, pi, linspaceimport matplotlib.pyplot as pltθ = linspace(0, 2*pi, 200)def circle(radius, center):return center + radius*exp(1j*θ)def plot_curves(curves):for c in curves:plt.plot(c.real, c.imag)plt.show()plt.close()

接下来,编写莫比乌斯变换的代码,以及我们将在绘图中使用的特定莫比乌斯变换。

def mobius(z, a, b, c, d):return (a*z + b)/(c*z + d)def m(curve):return mobius(curve, 1, 2, 3, 4)

现在我们将绘制三个圆及其在莫比乌斯变换下的图像

m ( z ) = ( z + 2 ) / ( 3 z + 4 ) m ( z ) = ( z + 2)/(3 z + 4) m(z)=(z+2)/(3z+4)

使用以下代码。

    circles = [circle(1, 0), circle(2, 0), circle(2, 2)]plot_curves(circles)plot_curves([m(c) for c in circles])

这会产生
在这里插入图片描述

在这里插入图片描述

请注意,第一个蓝色圆圈最初是最小的圆圈,并包含在第二个橙色圆圈内。但在图像中,蓝色圆圈变得最大,并且不再位于橙色圆圈内。这是因为我们的莫比乌斯变换在 -4/3 处有一个奇点,并且围绕该点事情会发生翻天覆地的变化。

三、线的变换

接下来我们将看一个线与线之间映射的示例。

   line = linspace(-100, 100, 600)curves = [line, 1j*line - 4/3]plot_curves(curves)plot_curves([m(c) for c in curves])

这会产生
在这里插入图片描述

在这里插入图片描述

这些线被映射到线,因为它们都穿过 -4/3 处的奇点。蓝色的实轴映射到其自身。 -4/3 + iy行被移至实部 1/3。

最后,让我们看一下映射到圆的直线。由于莫比乌斯变换的逆变换是另一种莫比乌斯变换,因此该示例还表明圆可以映射到直线。

    lines = [1j*line - 4, 1j*line + 4, line - 4j, line + 4j]plot_curves(lines)plot_curves([m(c) for c in lines])

这会产生
在这里插入图片描述

在这里插入图片描述
请注意,圆圈并不是很接近。那是因为我的线只从 -100 到 100,而不是 -∞ 到 ∞。圆圈中的间隙为 1/3,因为当z趋向 ±无穷大时,这是我们变换 ( z + 2)/(3 z + 4)的极限。

四、画笑脸

莫比乌斯变换的很重要指标是奇点(与不动点是两个概念)位置。为了进一步说明问题,我想看一下笑脸以及在不同的莫比乌斯变换下它会发生什么。
在这里插入图片描述
这是绘制原始脸部的代码。

  dash = linspace(0.60, 0.90, 20)smile = 0.3*exp(1j*2*pi*dash) - 0.2jleft_eye  = circle(0.1, -0.4+.2j)right_eye = circle(0.1,  0.4+.2j)face = [circle(1, 0), left_eye, smile, right_eye]

接下来,让我们用参数 (1, 0, 1, 3) 对该面进行莫比乌斯变换。奇点位于 -3 处,位于面外且距离相当远。

求奇点方法:分母等于0, f ( z ) = z z + 3 f(z)=\frac{z}{z+3} f(z)=z+3z z = − 3 z=-3 z=3

在这里插入图片描述
接下来我们将使用参数 (1, 0, 1, -1+1j),其奇异性为 1 – i,更接近脸部,因此失真更多。

求奇点方法 f ( z ) = z z + ( − 1 + 1 j ) = z f(z)=\frac{z}{z+(-1+1j)}=z f(z)=z+1+1jz=z z = 1 − j z= 1-j z=1j
在这里插入图片描述

现在我们使用参数 (1, 0, 3, 1),将奇点置于面内的 -1/3 处。
在这里插入图片描述
最后,我们查看参数 (1, 0, 1, 0.4-0.2j),将奇点放在左眼内。
在这里插入图片描述
结论:奇点在不在单位圆内部,是图片保持信息的关键因素。
下一篇文章将解释如何选择莫比乌斯变换的参数以使点到达您想要的位置。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于高德 API 的自动获取气候数据的 Python 脚本

文章目录 高德申请 Key脚本介绍运行结果示例 源代码: https://github.com/ma0513207162/PyPrecip。pyprecip\reading\read_api.py 路径下。 项目介绍:PyPrecip 是一个专注于气候数据处理的 Python 库,旨在为用户提供方便、高效的气候数据处理…

linux基本操作

vim的基本操作 正常模式:启动vim后默认处于正常模式。不论位于什么模式,按下Esc建都会进入正常模式。 插入模式:在正常模式中按下i,l,a,A等键,会进入插入模式。现在只用记住按i键会进行插入模…

文本内容如何扫码展示?文本转二维码常用技巧

随着网络的不断发展,现在很多人会通过二维码的方式来作为内容的载体,用来给其他人提供需要的信息或者其他内容。其中,将文本制作二维码就是很常用的一种方式,通过扫码展示文字内容,比如信件、物品信息、联系方式等类型…

EPAI手绘建模APP资源管理和模型编辑器2

g) 矩形 图 26模型编辑器-矩形 i. 修改矩形的中心位置。 ii. 修改矩形的长度和宽度。 h) 正多边形 图 27模型编辑器-内接正多边形 图 28模型编辑器-外切正多边形 i. 修改正多边形的中心位置。 ii. 修改正多边形中心距离端点的长度。 iii. 修改正多边形的阶数。阶数为3&…

【Unity 协程】

Unity中的协程(Coroutine)是一种编程结构,它允许你以一种看似同步的方式编写可能需要异步执行的代码。协程特别适用于需要在一定时间后执行操作,或者在循环执行某段代码直到某个条件满足时的场景。 协程使用IEnumerator委托来实现…

基于HAL库的stm32中定时器的使用--定时器中断每隔一秒进行led灯的闪烁以及定时器生成PWM

一:什么是定时器 (1)stm32定时器,是存在于stm32单片机中的一个外设。stm32共有八个定时器,两个高级定时器(TIM1、TIM8),四个通用定时器(TIM2、TIM3、TIM4、TIM5&#xff…

docker 指定根目录 迁移根目录

docker 指定根目录 迁移根目录 1、问题描述2、问题分析3、解决方法3.1、启动docker程序前就手动指定docker根目录为一个大的分区(支持动态扩容),事前就根本上解决根目录空间不够问题3.1.0、方法思路3.1.1、docker官网安装文档3.1.2、下载docker安装包3.1.3、安装doc…

贪吃蛇(下)游戏的实现

感谢大佬的光临各位,希望和大家一起进步,望得到你的三连,互三支持,一起进步 个人主页:LaNzikinh-CSDN博客 文章目录 前言一.蛇和食物的打印二.游戏的运行逻辑三.结束游戏 (善后工作)四.游戏的测…

C语言中字符串输入的3种方式

Ⅰ gets() 函数 gets() 函数的功能是从输入缓冲区中读取一个字符串存储到字符指针变量 str 所指向的内存空间 # include <stdio.h> int main(void) {char a[256] {0};gets(a);printf("%s",a);return 0; }Ⅱ getchar() # include <stdio.h> int mai…

工业光源环形系列一AOI光源特点

产品特点 ◆具有环形光源所有的特点&#xff1b; ◆采用不同角度多色光&#xff0c;使被照物体的成像更具立体特征&#xff1b; ◆每种颜色可独立控制。

论文辅助笔记:Tempo之modules/prompt.py

1 get_prompt_param_cls 2 get_prompt_value 3 Prompt 类 3.1 _init_weights 3.2 forward

Spring Security Oauth2 JWT 添加额外信息

目录 一、问题描述 二、实现步骤 1、自定义TokenEnhancer 2、配置授权服务器 3、自定义UserDetails的User类 三、参考文档 一、问题描述 Oauth2里默认生成的JWT信息并没有用户信息&#xff0c;在认证授权后一般会返回这一部分信息&#xff0c;我对此进行了改造。 Oauth…

CC工具箱使用指南:【按属性分割成SHP】

一、简介 Arcgis中有一个【按属性分割】的工具&#xff0c;可以将要素类按字段值分割成多个gdb要素类&#xff0c;也可以分割成多个SHP要素。 这个工具是在【按属性分割】工具的基础上做了一个强化&#xff0c;可以将分割出来的SHP要素分别放在独立的文件夹内。 实际工作中&…

Java | Leetcode Java题解之第70题爬楼梯

题目&#xff1a; 题解&#xff1a; public class Solution {public int climbStairs(int n) {double sqrt5 Math.sqrt(5);double fibn Math.pow((1 sqrt5) / 2, n 1) - Math.pow((1 - sqrt5) / 2, n 1);return (int) Math.round(fibn / sqrt5);} }

爬虫工具:避免复制文字收费,VIP。。

step ctrl shift i 打开开发者工具 点击...打开设置勾选禁用JavaScript Principle 事件处理&#xff1a;JavaScript 用于处理用户交互&#xff0c;例如点击、滚动、输入等禁用 JavaScript 后&#xff0c;页面上的所有 JavaScript 代码都将不会执行

学习网络安全 你必须要学会的20款工具

工欲善其事必先利其器&#xff0c;在新入门网络安全的小伙伴而言。这些工具你必须要有所了解。本文我们简单说说这些网络安全工具吧&#xff01; Web安全类 Web类工具主要是通过各种扫描工具&#xff0c;发现web站点存在的各种漏洞如sql注入、xss等。从而获取系统权限&#xf…

IoTDB 入门教程 基础篇⑦——数据库管理工具 | DBeaver 连接 IoTDB

文章目录 一、前文二、下载iotdb-jdbc三、安装DBeaver3.1 DBeaver 下载3.2 DBeaver 安装 四、安装驱动五、连接数据库六、参考 一、前文 IoTDB入门教程——导读 二、下载iotdb-jdbc 下载地址org/apache/iotdb/iotdb-jdbc&#xff1a;https://maven.proxy.ustclug.org/maven2/o…

stamps做sbas-insar,时序沉降图怎么画?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

【人工智能Ⅱ】实验5:自然语言处理实践(情感分类)

实验5&#xff1a;自然语言处理实践&#xff08;情感分类&#xff09; 一&#xff1a;实验目的与要求 1&#xff1a;掌握RNN、LSTM、GRU的原理。 2&#xff1a;学习用RNN、LSTM、GRU网络建立训练模型&#xff0c;并对模型进行评估。 3&#xff1a;学习用RNN、LSTM、GRU网络做…

AST原理(反混淆)

一、AST原理 jscode var a "\u0068\u0065\u006c\u006c\u006f\u002c\u0041\u0053\u0054";在上述代码中&#xff0c;a 是一个变量&#xff0c;它被赋值为一个由 Unicode 转义序列组成的字符串。Unicode 转义序列在 JavaScript 中以 \u 开头&#xff0c;后跟四个十六进…