欧拉折线法绘制电场线动画 | 寒山烟雨
现在的位置: 首页 > 滴水穿石 > 正文

欧拉折线法绘制电场线动画

2014年07月01日 滴水穿石 ⁄ 共 840字 ⁄ 字号 评论 1 条 ⁄ 阅读 4,053 views 次

python写的动画,用的是Vpython库,需要从VTK官网下载,目前3.x的python只有3.3有这个库,3.4还没有。依旧用的是欧拉折线法绘制电场线的轨迹,和上一篇的Fortran是一样的算法。

 Python | 
 
 copy code |
?

01
#!/usr/bin/python
02
from visual import *
03
import cmath as cm
04
import numpy
05
 
06
ball1=sphere(pos=(1.0,1.0,0.0),radius=0.3,color=color.red)
07
ball2=sphere(pos=(-1.0,1.0,0.0),radius=0.3,color=color.blue)
08
ball3=sphere(pos=(-1.0,-1.0,0.0),radius=0.3,color=color.red)
09
ball4=sphere(pos=(1.0,-1.0,0.0),radius=0.3,color=color.blue)
10
ball=[ball1,ball2,ball3,ball4]
11
q=numpy.array([1.0,-1.0,1.0,-1.0])
12
ground=box(pos=(0.0,0.0,0.0),size=(12.0,12.0,0.1),opacity=0.2)
13
dt=0.002 
14
N=30 
15
rate(5)
16
 
17
for i in range(len(q)):
18
    for j in range(N):
19
        p=0.32*cm.exp(j*cm.pi*(0.0+1.0j)*2./real(N))
20
        line=sphere(pos=(ball[i].x+p.real,ball[i].y+p.imag,0.0),
21
        radius=0.02,color=color.red)
22
        line.trail=curve(color=line.color)
23
        line.trail.append( pos = line.pos, color = (1, 0, 0))
24
        while not(abs(line.pos)>15.0 or abs(line.pos-ball[1].pos)<0.32 
25
        or abs(line.pos-ball[2].pos)<0.32 or abs(line.pos-ball[3].pos)<0.32 
26
        or abs(line.pos-ball[0].pos)<0.32):
27
            E=line.pos*0.0
28
            if i in [0,2]:
29
                for k in range(len(ball)):
30
                    E+=q[k]*(line.pos-ball[k].pos)/abs(line.pos-ball[k].pos)**3.0
31
            else:
32
                for k in range(len(ball)):
33
                    E-=q[k]*(line.pos-ball[k].pos)/abs(line.pos-ball[k].pos)**3.0
34
 
35
            line.pos+=dt*E/abs(E)
36
            line.trail.append( pos = line.pos, color = (1, 0, 0))
37

 

效果如图:

Eline

0

目前有 1 条留言    访客:1 条, 博主:0 条

  1. Triflame 2016年04月20日 下午9:02  @回复  Δ-49楼 回复
    Google Chrome Google Chrome Windows Windows

    你好,不知道curve,sphere这些函数是哪个包里的呢?具体参数是什么意思?能详细给程序写一下注释吗?谢谢!

给我留言

留言无头像?


×