Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2012, 10:18   #1
tmr
Пользователь
 
Регистрация: 05.03.2012
Сообщений: 11
По умолчанию Не могу разобраться с формулами траектории полета баллистической ракеты

В универе дали контрольную "Составить программу, иллюстрирующую полет баллистической ракеты в зависимости от начальной скорости и начального направления вектора скорости (угла тангажа). Участок разгона ракеты и сопротивление атмосферы не учитывать".

Начал с вычислении формулы дальности полета s.png.
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
const
 g = 9.82;
 var
 s,u1,a1,s1,s2:Longint;
begin
 u1 := StrToInt(LabeledEdit1.Text);
 a1 := StrToInt(LabeledEdit2.Text);
 s := Round(sqrt(u1)/g);
 s1:= Round(sqrt(sin(a1)));
 s2:=(s*s1);
 memo1.lines.add(Inttostr(s));
 memo1.lines.add(floattostr(s1));
 memo1.lines.add(floattostr(s2));
end;

end.
Нашол сайт с оналйн калькулятором который считает. Ответы не сходятся. Почему?
tmr вне форума Ответить с цитированием
Старый 05.03.2012, 10:23   #2
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Код:
s := Round(sqrt(u1)/g);
s1:= Round(sqrt(sin(a1)));
Меняй на
Код:
s := Round(sqr(u1)/g);
 s1:= Round(sin(2*a1));
P.S. И я бы еще не округлял (убрал бы Round), а переменные поставил бы типа real, а не longint
Все тривиальное просто

Последний раз редактировалось whatever; 05.03.2012 в 12:37. Причина: sqr, а не sqt, очепятался
whatever вне форума Ответить с цитированием
Старый 05.03.2012, 11:15   #3
tmr
Пользователь
 
Регистрация: 05.03.2012
Сообщений: 11
По умолчанию

Спасибо whatever, но все равно не все числа совпадают, например вводим u1-100 и a1-100 , разница очень большая(((. так то формула нормальная в чем может быть дело? Может калькулятор мне врет??
tmr вне форума Ответить с цитированием
Старый 05.03.2012, 12:25   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Боюсь, что вы немножко не с того края подошли к задаче.

Разделите скорость полёта на две составляющие: скорость по оси X и скорость по оси Y,при этом скорость по оси X будет постоянной, а скорость по оси Y уменьшаться на значение g за каждую секунду полёта.
т.е. приращивая незначительно время, можно получать координаты следующей точки на траектории полёта.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 05.03.2012, 12:35   #5
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Мне лень было лепить форму, поэтому накидал простенькую прогу в консоли:
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

function lengthflight(u1,a1:real):real;
const
 g = 9.80665;
 var
 s,s1:real;
begin
 s:=sqr(u1)/g;
 s1:=sin(2*a1);
 result:=(s*s1);
end;

begin
writeln(lengthflight(100,pi/4):0:20);
readln;

end.
А теперь внимание! На сайте угол броска измеряется в градусах, в дэлфи - в радианах.

pi/4=45°, результаты совпали.
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 05.03.2012, 13:31   #6
tmr
Пользователь
 
Регистрация: 05.03.2012
Сообщений: 11
По умолчанию

Спасибо whatever. Думал об этом, но не придал значением этому( спасибо за пример
tmr вне форума Ответить с цитированием
Старый 05.03.2012, 14:08   #7
tmr
Пользователь
 
Регистрация: 05.03.2012
Сообщений: 11
По умолчанию

Вообщем добавил функцию нахождения радиана. Убрал округление,а все равно при некоторых значениях например задаю а1 и u1 -10 разные варианты получаются?? Может быть я что то забыл?


Код:
function gradtorad(gr:real): real;
begin
  result:= gr*3.14/180
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
const
 g = 9.82;
 var
 s,u1,s1,s2,h1,h2,a1,h:real;
begin
 u1 := StrToFloat(LabeledEdit1.Text);
 a1 := gradtorad(StrToFloat(LabeledEdit2.Text));
 memo1.lines.add(floattostr(a1));
 s := (sqr(u1)/g);
 s1:= (sin(2*a1));
 s2:= (S*s1);
 h:= (2*u1)/(2*g);
 h1:= (sqrt(sin(a1)));
 h2:= (h*h1);
 //memo1.lines.add(Inttostr(s));
 memo1.lines.add(floattostr(s2));
 memo1.lines.add(floattostr(h2));
 labeledEdit3.text:= FloatToStr(s);
 labeledEdit4.text:= floatToStr(h2);
end;

end.
tmr вне форума Ответить с цитированием
Старый 05.03.2012, 14:09   #8
tmr
Пользователь
 
Регистрация: 05.03.2012
Сообщений: 11
По умолчанию

h - это высота, забыл убрать. Не смотрите на нее
tmr вне форума Ответить с цитированием
Старый 05.03.2012, 14:25   #9
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

На сколько разные? У тебя в условиях погрешности большие:
На сайте g=9.80665, у тебя g=9.82
И вместо 3.14 поставть pi, в дэлфи эта функция заранее определена, возвращает более точное пи.

Опять же:
Код:
program Project1;
{$APPTYPE CONSOLE}
uses
  SysUtils;
function gradtorad(gr:real): real;
begin
  result:= gr*pi/180
end;
function lengthflight(u1,a1:real):real;
const
 g=9.80665;
 var
 s,s1:real;
begin
 s:=sqr(u1)/g;
 s1:=sin(2*a1);
 result:=(s*s1);
end;

begin
  writeln(lengthflight(-10,gradtorad(-10)):0:20);
  readln;
end.

Точность = 10 в -14ой степени.
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 05.03.2012, 14:54   #10
tmr
Пользователь
 
Регистрация: 05.03.2012
Сообщений: 11
По умолчанию

Все получилось спасибо большое, считает все идеально! Теперь дальше пойду решать
P.S.при обоих значениях 10 мне выдавало ответ 10 примерно.
tmr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Расчет траектории полета пули tuls Общие вопросы по Java, Java SE, Kotlin 0 15.01.2012 22:15
Не могу совладать с формулами olegwolf Microsoft Office Excel 3 04.08.2011 23:31
Расчет полета ракеты reydor Помощь студентам 0 05.10.2010 15:46
Построение траектории полета пули V@mpir Общие вопросы Delphi 0 11.12.2009 19:07
Рассчитать время полета ракеты. VC++ C71Me Помощь студентам 5 22.02.2009 19:03