Web VPython 구현 프로그램 예제 30개

물리 · 화학 · 생물 · 지구과학 · 천문학 · 수학 — 분야별 5개

사용 방법

각 예제는 현재 사용하시는 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)