Общее уравнене равноускоренного движения: $x = x_0 + v_0 t + \frac{a t^2}{2}$. Свободное падение Паучка, прыгнувшего под углом $\alpha$ к горизонту со скоростью $v_0$. $$ v_x = v_0 \cos(\alpha) = const \\ v_y = v_0 \sin(\alpha) - g t \\ x = v_0 \cos(\alpha) t \\ y = v_0 \sin(\alpha) t - \frac{g t^2}{2} $$ Выразим $t$ из первого уравнения: $$t = \frac{x}{v_0 \cos(\alpha)}$$ и подставим во второе: $$y=\frac{v_0 x \sin(\alpha)}{v_0 \cos(\alpha)} - \frac{g x^2}{2 v_0^2 \cos^2(\alpha)}$$ Упростим: $$y = \text{tg}(\alpha) x - \frac{g}{2 v_0^2 \cos^2(\alpha)} x^2$$ Время в полёте определим из уравнения $$ y=0 \\ v_0 \sin(\alpha) t - \frac{g t^2}{2} = 0 \\ t_1 = 0 \\ t_2 = \frac{2 v_0 \sin(\alpha)}{g} $$ $t_1$ соответствует началу полёта, поэтому $T_L = \frac{2 v_0 \sin(\alpha)}{g}$. Поэтому, Паучок упадёт на землю в точке $x = v_0 \cos(\alpha) T_L = \frac{2 v_0^2 \sin(\alpha) \cos(\alpha)}{g} = \frac{v_0^2}{g}\sin(2 \alpha)$ Самая высокая точка полёта достигается когда $v_y=0$, т.е. через $T_H = \frac{v_0 \sin(\alpha)}{g}$ на высоте $y=\frac{v_0^2 \sin^2(\alpha)}{2 g}$.
The focal length of a parabola is $f=\frac{1}{4 a}$ as per http://en.wikipedia.org/wiki/Parabola#Focal_length. Also, as per http://en.wikipedia.org/wiki/Parabola#Coordinates_of_the_focus the focus is located at $(-\frac{b}{2 a},\frac{1-D}{4 a})$ where $D=b^2-4 a c$. This evaluates to $(\frac{v_0^{2}}{2 g} \sin(2 \alpha), -\frac{v_0^2}{2 g} \cos(2 \alpha))$.
Знали ли вы, что каждый раз сбивая птичку из пушки, вы вызываете кольцо тьмы из небытия? (график с фокусами парабол)
И это не говоря уже про яйцо Кащея... (график эллипаса веришн парабол)
--> Про нимб над кругами ада
Обзор метода
Излагаемые ниже выкладки будут идти в 2 этапа. Сначала операции над числами и многочленами выполняются без (умных) упрощений, чтобы увидеть картинку вживую как можно быстрее. А потом, сформулировав гипотезу на основе того, что показывает симуляция, будут сделаны соответсвтующие преобразования, чтобы её доказать.
Как будет показано ниже, практически во всех примерах в данной статье можно применить те или иные упрощения и тригонометрические операции, которые позволяют придти к тем же выводам, что и рассматриваемый здесь интерактивный графический метод, но в символьном виде. Однако, 1) во многих реальных "опытах" уравнения намного сложнее и не вседа приводятся к простому виду, который можно прочесть и увидеть/осознать происходящее с листа, 2) в случаях, когда человек сталкивается впервые с предметной областью (будь то в школе, институте, на работе или ещё как) довольно сложно бывает догадаться в "какую сторону" упрощать, ну и в-третьих, как дополнение к 1му пункту, весь смысл излагаемого в данной статье подхода заключается в том, чтобы не заниматься симулиррованием природы в своей голове, а научить компьтер делать это за нас (перефразируя Брета про симулирование компьютера в голове).
Далее ход мысли приблизительно следующий. Либо у нас есть конкретная ситуация из жизни, которую мы хотим исследоввать, например как сбить наибольшее количество птичек одним выстрелом из пушки. Либо же пробуем подойти к этому творчески задавая себе приблизительно следующие вопросы:
И, о чудо, мы находим сразу несколько таких свойств: вершина параболы, её фокус и директрисса (не та, о которой вы подумали). Есть ещё масса других особенностей, за которыми читатель отсылается к рекомендуемой литературе. Нам же хватит этих трёх, чтобы показать как применять обсуждаемый метод на практике.
Такс, один кузнек у нас есть. Добавим интриги и запустим целую стаю кузнечиков. Много может получить либо от варьирования угла либо от варьирования скрорости. Варьирование ускорением и игру с варьированием комбинацией этих параметров по замысловатому пути в многомерном пространстве оставляем читателю в качестве домашнего упражнения (если выйдет красивый график, то обязательно напишите статью об этом). Давайте начнём с варьирования скорости при заданном угле. Затем перейдём к играм с углом.
%matplotlib inline
from IPython.html.widgets import interact, interactive
from IPython.display import clear_output, display, HTML
import numpy as np
from itertools import count, takewhile
from matplotlib import pyplot as plt
from matplotlib.colors import cnames
from matplotlib import animation
plt.rcParams['axes.color_cycle']=['k']
plt.rcParams['figure.figsize']= (18.0, 12.0)
g = 9.81
v0_max = 10.0
y_max = v0_max ** 2 / (2 * g)
x_max = v0_max ** 2 / g
def init_plt():
ax = plt.gca()
ax.set_aspect('equal')
ax.set_xlim(-x_max - 0.1, x_max + 0.1)
ax.set_ylim(0, y_max + 0.1)
plt.xlabel('x (m)')
plt.ylabel('y (m)')
plt.grid(True)
def free_fall_coords(v0, alpha):
alpha = np.deg2rad(alpha)
T_L = 2 * v0 * np.sin(alpha) / g
t = np.linspace(0.0, T_L, 30)
x = v0 * np.cos(alpha) * t
y = v0 * np.sin(alpha) * t - g * t * t / 2
return x, y
def free_fall(v0 = 7.0, alpha = 60):
x, y = free_fall_coords(v0, alpha)
init_plt()
plt.plot(x, y)
free_fall(10)
w = interactive(free_fall, v0=(0.,v0_max,v0_max/10), alpha=(0,180,5))
display(w)
def vertex_coords(v0, alpha):
y_max = v0 ** 2 * np.sin(alpha) ** 2 / (2*g)
x_max = v0 ** 2 * np.sin(2 * alpha) / (2*g)
return x_max, y_max
def free_fall_fan(v0 = 7.0):
init_plt()
for alpha in range(0, 180, 5):
x, y = free_fall_coords(v0, alpha)
plt.plot(x, y, lw=0.3)
alpha = np.linspace(0, np.pi, 180/5, endpoint=False)
x_max, y_max = vertex_coords(v0, alpha)
plt.plot(x_max, y_max, 'cp')
free_fall_fan(10)
w = interactive(free_fall_fan, v0=(0.,v0_max,v0_max/10))
display(w)
def free_fall_wedge(alpha = 60):
init_plt()
v0 = np.linspace(0.0, 10.0, 10.0/0.5 + 1)
for v in v0:
x, y = free_fall_coords(v, alpha)
plt.plot(x, y, lw=0.3)
x_max, y_max = vertex_coords(v0, np.deg2rad(alpha))
plt.plot(x_max, y_max, 'cp')
free_fall_wedge()
w = interactive(free_fall_wedge, alpha=(0,180,5))
display(w)
def free_fall_coords2(v0, alpha, y_ground):
T_land = max(takewhile(lambda t: v0 * np.sin(alpha) * t - g*t*t / 2 >= y_ground,
count(0, 0.05)))
t = np.linspace(0.0, T_land, 30)
x = v0 * np.cos(alpha) * t
y = v0 * np.sin(alpha) * t - g * t * t / 2
return x, y
def focus_coords(v0, alpha):
x = v0 ** 2 * np.sin(2 * alpha) / (2*g)
y = -v0 ** 2 * np.cos(2 * alpha) / (2*g)
return x, y
def directrix_coords(v0, alpha):
x = v0 ** 2 * np.sin(2 * alpha) / (2*g)
y = v0 ** 2 / (2*g) - 0*alpha
return x, y
def focus_pocus(v0 = 7.0):
init_plt()
ax = plt.gca()
ax.set_ylim(-(y_max + 0.3), y_max + 0.3)
alpha = np.linspace(0, np.pi, 180/5, endpoint=False)
for a in alpha:
x, y = free_fall_coords2(v0, a, -5)
plt.plot(x, y, lw=0.3)
x, y = focus_coords(v0, alpha)
plt.plot(x, y, 'cp')
x, y = directrix_coords(v0, alpha)
plt.plot(x, y, 'rx')
focus_pocus(10)
нимб не исчезает при изменении начальной скорости. Предлагаю подумать на досуге почему происходит. В этой статье описывается один из способов, с помощью которого можно "увидеть" что происходит за сухими и абстрактными математическими формулами, которыми обычно описывается физический мир. В частности, как можно увидеть вещи, которые в физическом мире нет, но которые тем не менее позволяют глубже понять наблюдаемое явление или процесс.
Читателю предлагается найти этому физическое объяснение; нечто похожее на "возьмём бесконечно количество параболических антенн, фокусирующих свет далёких звёзд, и расположим их..."
Ну и напоследок проследим как ведут себя кузнечики выпрыгнувшие в разные стороны из одного дупла. И мы снова видим...
def free_fall_coords3(v0, alpha, T):
t = np.arange(0, T+0.05, 0.05)
x = v0 * np.cos(alpha) * t
y = v0 * np.sin(alpha) * t - g * t * t / 2
return x, y
def free_fall_star(v0 = 3.0, t = 3.0):
init_plt()
ax = plt.gca()
ax.set_ylim(-6, 0.7)
ax.set_xlim(-3, 3)
alpha = np.linspace(0, 2*np.pi, 360/5, endpoint=False)
u = []
v = []
for a in alpha:
x, y = free_fall_coords3(v0, a, t)
u.append(x[-1])
v.append(y[-1])
plt.plot(x, y, lw=0.3)
plt.plot(u, v, 'cp')
free_fall_star(3.0, 0.7)
Снова круг! Нумерологи нервно курят бамбук в сторонке ;-)
w = interactive(free_fall_star, v0=(2.0,4.0,0.5), t=(0.,1.0,0.1))
display(w)
y[-1]
30.0
np.append(a, [1,2,3])
array([ 1., 2., 3.])
%%latex
$\frac{v_{0}}{g} \sin(\alpha)$