python通过视频生成三维图像_利用 python+plotly 制作双波源干涉三维图像

本人在学习完制作双波源干涉现象的的二维Contour Plots图像之后,发现 plotly 还有3D 图像制作,也就是3D Surface Plots,这个更能展示双波源干涉现象的结果,果然学之。中间有些地方要说明一下,3D Surface Plots图表默认的底部是正方形,所以我采用了100*100的干涉图,然后加上一层透明的图标,让图像压扁,不然图标的上下限就是波动位置,看起来非常不雅观。

下面分享代码和结果:

下面是 python部分的代码:

#!/usr/bin/python

# coding=utf-8

import plotly.plotly

z = []

with open("/Users/Vicky/Documents/workspace/fission/long/intervene.log") as apidata:

for i in apidata:

data = i.split("\n")[0].split(",")

z.append(data)

matrix = [[20 for zij in zi] for zi in z]#为了让立体图压扁

plotly.offline.plot([

dict(

z=z,

type="surface"

),

dict(

z=matrix,

showscale=False,

opacity=0.01,#透明度

type="surface"

)

], filename="2222.html")

下面是 java 部分的代码,是为了生成数据:

package practise;

import java.awt.Point;

import java.util.ArrayList;

import java.util.List;

import source.SourceCode;

public class Intervene extends SourceCode {

public List> data = new ArrayList<>();

public static void main(String[] args) {

Intervene intervene = new Intervene();

intervene.testDemo001();

}

public void testDemo001() {

Point point1 = new Point(25, 25);

Point point2 = new Point(75, 75);

int lamda = 6;

for (int i = 0; i < 100; i++) {// y 轴

List distance = new ArrayList<>();

for (int j = 0; j < 100; j++) {// x 轴

Point point = new Point(j, i);

double x = point.distance(point1) % lamda / lamda;

double y = point.distance(point2) % lamda / lamda;

double xx = Math.sin(x * 2 * Math.PI);

double yy = Math.sin(y * 2 * Math.PI);

distance.add(xx + yy);

}

data.add(distance);

}

StringBuffer content = new StringBuffer();

int size = data.size();

for (int i = 0; i < size; i++) {

String text = data.get(i).toString();

text = text.substring(1, text.length() - 1);

if (i == 0)

content.append(text);

content.append(LINE + text);

}

logLong("intervene.log", content.toString());

}

}

下面是3D Surface Plots图的截图:

20180306092335285.png

2018030609234447.png

技术类文章精选

非技术文章精选

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值