Maryam Mirzakhani 在 2014 年的 一次报告 中提出了如下的问题:(问题大约在视频的 25 分 50 秒处)
问题:假设平面上有一个正方形的房间,房间的四面墙壁都是光滑的反射镜子,即子弹在碰到墙壁时会按照入射角等于出射角的规律一直反射下去。房间中有一位政要和一个刺客。能否在房间中放置若干名(数目有限)保镖,使得这些保镖可以封死刺客的所有射击角度,从而保护政要不被子弹击中?
政要和刺客的位置是固定的,但可能是房间中任何两点。
据 考据,这个问题曾经在 1989 年列宁格勒的数学竞赛中出现过。不久前通过 PBS 和 math3ma 的博客 的科普,这个问题又被更多人所了解。如果你还没有看过这个视频和博客的话,我强烈建议你先去观看它们,然后再阅读本文。因为她们讲的真的非常棒,而且是真正面向一般大众的科普!
Greg Egan 进一步讨论了 当房间是正三角形和正六边形的情况。他给出的答案是正确的,但是我感觉他对正六边形情形的解释有点让人难懂(Greg Egan 的一贯风格)。
本文是对 math3ma 和 Greg Egan 博客文章的补充。也就是说,我这里不会再给出正方形情形的解答,math3ma 的博客文章已经解释的很好了。但是如果你看完 Greg Egan 的文章以后对正三角形和正六边形的情形还有疑问,这篇文章也许可以帮助你。
本文的代码在 Github 上。这个项目包含了一个交互式的脚本,你可以在窗口中点击并拖拽鼠标来查看刺客射击的轨迹以及保镖的位置:
正方形 | 正三角形 | 正六边形 |
2021/06/27 更新:我更新了一下 shader 代码,把每个动画放在一个 SVG 图片中。最后几个动画代码是可以使用键盘选择场景的,具体操作如下:
- 按下
1
开启/关闭 Möbius 变换。 - 按下
2
开启/关闭椭圆旋转。 - 按下
3
开启/关闭双曲缩放。 - 按下
4
开启/关闭展示 Riemann 球面。
这几个按键可以组合出许多不同的效果来!
本文的想法源自 Roice Nelson 的 shadertoy 项目,我觉得他的创意很棒,就是效果有点糙,于是 动手改进了一番。不懂的人看这个动画可能只是觉得好玩,其实它背后的数学并不简单。
这篇文章将用动画的形式从三个角度演示 Möbius 变换,这三个角度是密切相关的:
- Möbius 变换作为扩充复平面 \(\hat{\mathbb{C}}\) 到自身的全纯函数。
- Möbius 变换作为 Riemann 球面 \(S^2\) 到自身的全纯函数。
- Möbius 变换作为上半双曲空间中的等距变换。
本文只做演示,并不介绍详细的数学证明。读者可以参考下面的资料:
- 维基百科页面.
- Visual complex analysis, Tristan Needham.
- Indra's pearls, chapter 3.
- An introduction to complex function theory. Bruce P. Palka. Undergraduate texts in mathematics. chapter IX, section 2.
本文的动画应该可以帮助你更好地理解这些资料中的内容。
本文要介绍的是我写的一个有趣的 Python 小程序,一个脱离了低级趣味的程序,一个有益于广大人民了解算法的程序。代码在 Github 上。
这个程序可以用来制作各种各样的算法动画,包含但不限于:
几年前在知乎上有这么 一个问题:
问题:有哪些 \(\mathbb{Z}[x]\) 中的多项式,它们在有理数域 \(\mathbb{Q}\) 上是不可约的,而对任意素数 \(p\),模 \(p\) 以后在 \(\mathbb{Z}_p[x]\) 上都是可约的?
当时我给了回答,后来账号注销了,答案也一并删除了。现在把我的原答案贴在这里:
当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器