Talaksan:Inclinedthrow.gif

Mula testwiki
Pumunta sa nabigasyon Pumunta sa paghahanap
Inclinedthrow.gif (400 × 288 na pixel, laki: 374 KB, uri ng MIME: image/gif, nasilo na, 102 banhay, 10 segundo)

Mula sa Wikimedia Commons ang talaksang ito at posibleng magamit sa ibang proyekto. Makikita sa baba ang paglalarawan sa pahina ng paglalarawan nito roon.

Buod

Paglalarawan
English: Trajectories of three objects thrown at the same angle (70°). The black object doesn't experience any form of drag and moves along a parabola. The blue object experiences Stokes' drag, and the green object Newton drag.
Petsa
Pinagmulan Sariling gawa
May-akda AllenMcC.
Iba pang mga bersyon Inclinedthrow2.gif
GIF genesis
InfoField
 This plot was created with Matplotlib.
Source code
InfoField

Python code

#!/usr/bin/python3
# -*- coding: utf8 -*-

import os
import inspect
from math import *
import numpy as np
from scipy.integrate import odeint
from scipy.optimize import newton
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib import animation

# settings
mpl.rcParams['path.snap'] = False
fname = 'inclinedthrow'
size = 400, 288
l, w, b, h = 22.5/size[0], 1-23/size[0], 22.5/size[1], 1-23/size[1]
nframes = 102
delay = 8
lw = 1.
ms = 6
c1, c2, c3 = "#000000", "#0000ff", "#007100"

def projectile_motion(g, mu, pot, xy0, vxy0, tt):
    # use a four-dimensional vector function vec = [x, y, vx, vy]
    def dif(vec, t):
        # time derivative of the whole vector vec
        v = hypot(vec[2], vec[3])
        vxrel, vyrel = vec[2] / v, vec[3] / v
        return [vec[2], vec[3], -mu * v**pot * vxrel, -g - mu * v**pot * vyrel]

    # solve the differential equation numerically
    vec = odeint(dif, [xy0[0], xy0[1], vxy0[0], vxy0[1]], tt)
    return vec[:, 0], vec[:, 1], vec[:, 2], vec[:, 3]  # return x, y, vx, vy

g = 1.
theta  = radians(70)
v0 = sqrt(g/sin(2*theta))
vinf = 2.1
# use identical terminal velocity vinf for both types of friction
mu_stokes = g / vinf**1
mu_newton = g / vinf**2
x0, y0 = 0.0, 0.0
vx0, vy0 = v0 * cos(theta), v0 * sin(theta)

T = newton(lambda t: projectile_motion(g, 0, 0, (x0, y0), (vx0, vy0), [0, t])[1][1], 2*vy0/g)
nsub = 10
tt = np.linspace(0, T * nframes / (nframes - 1), (nframes - 1) * nsub + 1)

traj_free = projectile_motion(g, 0, 0, (x0, y0), (vx0, vy0), tt)
traj_stokes = projectile_motion(g, mu_stokes, 1, (x0, y0), (vx0, vy0), tt)
traj_newton = projectile_motion(g, mu_newton, 2, (x0, y0), (vx0, vy0), tt)

def animate(nframe, saveframes=False):
    print(nframe, '/', nframes)
    t = T * float(nframe) / nframes
    
    plt.clf()
    fig.gca().set_position((l, b, w, h))
    fig.gca().set_aspect("equal")
    plt.xlim(0, 1)
    plt.ylim(0, (h*size[1]) / (w*size[0]))
    plt.xticks([]), plt.yticks([])
    plt.xlabel('Distance', size=12)
    plt.ylabel('Height', size=12)
    
    plt.plot(traj_free[0][:nframe*nsub+1], traj_free[1][:nframe*nsub+1],
        '-', lw=lw, color=c1)
    plt.plot(traj_free[0][nframe*nsub], traj_free[1][nframe*nsub],
        'ok', color=c1, markersize=ms, markeredgewidth=0)
    
    plt.plot(traj_stokes[0][:nframe*nsub+1], traj_stokes[1][:nframe*nsub+1],
        '-', lw=lw, color=c2)
    plt.plot(traj_stokes[0][nframe*nsub], traj_stokes[1][nframe*nsub],
        'ok', color=c2, markersize=ms, markeredgewidth=0)
    
    plt.plot(traj_newton[0][:nframe*nsub+1], traj_newton[1][:nframe*nsub+1],
        '-', lw=lw, color=c3)
    plt.plot(traj_newton[0][nframe*nsub], traj_newton[1][nframe*nsub],
        'ok', color=c3, markersize=ms, markeredgewidth=0)
    
    if saveframes:
        # export frame
        dig = int(ceil(log10(nframes)))
        fsavename = ('frame{:0' + str(dig) + '}.svg').format(nframe)
        fig.savefig(fsavename)
        with open(fsavename) as f: content = f.read()
        content = content.replace('pt"', 'px"').replace('pt"', 'px"')
        with open(fsavename, 'w') as f: f.write(content)

fig = plt.figure(figsize=(size[0]/72., size[1]/72.))

os.chdir(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))))
for i in range(nframes):
    animate(i, True)
os.system('convert -loop 0 -delay ' + str(delay) + ' frame*.svg +dither ' + fname + '.gif')
# keep last frame for two seconds
os.system('gifsicle -k32 --color-method blend-diversity -b ' + fname + '.gif -d' + str(delay) + ' "#0-' + str(nframes-2) + '" -d200 "#' + str(nframes-1) + '"')
for i in os.listdir('.'):
    if i.startswith('frame') and i.endswith('.svg'):
        os.remove(i)

Lisensiya

Ako, na may karapatang-ari ng akdang ito, ang naglalathala nito alinsunod sa ilalim ng sumusunod na mga lisensya:
w:tl:Creative Commons
atribusyon share alike
Lisensyado ang file na ito sa ilalim ng lisensiyang Creative Commons Attribution-Share Alike 3.0 Unported.
Malaya kang:
  • para ibahagi – para kopyahin, ipamahagi, at i-transmit ang akda
  • para i-remix – para i-adapt ang akda
Sa ilalim ng mga kondisyong ito:
  • atribusyon – Dapat magbigay ka ng isang maayos na pag-credit, ibigay ang link sa lisensiya, at tukuyin kung may mga pagbabagong ginawa. Magagawa mo ito sa isang risonableng paraan, pero hindi sa paraan na para bang ineendorso ka ng naglilisensiya sa'yo o sa paggamit mo nito.
  • share alike – Kung mag-remix ka, magbabago, o bumuo sa materyal, dapat mong ipamahagi ang iyong mga kontribusyon sa ilalim ng pareho o katugmang lisensya bilang orihinal.

Captions

Add a one-line explanation of what this file represents

Items portrayed in this file

depicts English

copyrighted English

15 Disyembre 2008

Nakaraan ng file

Pindutin ang isang petsa/oras para makita ang file noong puntong yon.

Petsa/OrasThumbnailSukatTagagamitKomento
ngayon17:10, 21 Oktubre 2020Thumbnail para sa bersiyon noong 17:10, 21 Oktubre 2020400 × 288 (374 KB)wikimediacommons>Geek3adjusted friction coefficients such to make terminal velocity of both trajectories equal. In this case, the Newton projectile moves further.

Ginagamit ng sumusunod na pahina ang file na ito: