新图标

这是一篇旧文,其中的内容可能已经过时。

我决定为站点添加一个图标。然而找不到想表达的意思,干脆弄一个拉风的动态图标好了。

支持动态图标的浏览器

BrowserICOPNGGIFanimated GIFsJPEGAPNGSVG
Firefox1.01.01.0YesYes3.0No
Google ChromeYesYes4.04.04.0No?
Internet Explorer5.011.011.0NoNoNoNo
Opera7.07.07.07.07.09.5?
SafariYes4.04.0No4.0NoNo

据说 Chrome 也是看不到动画效果的,不过管它呢,我用火狐。

构造

旋转起来有特色的图形,我想到了两个:一个是太极图,另一个是蚊香。正在两者之间犹豫时,我灵机一动 🤔 ,画出了这张图:

arctan A={(r,θ):r(0,π2),2tanrθ(0,π)}A=\left\{(r,\theta):r\in(0,\frac{\pi}{2}),2\tan{r}-\theta\in(0,\pi)\right\}

于是有了现在的图标。

如你所见:

  • 这个集合是有界的连通开集,被包含在 {r<π2}\{r<\frac{\pi}{2}\} 以内,且占据了它一半的面积;
  • 在接近中心的地方,它表现得像太极图那样初等;在接近外围的地方,它又像阿基米德螺线那样盘旋了无数圈。

作图过程中的问题

在 Mathematica 中作图时,遇到了不少问题:

  1. 一开始用的表达式:

    (arctant2cos(ts),arctant2sin(ts)),t(0,200),s(0,π)\left(\arctan{\frac{t}{2}}\cos(t-s),\arctan{\frac{t}{2}}\sin(t-s)\right),t\in(0, 200),s\in(0,\pi)

    这样有个显著的缺点:当 tt 固定时,点随 ss 的变化扫出的是一段半圆弧,所以只有 ss 的取样点足够多时,才不至于看到明显的折角。

    解决方案:把表达式改成

    (arctant+s2cost,arctant+s2sint),t(0,200),s(0,π)\left(\arctan{\frac{t+s}{2}}\cos{t},\arctan{\frac{t+s}{2}}\sin{t}\right),t\in(0,200),s\in(0,\pi)

    tt 固定时,点随 ss 的变化扫出的是一条线段,这样 ss 只要取三个样点就可以了。

  2. 采用了新的表达式,极轴下方的“蛇头”却不翼而飞。

    解决方案:不慌不忙地把“蛇头”补上:

    (arctanu2cosuv,arctanu2sinuv),u(0,π),v(0,1)\left(-\arctan{\frac{u}{2}}\cos{u}\,v, -\arctan{\frac{u}{2}}\sin{u}\,v\right),u\in(0, \pi), v\in(0, 1)
  3. 由于边界线存在固定宽度,图形外围一片漆黑,而不是设想中的 50% 灰。

    解决方案:不显示边界线。

  4. 去掉边界线之后,原先平滑的边缘变成了锯齿状。这是由于曲线的图像支持抗锯齿,而区域不支持。

    解决方案:图形抗锯齿工具

ParametricPlot3D[
  {
    {Cos[u + v], Sin[u + v], Sin[u - v]},
    {-Sin[u + v], Cos[u + v], Sin[u - v]},
    {-Cos[u + v], -Sin[u + v], Sin[u - v]},
    {Sin[u + v], -Cos[u + v], Sin[u - v]},
    {Sin[u - v], Cos[u + v], Sin[u + v]},
    {Sin[u - v], -Sin[u + v], Cos[u + v]},
    {Sin[u - v], -Cos[u + v], -Sin[u + v]},
    {Sin[u - v], Sin[u + v], -Cos[u + v]},
    {Cos[u + v], Sin[u - v], Sin[u + v]},
    {-Sin[u + v], Sin[u - v], Cos[u + v]},
    {-Cos[u + v], Sin[u - v], -Sin[u + v]},
    {Sin[u + v], Sin[u - v], -Cos[u + v]}
  },
  {u, 0, Pi/4},
  {v, 0, Pi/4},
  Mesh -> False, PlotStyle -> Opacity[0.7]
]

题外话

在很长的一段时间内,人们认为平面上的曲线至多是两个不相交区域(即连通开集)的公共边界。上面的图形给出了一个反例: {r=π2}\{r=\frac{\pi}{2}\} 是三个区域 AAAA 的中心对称像和 {r>π2}\{r>\frac{\pi}{2}\} 的公共边界。类似地,可以构造任意多个不相交区域有公共边界的情形。