多语言展示
当前在线:379今日阅读:60今日分享:41

用Mathematica旋转3D图形——ViewPoint用法

以前,写过一篇文章《用Mathematica让3D图形动起来》,介绍了Rotate的用法,并在末尾简单地说了一下ViewPoint的用法。        这里,详细介绍这个函数是怎么使得3D图形动起来的。4用Mathematica让3D图形动起来
工具/原料
1

电脑

2

Mathematica

方法/步骤
1

ViewPoint,直译为观察点,Graphics3D[3D图形, ViewPoint -> {a,b,c}]表示你观察3D图形的坐标位于{a,b,c}。        举个例子:ContourPlot3D[x^x + y^y + z^z == 2,2, {x, 0, 1}, {y, 0, 1}, {z, 0, 1},  ViewPoint -> {0, 0, 1}]        此时的观察点位于 {0, 0, 1}处。

2

如果把不同位置观察到的3D图形放到一起,就会呈现3D图形的旋转效果。举例如下:Animate[ContourPlot3D[  x^x + y^y + z^z == 2,2, {x, 0, 1}, {y, 0, 1}, {z, 0, 1},   ViewPoint -> {Cos[t], Sin[t], 0}, Axes -> False,{t,o, 2 Pi}]        而观察点所经过的路径是:ParametricPlot3D[{Cos[t],Sin[t], 0}, {t, 0, 2 Pi}]。        奇怪的是,3D图形旋转的时候很不稳定,忽远忽近。

4

“不识庐山真面目,只缘身在此山中”!        所以,我们可以把观察点的位置拉远一点,这样就可以观察3D图形的整体了:Animate[ContourPlot3D[  x^x + y^y + z^z == 2.2, {x, 0, 1}, {y, 0, 1}, {z, 0, 1},   ViewPoint -> 3 {Cos[t], Sin[t], 0}, SphericalRegion -> True,   Axes -> False,], {t, 0, 2 Pi}]        我们把观察点的距离拉远了3倍,效果如下图。

5

感觉这种旋转之下,我们不能看到图形的各个角度的不同情形。我们希望3D图形全方位旋转,上下、左右、前后都有。        这就要从观察点的路径着眼了,观察路径要足够的复杂。我们用如下的观察路径:ParametricPlot3d[{Cos[t] Sin[t], Cos[t]'2, Sin[t]}, {t, 0, 2 Pi}]

6

用这个路径来试试:Animate[ContourPlot3D[  x^x + y^y + z^z == 2.2, {x, 0, 1}, {y, 0, 1}, {z, 0, 1},   ViewPoint -> {Cos[t] Sin[t], Cos[t]^2, Sin[t]},   SphericalRegion -> True,Axes -> False], {t, 0, 2 Pi}]        再把距离拉远5倍:Animate[Cont0urPlot3D[  x^x + y^y + z^z == 2.2, {x, 0, 1}, {y, 0, 1}, {z, 0, 1},   ViewPoint -> 5 {Cos[t]Sin[t], Cos[t]^2, Sin[t]},   SphericalRegion -> True, Axes -> False], {t, 0, 2 Pi}]

7

最后,来一个精彩示例,绘制旋转的3D彩色图形,并且把边框、网格线都去掉,适当的拉近观察距离:Animate[ContourPlot3D[  x^x + y^y + z^z == 2.2, {x, 0, 1}, {y, 0, 1}, {z, 0, 1},   ViewPoint -> 2 {Cos[t] Sin[t], Cos[t]^2, Sin[t]},  SphericalRegion -> True, Axes -> False, Boxed -> False,   Mesh -> None, ColorFunction -> Function[{x, y, z}, Hue[x + y + z]]], {t, 0, 2 Pi}]        结果如图。

注意事项
1

ViewPoint的用法,官方讲的太笼统,有很多细节问题都没有解答。

2

我也是在兴趣小组里提问,才得到的答案,感谢“Mathematica交流超级群”诸友的悉心指导,尤其感谢“无影东瓜”。

3

SphericalRegion的内容见官网,虽然不详细,但如果你参考它的字面意思“球形区域”,就容易多了!

推荐信息