复数基础及其2D空间的旋转
本文我们讨论复数及其旋转的含义。复数很有意思,本文介绍了复数的基本定义和性质,以及它关于旋转的几何意义。
复数对于旋转的两个方面极为重要:
1. 它引入了旋转算子(rotational operator)的思想:可以通过复数表示一个旋转变换。
2. 它是四元数和多向量的内在属性。
虽然我们暂时不讨论四元数和多向量(后面文章会介绍),但是我们会讨论复数的旋转含义(复平面上的 2D 旋转),以及引入的旋转子(rotor),我们发现通过特定的复数可以描述一个 2D 旋转。
介绍
复数(complex number)又称为数字王国中的“国王”,它可以解决普通实数不能很好解决的问题。
例如,对于以下方程:
$$x^2+1=0$$
尽管方程如此简单,但并没有实数解。实际上,实数无法解决这样的问题:
$$x=\sqrt{-1}$$
但这没有妨碍数学家们找到解决此类问题的方法,他们提出一个很牛很简单的思想,就是承认 $i$ 的存在,它满足 $i^2=-1$,于是前面的方程我们可以解出:
$$x=\pm i$$
那么 $i$ 到底是什么呢?我们可以不必纠结,$i$ 就是数学家提出的数学工具,一个简单的数学对象,满足 $i^2=-1$。本文会探讨这个数学工具对于旋转如何发挥作用。
复数基础
复数的定义
复数由两个部分组成:实部(real part)和虚部(imaginary part)。实部就是我们平常遇到的数(正数、负数、0),而虚部是一个实数和 $i$ 的乘积。
例如,$2+3i$ 是一个复数,2 是实部,$3i$ 是虚部。
复数集就像是实数集的扩展,它包含了所有实数(虚部为 0)。而虚部不为 0 的复数不是实数。以下都属于复数:
- 2
- $2+2i$
- $1-3i$
- $-4i$
- $17i$
- $isin\theta$
- $4.5+icos\theta$
复数的公理
下面的公理体现了复数的性质。对于任意的复数 $z_1$、$z_2$ 和 $z_3$,满足:
- 加法交换律:$z_1+z_2=z_2+z_1$
- 加法结合律:$(z_1+z_2)+z_3=z_1+(z_2+z_3)$
- 乘法交换律:$z_1z_2=z_2z_1$
- 乘法结合律:$(z_1z_2)z_3=z_1(z_2z_3)$
- 乘法分配律:$z_1(z_2+z_3)=z_1z_2+z_1z_3$、$(z_1+z_2)z_3=z_1z_3+z_2z_3$
其实复数的这些加法和乘法的公理和实数一样的。由于复数集里面包含实数集,如果不和实数一致,反而比较奇怪的。
复数的模
模(modulus)有长度的含义。对于复数 $z=a+bi$,它的模定义为:
$$\left | z \right |=\sqrt{a^2+b^2}$$
例如,$3+4i$ 的模为 5。
后面我们会看到,模定义在复数的极坐标表示中的作用。
复数的加减
对于两个复数:$z_1=a+bi$ 和 $z_2=c+di$,其加减法为
$$z_1\pm z_2=(a\pm c)+(b\pm d)i$$
即实部和虚部分别相加减。
复数的标量乘法
标量乘法同样符合我们的直觉。对于标量 $\lambda$ 和复数 $a+bi$,有
$$\lambda(a+bi)=\lambda a+\lambda bi$$
例如:
$$2(3+5i)=6+10i$$
两个复数的乘积
两个复数的乘积就是各项分别相乘并相加。对于两个复数 $z_1=a+bi$ 和 $z_2=c+di$,有
\begin{align*}
z_1z_2 &= (a+bi)(c+di)\\
&= ac+adi+bci+bdi^2\\
&= (ac-bd)+(ad+bc)i
\end{align*}
例如,对于 $z_1=3+4i$ 和 $z_2=5-2i$,有
\begin{align*}
z_1z_2 &= (3+4i)(5-2i)\\
&= 15-6i+20i-8i^2\\
&= 23+14i
\end{align*}
可以看到。两个复数的加减和乘积都是一个复数。
共轭复数
两个复数相乘还有个特殊情况:
\begin{align*}
(a+bi)(a-bi)&=a^2-b^2i \\
&= a^2+b^2
\end{align*}
其中 $a-bi$ 称作是 $a+bi$ 的共轭复数(conjugate complex number),又称复共轭、复数共轭。
更一般的定义,$z=a+bi$ 的共轭复数用 $\bar{z}$ 或 $z^*$ 表示,其中:
$$z^*=a-bi$$
而
$$zz^*=a^2+b^2=\left |z \right |^2$$
两个复数的除法
利用共轭复数的性质,我们再来看复数的除法。
对于 $z_1=a+bi$ 和 $z_2=c+di$,其中 $z_2\neq 0$。
那么,
\begin{align*}
\frac{z_1}{z_2}&=\frac{z_1z_2^*}{z_2z_2^*} \\
&= \frac{z_1z_2^*}{\left | z_2 \right |^2} \\
&= \frac{(a+bi)(c-di)}{c^2+d^2} \\
&= \frac{(ac+bd)+(bc-ad)i}{c^2+d^2}
\end{align*}
例子:
\begin{align*}
\frac{4+3i}{3+4i}&=\frac{(4*3+3*4)+(3*3-4*4)i}{3^2+4^2} \\
&= \frac{24}{25}-\frac{7}{25}i
\end{align*}
复数的逆
已知一个复数 $z\neq 0$,定义它的逆 $z^{-1}=\frac{1}{z}$。利用共轭复数的性质,我们可以推导:
$$\frac{z^{-1}}{z^*}=\frac{1}{zz^*} = \frac{1}{\left | z \right |^2}$$
$$\Rightarrow z^{-1}=\frac{z^*}{\left | z \right |^2}$$
例子:
\begin{align*}
\frac{1}{3+4i} &=(3+4i)^{-1} \\
&= \frac{3-4i}{25} \\
&= \frac{3}{25}-\frac{4}{25}i
\end{align*}
检查:$(3+4i)(\frac{3}{25}-\frac{4}{25}i)=\frac{9}{25}-\frac{12}{25}i+\frac{12}{25}i+\frac{16}{25}=1$
复数与旋转
复平面
极坐标表示
旋转子
复数基础及其2D空间的旋转的更多相关文章
- 2D空间中判断一点是否在三角形内
要注意如果是XY坐标轴的2D空间,要取差乘分量z而不是y. 实现原理是,将三角形ABC三个边(AB,BC,CA)分别与比较点判断差乘,如果这3个差乘结果表示的方向一致,说明就在三角形内. 效果: 代码 ...
- 2D空间中求一点是否在多边形内
参考自这篇博文:http://www.cnblogs.com/dabiaoge/p/4491540.html 一开始没仔细看做法,浪费了不少时间.下面是最终实现的效果: 大致流程: 1.随便选取多边形 ...
- python基础——类名称空间与对象(实例)名称空间
python基础--类名称空间与对象(实例)名称空间 1 类名称空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类的良好总属性:数据属性和函数属性 其中类 ...
- 2D空间的OBB碰撞实现
OBB全称Oriented bounding box,方向包围盒算法.其表现效果和Unity的BoxCollider并无二致.由于3D空间的OBB需要多考虑一些情况 这里仅关注2D空间下的OBB. 实 ...
- [译]2D空间中使用四叉树Quadtree进行碰撞检测优化
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Unity2017.2.0f3 原文出处 : Quick Tip: Use Quadtrees to Detect Lik ...
- iOS基础 - Quartz 2D绘图
一.Quartz 2D Quartz 2D是一个二维图形绘制引擎,支持iOS环境和Mac OS X环境. Quartz 2D以PDF的规范为基础的图形库,用来绘制二维文字和图形,允许相同的绘图指令在任 ...
- 2d,3d中旋转推导
二维绕原点旋转,其实点为(x,y),旋转角度为黄色标注的角度. 推导过程如下: x' = r cos(al+be); y' = r sin(al+be);x '= rcosalcosbe-rsinal ...
- js基础梳理-内存空间
我估计有很多像我这样非计算机专业的人进入到前端之后,总是在写业务代码,思考什么什么效果如何实现,导致很多基础概念型的东西都理解得并不太清楚.经常一碰到群里讨论的些笔试题什么的,总觉得自己像是一个假前端 ...
- 利用Python进行数据分析(13) pandas基础: 数据重塑/轴向旋转
重塑定义 重塑指的是将数据重新排列,也叫轴向旋转. DataFrame提供了两个方法: stack: 将数据的列“旋转”为行. unstack:将数据的行“旋转”为列. 例如: 处理堆叠格式 ...
随机推荐
- 不使用xftp上传/下载文件到linux
yum install lrzsz # 安装软件 window端上传到linux端: 1. window端先压缩需上传的文件 2. linux端运行命令rz 3. 在弹出的窗口选择压缩好的文件, ...
- 使用PAC文件来管理代理连接
生成PAC文件 谷歌浏览器插件商店安装SwitchyOmega,找到立即更新模式,然后导出PAC文件 使用PAC文件 pac采用js编写 Windows Windows上面使用PAC文件很简单,新建一 ...
- java web开发入门十二(idea创建maven SSM项目需要解决的问题)基于intellig idea(2019-11-09 11:23)
一.spring mvc action返回string带双引号问题 解决方法: 在springmvc.xml中添加字符串解析器 <!-- 注册string和json解析适配器 --> &l ...
- STM32Cube生成的HID项目,找不到hUsbDeviceFS
症状 在main中尝试发消息给上位机: 解决方法 在STM32生成的HID项目里,默认是没有把hUsbDeviceFS导出的,需要修改usb_device.h文件,在USER CODE BEGIN V ...
- 推荐一款移动端日历App吉日历
推荐一款移动端日历App吉日历 一 应用描述 万年历.日历.农历.黄历.假期安排.天气预报.记事提醒便捷查看,一目了然! 二 功能介绍: 1.万年历:精美的日期展示,完整的节日日历随意查看,节假日.休 ...
- C# HTTP系列6 HttpWebResponse.StatusCode 响应代码中文详解
系列目录 [已更新最新开发文章,点击查看详细] 1xx - 信息提示 这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应 · 100 - Continue ...
- 论文阅读: Building a 3-D Line-Based Map Using Stereo SLAM
Abstract 一个把直线用作feature的SLAM系统. 跟点相比, 直线对于环境的结构提供了更丰富的信息, 也让其鞥有可能推断地图的空间语义. 使用了Plucker line coordian ...
- 34,Leetcode 组合总和I,II -C++ 回溯法
I 题目描述 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合.candidates 中的数字可以无 ...
- python做一个简易图片下载工具
代码有点乱,先这样 # -*- coding:utf-8 -*- #__author__ :kusy #__content__:文件说明 #__date__:2018/11/01 11:01 impo ...
- appium+python 多设备并行执行脚本【转】
1.ready.py文件 def getport(): aport = random.randint(4700, 4900) # 判断端口是否被占用 while getDeviceInfo.is_op ...