사용 방법
각 예제는 현재 사용하시는 Web VPython 환경에 맞게 첫 줄을 Web VPython 3.2로 구성했습니다. 예제 코드를 통째로 복사해 실행하면 됩니다.
총 30개: 물리 5 + 화학 5 + 생물 5 + 지구과학 5 + 천문학 5 + 수학 5
물리 분야
01
등속 원운동
각속도에 따라 원을 도는 입자의 운동
Web VPython 3.2
scene.background = color.white
scene.range = 6
ball = sphere(pos=vector(4,0,0), radius=0.35, color=color.red, make_trail=True)
omega = 1.2
t = 0
dt = 0.01
while True:
rate(100)
t += dt
ball.pos = vector(4*cos(omega*t), 4*sin(omega*t), 0)
02
포물선 운동
중력장에서의 포물선 운동
Web VPython 3.2
scene.background = color.white
scene.range = 12
ball = sphere(pos=vector(-8,0,0), radius=0.4, color=color.blue, make_trail=True)
v = vector(8,11,0)
g = vector(0,-9.8,0)
dt = 0.01
while ball.pos.y >= 0:
rate(100)
v = v + g*dt
ball.pos = ball.pos + v*dt
03
용수철 진동
훅의 법칙에 따른 단순 조화 운동
Web VPython 3.2
scene.background = color.white
scene.range = 6
mass = box(pos=vector(1,0,0), size=vector(1,1,1), color=color.orange)
k = 2
m = 1
x = 1
v = 0
dt = 0.01
while True:
rate(100)
a = (-k*x)/m
v += a*dt
x += v*dt
mass.pos.x = x
04
두 물체의 중력 상호작용
뉴턴의 만유인력 법칙 시뮬레이션
Web VPython 3.2
scene.background = color.black
scene.range = 8
m1, m2, G = 5, 1, 1
a = sphere(pos=vector(-2,0,0), radius=0.5, color=color.yellow, make_trail=True)
b = sphere(pos=vector(2,0,0), radius=0.3, color=color.cyan, make_trail=True)
v1 = vector(0,-0.3,0)
v2 = vector(0,1.5,0)
dt = 0.002
while True:
rate(300)
r = b.pos-a.pos
F = G*m1*m2*norm(r)/(mag(r)**2)
v1 += F/m1*dt
v2 -= F/m2*dt
a.pos += v1*dt
b.pos += v2*dt
05
전기장 벡터
점전하 주위의 전기장 방향과 세기
Web VPython 3.2
scene.background = color.white
scene.range = 6
sphere(pos=vector(0,0,0), radius=0.4, color=color.red)
for x in range(-4,5):
for y in range(-4,5):
if x == 0 and y == 0:
continue
p = vector(x,y,0)
E = norm(p)/(mag(p)**2)
arrow(pos=p, axis=0.8*E, color=color.blue, shaftwidth=0.05)
화학 분야
06
물 분자 구조
H₂O의 굽은 분자 구조
Web VPython 3.2
scene.background = color.white
scene.range = 3
O = sphere(pos=vector(0,0,0), radius=0.6, color=color.red)
H1 = sphere(pos=vector(1.2,0.8,0), radius=0.35, color=color.white)
H2 = sphere(pos=vector(-1.2,0.8,0), radius=0.35, color=color.white)
cylinder(pos=O.pos, axis=H1.pos-O.pos, radius=0.12, color=color.gray(0.6))
cylinder(pos=O.pos, axis=H2.pos-O.pos, radius=0.12, color=color.gray(0.6))
07
메테인 분자
정사면체 구조의 CH₄ 분자
Web VPython 3.2
scene.background = color.white
scene.range = 3
C = sphere(pos=vector(0,0,0), radius=0.5, color=color.black)
pts=[vector(1,1,1),vector(1,-1,-1),vector(-1,1,-1),vector(-1,-1,1)]
for p in pts:
sphere(pos=p, radius=0.3, color=color.white)
cylinder(pos=C.pos, axis=p-C.pos, radius=0.1, color=color.gray(0.5))
08
결정 격자
3차원 결정 격자
Web VPython 3.2
scene.background = color.white
scene.range = 5
for x in range(-2,3):
for y in range(-2,3):
for z in range(-2,3):
c = color.blue if (x+y+z)%2==0 else color.green
sphere(pos=vector(x,y,z), radius=0.13, color=c)
09
분자 열운동
기체 분자의 열운동
Web VPython 3.2
scene.background = color.black
scene.range = 5
particles=[]
for i in range(25):
p=sphere(pos=vector.random()*3, radius=0.15, color=color.cyan)
p.v=vector.random()
particles.append(p)
dt=0.02
while True:
rate(80)
for p in particles:
p.pos += p.v*dt
if abs(p.pos.x)>4: p.v.x=-p.v.x
if abs(p.pos.y)>4: p.v.y=-p.v.y
if abs(p.pos.z)>4: p.v.z=-p.v.z
10
간단한 원자 모형
원자핵과 전자 궤도의 단순 모형
Web VPython 3.2
scene.background = color.black
scene.range = 5
sphere(pos=vector(0,0,0), radius=0.6, color=color.red)
ring(pos=vector(0,0,0), axis=vector(0,0,1), radius=2.5, thickness=0.03, color=color.gray(0.6))
sphere(pos=vector(2.5,0,0), radius=0.18, color=color.cyan)
생물 분야
11
DNA 이중 나선
DNA 이중 나선
Web VPython 3.2
scene.background = color.white
scene.range = 7
for i in range(120):
t=0.18*i
p1=vector(2*cos(t),2*sin(t),0.08*i-5)
p2=vector(2*cos(t+pi),2*sin(t+pi),0.08*i-5)
sphere(pos=p1,radius=0.12,color=color.red)
sphere(pos=p2,radius=0.12,color=color.blue)
if i%5==0:
cylinder(pos=p1,axis=p2-p1,radius=0.04,color=color.green)
12
뉴런 구조
세포체·수상돌기·축삭의 단순 모델
Web VPython 3.2
scene.background = color.white
scene.range = 6
cell=sphere(pos=vector(0,0,0),radius=0.8,color=color.orange)
for i in range(12):
a=2*pi*i/12
cylinder(pos=cell.pos,axis=vector(2*cos(a),2*sin(a),0),radius=0.08,color=color.yellow)
cylinder(pos=cell.pos,axis=vector(5,0,0),radius=0.12,color=color.blue)
13
적혈구 모형
중앙이 오목한 적혈구 형태
Web VPython 3.2
scene.background = color.white
scene.range = 4
for i in range(35):
r=2.2*i/34
z=0.45*(1-(r/2.2)**2)-0.35*exp(-2*r*r)
ring(pos=vector(0,0,z),axis=vector(0,0,1),radius=r,thickness=0.06,color=color.red)
14
식물 잎의 나선 배열
황금각에 따른 잎 배열
Web VPython 3.2
scene.background = color.white
scene.range = 7
cylinder(pos=vector(0,-5,0),axis=vector(0,10,0),radius=0.15,color=color.green)
golden=137.5*pi/180
for i in range(35):
y=-4.5+i*0.27
a=i*golden
sphere(pos=vector(1.2*cos(a),y,1.2*sin(a)),radius=0.22,color=color.green)
15
심장 박동 모형
주기적 크기 변화로 표현한 박동
Web VPython 3.2
scene.background = color.white
scene.range = 4
heart=sphere(pos=vector(0,0,0),radius=1.3,color=color.red)
t=0
dt=0.02
while True:
rate(60)
t+=dt
heart.radius=1.3+0.15*sin(2*pi*t)
지구과학 분야
16
지구 자전
지구의 자전
Web VPython 3.2
scene.background = color.black
scene.range = 5
earth=sphere(pos=vector(0,0,0),radius=2,color=color.blue)
while True:
rate(60)
earth.rotate(angle=0.02,axis=vector(0,1,0))
17
지구 내부 층
지각·맨틀·외핵·내핵
Web VPython 3.2
scene.background = color.white
scene.range = 5
sphere(pos=vector(0,0,0),radius=3,color=color.blue,opacity=0.15)
sphere(pos=vector(0,0,0),radius=2.2,color=color.orange,opacity=0.25)
sphere(pos=vector(0,0,0),radius=1.3,color=color.yellow,opacity=0.4)
sphere(pos=vector(0,0,0),radius=0.6,color=color.red)
18
판 경계와 맨틀 상승
발산형 판 경계
Web VPython 3.2
scene.background = color.white
scene.range = 7
box(pos=vector(-3,1,0),size=vector(5,0.5,5),color=color.gray(0.5))
box(pos=vector(3,1,0),size=vector(5,0.5,5),color=color.gray(0.5))
for i in range(12):
arrow(pos=vector(0,-4+i*0.5,0),axis=vector(0,0.35,0),color=color.red,shaftwidth=0.12)
19
파동 전파
지진파의 기본 파동 모델
Web VPython 3.2
scene.background = color.white
scene.range = 8
balls=[]
for i in range(41):
balls.append(sphere(pos=vector(-6+i*0.3,0,0),radius=0.08,color=color.blue))
t=0
while True:
rate(60)
t+=0.04
for i in range(41):
x=-6+i*0.3
balls[i].pos.y=sin(2*x-3*t)
20
대기 층 구조
여러 대기층의 동심 구 표현
Web VPython 3.2
scene.background = color.black
scene.range = 8
sphere(pos=vector(0,0,0),radius=2,color=color.blue)
for r,c,o in [(2.4,color.cyan,0.15),(3.0,color.green,0.10),(3.8,color.yellow,0.08),(4.8,color.red,0.05)]:
sphere(pos=vector(0,0,0),radius=r,color=c,opacity=o)
천문학 분야
21
태양-지구 공전
태양 주위를 도는 지구
Web VPython 3.2
scene.background = color.black
scene.range = 8
sphere(pos=vector(0,0,0),radius=1,color=color.yellow)
earth=sphere(pos=vector(5,0,0),radius=0.35,color=color.blue,make_trail=True)
t=0
while True:
rate(60)
t+=0.02
earth.pos=vector(5*cos(t),0,5*sin(t))
22
태양-지구-달
지구 공전과 달의 공전
Web VPython 3.2
scene.background = color.black
scene.range = 10
sphere(pos=vector(0,0,0),radius=1,color=color.yellow)
earth=sphere(radius=0.4,color=color.blue)
moon=sphere(radius=0.15,color=color.white)
t=0
while True:
rate(60)
t+=0.02
earth.pos=vector(6*cos(t),0,6*sin(t))
moon.pos=earth.pos+vector(1.2*cos(6*t),0,1.2*sin(6*t))
23
쌍성계
공통 질량중심을 도는 쌍성
Web VPython 3.2
scene.background = color.black
scene.range = 6
a=sphere(radius=0.5,color=color.orange,make_trail=True)
b=sphere(radius=0.4,color=color.cyan,make_trail=True)
t=0
while True:
rate(60)
t+=0.02
a.pos=vector(2*cos(t),2*sin(t),0)
b.pos=vector(-3*cos(t),-3*sin(t),0)
24
토성 고리
토성과 여러 겹의 고리
Web VPython 3.2
scene.background = color.black
scene.range = 6
sphere(pos=vector(0,0,0),radius=1.5,color=color.orange)
for r in [2.0,2.2,2.4,2.6]:
ring(pos=vector(0,0,0),axis=vector(0,1,0),radius=r,thickness=0.08,color=color.gray(0.8))
25
나선 은하
은하의 나선팔 구조
Web VPython 3.2
scene.background = color.black
scene.range = 10
for arm in range(3):
offset=2*pi*arm/3
for i in range(120):
t=0.08*i
r=0.45*t
p=vector(r*cos(t+offset),0.08*(i%3),r*sin(t+offset))
sphere(pos=p,radius=0.08,color=color.white)
수학 분야
26
3차원 나선 곡선
매개변수 나선 곡선
Web VPython 3.2
scene.background = color.white
scene.range = 6
pts=[]
for i in range(200):
t=0.1*i
pts.append(vector(3*cos(t),3*sin(t),0.05*i-5))
curve(pos=pts,color=color.red,radius=0.04)
27
리사주 곡선
3차원 리사주 곡선
Web VPython 3.2
scene.background = color.white
scene.range = 5
pts=[]
for i in range(400):
t=2*pi*i/400
pts.append(vector(3*sin(2*t),3*sin(3*t),2*sin(4*t)))
curve(pos=pts,color=color.blue,radius=0.03)
28
뫼비우스 띠
뫼비우스 띠의 점 근사
Web VPython 3.2
scene.background = color.white
scene.range = 5
for i in range(100):
u=2*pi*i/100
for j in range(-8,9):
v=j*0.08
x=(2+v*cos(u/2))*cos(u)
y=(2+v*cos(u/2))*sin(u)
z=v*sin(u/2)
sphere(pos=vector(x,y,z),radius=0.045,color=color.green)
29
토러스
대표적인 회전체 토러스
Web VPython 3.2
scene.background = color.white
scene.range = 5
ring(pos=vector(0,0,0),axis=vector(0,1,0),radius=2.5,thickness=0.8,color=color.cyan)
30
쌍곡포물면
안장형 곡면 z=a(x²-y²)
Web VPython 3.2
scene.background = color.white
scene.range = 5
for i in range(-15,16):
for j in range(-15,16):
x=i*0.2
y=j*0.2
z=0.25*(x*x-y*y)
sphere(pos=vector(x,y,z),radius=0.045,color=color.orange)