本文译自Wolfram社区文章:https://community.wolfram.com/groups/-/m/t/2489445。点击左下角“阅读原文”了解更多。
大多数手机相机使用滚动快门捕捉图像。 这意味着图像不是一次全部捕获,而是通过水平或垂直滚动线捕获。这种滚动速度很快,在大多数情况下并不明显。 但是对于运动与相机滚动速度相媲美的场景,事情看起来会失真。 一辆快速行驶的汽车可能看起来被剪断、挤压或拉伸,而旋转的螺旋桨看起来很奇怪。要查看上图中的奇怪图案是如何出现的,让我们首先将螺旋桨理想化为极坐标中的三叶草:
propeller[θ_] := Sin[3θ + π/2];
PolarPlot[propeller[θ], {θ, 0, 2π}]
现在随着滚动的发生,每条滚动线都将看到螺旋桨的不同旋转版本。在极坐标中,这只是角度的变化,例如 螺旋桨[θ + shift]。如果我们假设相机以恒定速度沿 x(水平)方向滚动,那么移位值将是 x 的常数倍。对于这个例子,我们假设螺旋桨在相机完成滚动时旋转了 2.25 圈。现在我们已经混合了极坐标和笛卡尔坐标,我们将切换到 RegionPlot:
revs = 2.25;
plot = With[{r = Sqrt[x^2 + y^2], θ = ArcTan[x, y]},
RegionPlot[
r <= propeller[θ - π*revs*x],
{x, -1, 1}, {y, -1, 1},
Frame -> None
PlotPoints -> 100
]
]
我们可以通过自己模拟卷帘快门来直观地了解为什么会发生这种情况:
Manipulate[
Show[
plot,
Graphics[{{EdgeForm[], White, HalfSpace[{-1, 0}, {t, 0}]},
{Thick, Black, InfiniteLine[{{t, 0}, {t, 1}}]}}],
PolarPlot[
propeller[θ - π*revs*t],
{θ, 0, π},
RegionFunction -> Function[{x, y, r, θ}, x > t],
PlotStyle -> Red
]
],
{t, -1, 1}
]
最后,我们可以模拟旋转螺旋桨视频的样子。 本质上,视频的每一帧都会对 θ 产生恒定的偏移(与滚动的偏移如何依赖于 x 不同)。
Monitor[
plots = With[{r = Sqrt[x^2 + y^2], θ = ArcTan[x, y]},
Table[
RegionPlot[
r <= propeller[θ - π*revs* x + α],
{x, -1, 1}, {y, -1, 1},
Frame -> None
PlotPoints -> 100
],
{α, 0, 2π, π/20}
]
];,
α
]
省略了对每个螺旋桨进行不同样式和着色的代码,结果如下:
Wolfram 13.0.1 软件试用
Wolfram 网店:https://store.wolfram.com/catalog/
创建 Wolfram ID 登录扫码下载试用版:
Wolfram Mathematica:
https://www.wolfram.com/mathematica/trial/
Wolfram System Modeler:
https://www.wolfram.com/system-modeler/trial/