2011-04-06 3 views
2

나는 파이썬으로 게임을 만들고있다. (파이썬을 그 과정에서 가르치고있다.) 그리고 나는 진자 함수를 추가하려하고있다. 그러나 진자를 만들기 전에 진자 함수 나 프로그래밍 된 코드를 프로그래밍하지 않았다. . 그래서 너희들이 나를 도와 줄 수 있기를 바래. 파이썬에서 진자 함수를 정확히 만드는 방법은 무엇입니까?어떻게 파이썬에서 진자 효과를 프로그래밍 할 수 있습니까?

+0

당신이 더 정확하게 조금 원하는 것을 설명 할 수 있습니까? 규칙적으로 앞뒤로 움직이는 것을 원하십니까? 아니면 다른 물체와 상호 작용하기를 원하십니까? –

+0

내가 원하는 것은 플레이어의 기세와 중력에 영향을받는 마찰을 가진 진자입니다. – IronGiraffe

+0

예를 들어 진자가 그 낮은 안정 지점 주변의 낮은 각도로 뒤집혀 있거나 머무를 수있는 경우와 같이 실제 상황에 얼마나 가까운 지에 따라 약간 다릅니다. 아마도 http://scienceworld.wolfram.com/physics/Pendulum.html과 같은 것을 읽으면 약간 도움이 될 것입니다. – schlenk

답변

1

진자 함수를 만들려고한다고해서 알고리즘이 필요하다고 가정합니다. 약간의 검색 후, 난 당신을 위해 작동 할 수 있습니다 뭔가를 발견

#!/usr/bin/env python 

def pendulum(T, n, theta0, v0, alpha): 
    """Return the motion (theta, v, t) of a pendulum.""" 
    dt = T/float(n) 
    t = linspace(0, T, n+1) 
    v = zeros(n+1) 
    theta = zeros(n+1) 
    v[0] = v0 
    theta[0] = theta0 
    for k in range(n): 
     theta[k+1] = theta[k] + dt*v[k] 
     v[k+1] = v[k] - alpha*dt*sin(theta[k+1]) 
    return theta, v, t 

from scitools.std import * 
try: 
    n = int(sys.argv[1]) 
    T = eval(sys.argv[2]) 
    v0 = eval(sys.argv[3]) 
    theta0 = eval(sys.argv[4]) 
    alpha = eval(sys.argv[5]) 
except: 
    print "usage:", sys.argv[0], "n T v0 theta0 alpha" 
    sys.exit(1) 

theta, v, t = pendulum(T, n, theta0, v0) 
plot(t, v, xlabel='t', ylabel='velocity') 
figure() 
plot(t, theta, xlabel='t', ylabel='velocity') 

소스 : vefur.simula.no/intro-programming/src/ode/pendulum.py

관련 문제