matplotlib.animation 万有引力
生活随笔
收集整理的這篇文章主要介紹了
matplotlib.animation 万有引力
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from scipy import constants as const
'''
萬有引力公式
F = G*m1*m2/r^2
兩球質量固定,r可以用橫縱坐標計算
兩球移動的加速度a = F/m
移動速度等于 v = v + at
分解為x軸,y軸速度
'''fig,ax = plt.subplots()
dot1, = ax.plot([], [], 'ro')
dot2, = ax.plot([], [], 'bo')
m1 = 10
m2 = 20
G = const.G
print(G)
#兩小球最初的位置
x_data = [5,60]
y_data = [5,50]
v1_x = v1_y = 0
v2_x = v2_y = 0
def init():# 設置橫縱軸范圍ax.set_xlim(0, 100)ax.set_ylim(0, 60)# 移位置 設為原點相交ax.xaxis.set_ticks_position('bottom') # 設置為底部ax.spines['bottom'].set_position(('data', 0)) # 獲取底部軸設置其位置,表示設置底部軸移動到豎軸的0坐標位置ax.yaxis.set_ticks_position('left')ax.spines['left'].set_position(('data', 0))return ax # 畫軌跡的話,將它改為ldef get_location():global v1_x,v1_y,v2_x,v2_y#每秒更新一次所以t為1while(x_data[0] <= x_data[1]): #沒重合的時候r = ((x_data[1] - x_data[0]) ** 2 + (y_data[1] - y_data[0]) ** 2) ** 0.5F = G * m1 * m2 / r / ra1 = F / m1a2 = F / m2#計算加速度在x,y軸上的分解a1_x = a1 * (x_data[1] - x_data[0])/ra1_y = a1 * (y_data[1] - y_data[0])/ra2_x = a2 * (x_data[1] - x_data[0])/ra2_y = a2 * (y_data[1] - y_data[0])/r#計算新的位置v1_x += a1_xv1_y += a1_yv2_x += a2_xv2_y += a2_yx_data[0] = x_data[0] + v1_xx_data[1] = x_data[1] - v2_xy_data[0] = y_data[0] + v1_yy_data[1] = y_data[1] - v2_ynewDate = [x_data,y_data]print(newDate)yield newDatedef update(frame):dot1.set_data(frame[0][0],frame[1][0])dot2.set_data(frame[0][1],frame[1][1])return dot1,dot2ani = FuncAnimation(fig, update, frames=get_location, interval=1000, init_func=init)
ani.save('gravitation_dot.gif', writer='pillow', fps=30)
?可以看到橫縱坐標幾乎是不變的,嘗試把質量增大,也幾乎是不變的
好像沒什么卵用,直接給引力常量成個10的11次方加大點看著玩吧
可以發現質量小的球,也就是紅球,移動了更遠的距離。
?
總結
以上是生活随笔為你收集整理的matplotlib.animation 万有引力的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 靶机渗透日记 responder
- 下一篇: C++笔试面试宝典