85255 (589832), страница 4
Текст из файла (страница 4)
Предельная скорость растет в полете в зависимости от угла атаки }
uses ForJump3, Graph;
begin
for I:=1 to 25 do WriteLn;
H:=37.7; HN:=0.506; K:=86; BETA:=36; Alfa:=9.5;
Alfa:=-Alfa*PI/180; BETA:=-BETA*PI/180;
CalculateTramplin;
Scaling;
EnterJumpers;
DrawTramplin;
for I:=1 to N1 do Jump;
ReadLn;
CloseGraph;
end.
{ М о д у л ь д л я м о д е л и р о в а н и я
п р ы ж к а с т р а м п л и н а
Предельная скорость растет в полете в зависимости от угла атаки }
{$E+}{$N+}
unit ForJump3;
interface
uses Graph, Crt;
const dt: Extended=1E-3;
G=9.82;
WWW=-1;
TL=0.5; { время подготовки к приземлению}
QuestionColor:Word=LightBlue;
AnswerColor:Word=LightGreen;
TramplinColor:Word={Red}White;
TramplinDataColor:Word=Red;
JumpColor:Word=White;
JumpDataColor:Word=White;
Background:Word=Black;
var n1, i: byte;
S1, S2, S3, S4, S5, S6: string;
Scale, KLine, BLine, {масштаб рисунка и параметры горы приземления}
Length, VY, {дальность прыжка и скорость приземления}
K, H, N, HN, H1, YH, S, YO, ALFA, BETA: Extended; {трамплин}
VPr0, V0, Gamma: array[1..7] of Extended; {прыгуны}
procedure EnterBasicData;
{Ввод базовых параметров трамплина}
procedure CalculateTramplin;
{Вычисление остальных параметров трамплина}
procedure EnterJumpers;
{Ввод данных о прыгунах}
procedure Scaling;
{Вычисление масштабов}
procedure WriteTramplinData;
{Вывод данных о трамплине}
procedure DrawTramplin;
{Рисование трамплина}
procedure Jump;
{Прыжок}
implementation
procedure EnterBasicData;
{Ввод базовых параметров трамплина}
begin
ClrScr; TextColor(QuestionColor);
WriteLn(' Моделирование прыжка с трамплина');
WriteLn('Входные параметры:');
WriteLn(' Параметры трамплина:');
Write('H, H:N, K, beta, alfa=');
{H, гор. коорд. точки K, углы}
TextColor(AnswerColor); ReadLn(H,HN,K,BETA,ALFA);
TextColor(QuestionColor);
Alfa:=-Alfa*Pi/180; Beta:=-Beta*Pi/180;
end;
procedure CalculateTramplin;
{Вычисление остальных параметров трамплина}
var W: Extended;
begin
N:=H/HN; {она и в Африке N}
H1:=Abs((K-N)*Sin(BETA)/Cos(BETA));
{верт. коорд. точки P - начала участка приземления}
YH:=H+H1; {высота склона в месте отрыва}
W:=Sqrt(H*H+N*N); {удаление от канта отрыва до критической точки}
S:=0.03*W; {высота стола отрыва над склоном}
YO:=YH+S; {высота отрыва}
end;
procedure EnterJumpers;
{Ввод данных о прыгунах}
var I: Byte; Gamma1, VPr01, V01: Extended;
begin
N1:=7;
WriteLn(' Параметры прыгунов: предельная скорость');
WriteLn(' Вводятся ',N1,' графиков, хочешь меньше - задай Vпр=0');
Gamma1:=20;
VPr01:=70;
TextColor(QuestionColor); Write(' Vo=');
TextColor(AnswerColor); ReadLn(V01);
for I:=1 to N1 do begin
Gamma[I]:=Gamma1*Pi/180;
VPr0[I]:=VPr01;
V0[I]:=V01+0.2*(I-1);
end;
end;
procedure Scaling;
{Вычисление масштабов}
var MX, My: Extended;
begin
MX:=600/K; My:=400/YO; if MX Scale:=MX; KLine:=H1/(N-K); BLine:=-KLine*K; end; procedure WriteTramplinData; {Вывод данных о трамплине} begin SetColor(TramplinDataColor); Str(1/Scale:4:2,S6); Str(H:0:1,S1); Str(N:0:1,S2); Str(Alfa*180/Pi:0:1,S3); Str(Beta*180/Pi:0:1,S4); Str(K:0:1,S5); { S6:='Масштаб: '+S6+'м:1точка, Трамплин: H='+S1+ ', N='+S2+', alfa='+S3+', beta='+S4+', K='+S5; OutTextXY(0,401,S6);} end; procedure DrawTramplin; {Рисование трамплина} var GD, GM: Integer; S, S1, S2, S3, S4, S5: string; begin GD:=Detect; InitGraph(GD,GM,''); SetColor(TramplinColor); SetBkColor(Background); MoveTo(0,400-Round(Scale*YO)); LineTo(0,400-Round(Scale*YH)); {уступ} LineTo(Round(Scale*N),400-Round(Scale*H1)); {нерабочий участок} LineTo(Round(Scale*K),400); {участок для приземлений} WriteTramplinData; end; procedure Jump; {Прыжок} var T, F1, K1, VPr12, VPr2, Vx, Vx0, Vy, Vy0, V, X, Y, A, B, Sin1, Cos1, SinAG, TK, Gamma1: Extended; S: string; function EndofJump: Boolean; begin if ((X else if ((YN)) then EndofJump:=True else if X>K then EndofJump:=True else EndofJump:=False; end; begin SetColor(JumpColor); Vx0:=V0[I]*Cos(Alfa); Vy0:=V0[I]*Sin(Alfa); Vx:=Vx0; Vy:=Vy0; V:=Sqrt( Sqr(Vx0)+Sqr(Vy0) ); X:=0; Y:=YO; VPr2:=Sqr(VPr0[I]); Gamma1:=Gamma[I]; Sin1:=Sin(Gamma1); Cos1:=Cos(Gamma1); SinAG:=Sin(Gamma1-Alfa); repeat A:=Vx*Sin1-Vy*Cos1; B:=Vx*Cos1+Vy*Sin1; F1:=B/A; K1:=G*A/VPr2/V/SinAG; V:=Sqrt( Sqr(Vx0+WWW*dt)+Sqr(Vy0) ); Vx:=Vx0-K1*V*(Vx0+F1*Vy0)*dt+WWW*dt; Vy:=Vy0-G*dt-K1*V*(Vy0-F1*Vx0)*dt; X:=(Vx+Vx0)*dt/2+X; Y:=(Vy+Vy0)*dt/2+Y; PutPixel( Trunc(X*Scale), Trunc(400-Y*Scale), JumpColor); Vx0:=Vx; Vy0:=Vy; until EndofJump; Vy:=Vx*Sin(Beta)-Vy*Cos(Beta); {вертикальная составляющая скорости приземления} Length:=Sqrt(Sqr(H)+Sqr(N))+((X-N)/Cos(Beta)); {дальность прыжка} {вывод данных о прыжке} Str(I,S); SetColor(JumpDataColor); OutTextXY( Trunc(X*Scale)-8, Trunc(400-Y*Scale), S); Str(Abs(V0[I]):4:2,S6); Str(Abs(VPr0[I]):4:2,S1); Str(Length:0:1,S3); Str(Abs(VY):4:2,S4); Str(I,S5); S6:=S5+': Vo='+S6+'м/с, Vпр='+S1+'м/с'; if ((X>N)and(X S6:=S6+', Дальность='+S3+'м, скорость='+S4+'м/с'; OutTextXY(10,401+10*I,S6); end; begin end. (TK-0.5) - Gamma TK - Beta Gamma=K*(TK-0.5)+B Beta=K*TK+B ----------------------- (Gamma-Beta)=-K/2 => K=2*(Beta-Gamma) B=Beta-K*TK ----------------------- Fi(T)=K*(T-TK)+Beta Библиография 1. Грозин, Е. А. (1971) Прыжки с трамлина. Физкультура и спорт, Москва 2. Ремизов, Л. П. (1973) Максимальная дальность прыжка с трамплина. Теория и практика физической культуры, 3, 73-75. 3. Remizov L. P. Biomechanics of optimal ski jump. J.Biomechanics, 1984, vol.17, №3, pp.167-171. 4. Н.А.Багин, Ю.И.Волошин, В.П.Евтеев. К теории полета лыжника при прыжках с трамплина. /Теория и практика физической культуры, №2, 1997, сс.9-11. 5. Komi, P. V., Nelson, R. S. and Pulli, M. (1974) Biomechanics of Ski-Jumping. Jivaskyla. 6. Петров В. А., Гагин Ю. А. Механика спортивных движений. М.: Физкультура и спорт, 1977 7. Флетчер К. Вычислительные методы в динамике жидкостей: в двух томах. - М.: Мир, 1991. 8. Тарунин Е.Л. Двухполевой метод решения задач гидродинамики вязкой жидкости. Пермь, ПГУ, 1985. 9.HTTE. Справочник для инженеров, техников и студентов. Том первый. М.-Л., главная редакция литературы по машиностроению и металлообработке, 1936.