多语言展示
当前在线:1909今日阅读:84今日分享:32

把动态图放映到球面上的方法

本文给出下面的动态图,一只憨态可掬的龙猫在玩杂耍。本文的目的,是把下面的动态图片,投影到球面上,使之可以在球面上播放。类似的文章,可以查看《怎么在球面上写字?》1怎么在球面上写字?
工具/原料
1

电脑

2

Mathematica

方法/步骤
1

加载动态图:a = Import['D:\\我的图片\\a.gif']得到了动态图每一帧的列表a。

2

把a里面的第一幅图片,贴到球面上,看看模样:SphericalPlot3D[1 , {u, 0, Pi}, {v, 0, 2 Pi}, Mesh -> None,  TextureCoordinateFunction -> ({#5, 1 - #4} &),  PlotStyle -> Texture[a[[1]]], Lighting -> {'Directional', White},  Boxed -> False, Axes -> False, RotationAction -> 'Clip',  ViewPoint -> {-1,0,0}, SphericalRegion -> True]里面的图案严重变形了,得改。

3

把a里面的所有图片,都进行同样的修改:b = ColorReplace[     Colorize[      ImageResize[#, {200, 360}]], {RGBColor[0.7, 0.2, 0.2]}] & /@ a;下面是对应的动态图。

4

b的第一幅图片贴到球面上,效果如下。

5

对b的每个图套加上一个浅绿色的外框:c = ImageResize[     ImageCompose[      Graphics[{Lighter@Lighter@Lighter@Lighter@Green, Rectangle[]},        ImageSize -> 800], #], 500] & /@ b;

6

把c的第一幅图贴到球面上,龙猫的形状总算是比较正常了。

7

把c的所有图片,都贴到球面上:Table[SphericalPlot3D[1 , {u, 0, Pi}, {v, 0, 2 Pi}, Mesh -> None,    TextureCoordinateFunction -> ({#5, 1 - #4} &),    PlotStyle -> Texture[n], Lighting -> {'Directional', White},    Boxed -> False, Axes -> False, RotationAction -> 'Clip',    ViewPoint -> {-1, 0, 0}, SphericalRegion -> True], {n, c}];

8

这样,就实现了在球面上播放动态图;球面还可以旋转。

注意事项

用同样的方法,可以在球面上播放电影。

推荐信息