python3d物理引擎_如何优化⼀个⾮常简单的Python-tkinter粒
⼦“物理引擎”?
我希望⽤python3.x、Numpy和Tkinter从头开始创建⼀个简单但优化良好的粒⼦系统来显⽰它,允许模拟最⼤数量的相同粒⼦。
我的密码。
import numpy as np
import tkinter as tk
import random as rm
class particle:
大国风范def __init__(lf, p, v, a=np.array([0,10]), colour="blue"):
lf.shape = ate_oval(p[0]-2, p[1]-2, p[0]+2, p[1]+2, fill = colour)
lf.p = np.array([float(i) for i in p]) #position
尽头赵方婧
lf.v =np.array([float(i) for i in v]) #velocity
lf.oldv = np.copy(v)
他乡遇故知什么意思>政协履职报告lf.a = np.array([float(i) for i in a]) # accelleration
def update(lf, delay):
lf.v += lf.a*delay
lf.p += (lf.v*delay)
if not 0
lf.v *= np.array([-1,1])
if not 0
lf.v *= np.array([1,-1])
def collide(lf, other):
x = lf.p-other.p
mag = np.sqrt(x.dot(x)) # checks distance
if 0
lf.oldv = np.copy(lf.v)
x /= mag
inline = x*x.dot(lf.v)
inlineo = x*x.dot(other.oldv)
lf.v -= inline - inlineo指南针的历史
#---------------------------------------------------------------------------------
def main():
[i.update(Time_per_frame) for i in particles]
[[j.collide(i) for i in particles] for j in particles]
canvas.after(int(Time_per_frame*1000),main)
#---------------------------------------------------------------------------------
#creates the window
root = tk.Tk()
root.title("Ball Bouncer")
canvas = tk.Canvas(root, width = 800, height = 400)
canvas.pack()
#---------------------------------------------------------------------------------
#t variables
Time_per_frame = 0.02
NoParticles = 100
particles = [particle([rm.randint(100,700),rm.randint(100,300)], [rm.randint(-100,100),rm.randint(-100,100)],[0,0]) for i in range(100)]
#particles = [particle([50,53],[50,0],[0,0]),particle([150,50],[-50,0],[0,0])]
#---------------------------------------------------------------------------------
main()无什么有什么成语
root.mainloop()
表面的英文知人善用
我的代码是能够顺利运⾏约100个粒⼦,这⽐我预期的要少。有没有什么明显的东西让我的代码变慢了。
我的编码经验是⾮常有限的,主要是⾃学,所以请告诉我,我犯下的任何编码错误。这段代码主要是我⾃⼰的⼀个学习练习,因为我知道他们是现有的⼯具。
提前谢谢你。