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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2008, 18:47   #1
Ustim
Пользователь
 
Регистрация: 04.03.2008
Сообщений: 12
По умолчанию Как в паскале регистрировать время? формулы расчёта новых координат

Здравствуйте. Задали вот нам курсовую написать. Паскаль. Условие прикреплю во вложении. Прошу прощения конечно, но там много символов, которых я тут не напечатаю) Теперь в чём у меня непонятки:
-в конце условия написано регистрировать время... Как его в паскале регистрировать? такому нас вроди не учили))
-формулы расчёта новых координат.. чёт больно они стрёмные какие-то)) я в физике не очень, не совсем понимаю, как всё это реализовать в паскале... и что за "В" стоит перед предпоследними дельта х и дельта у?
Пожалуйста, разъясните, кто поймёт...
ВОт что я написал пока, посмотрите, мож чё подправить надо.

Код:
Program lodkaLab;


Uses crt, graph;
{--------Объект:Лодка:)------------------------}
Type lod = object
       xll,yll,an:integer;

       procedure create (xf,yf,a:integer);
       end;
       procedure lod.create (xf,yf,a:integer);
        var t: array[1..5, 1..2] of integer;
        var tn:array[1..5, 1..2] of integer;
        begin
         {Setcolor(GetBkColor);}
         Setcolor(Green);
       {Этот массив просто чтоб удобнее было понять построение
       самой лодки
         tn[1,1] := xf-10;
         tn[1,2] := yf-10;
         tn[2,1] := xf;
         tn[2,2] := yf-20;
         tn[3,1] := xf+10;
         tn[3,2] := yf-10;
         tn[4,1] := xf+10;
         tn[4,2] := yf+20;
         tn[5,1] := xf-10;
         tn[5,2] := yf+20;
                           }
         t[1,1] := xf + round(((xf-10)-xf)*cos(A) - ((yf-10)-yf)*sin(A));
         t[1,2] := yf + round(((yf-10)-yf)*cos(A) + ((xf-10)-xf)*sin(A));
         t[2,1] := xf + round((xf-xf)*cos(A) - ((yf-20)-yf)*sin(A));
         t[2,2] := yf + round(((yf-20)-yf)*cos(A) + (xf-xf)*sin(A));
         t[3,1] := xf + round(((xf+10)-xf)*cos(A) - ((yf-10)-yf)*sin(A));
         t[3,2] := yf + round(((yf-10)-yf)*cos(A) + ((xf+10)-xf)*sin(A));
         t[4,1] := xf + round(((xf+10)-xf)*cos(A) - ((yf+20)-yf)*sin(A));
         t[4,2] := yf + round(((yf+20)-yf)*cos(A) + ((xf+10)-xf)*sin(A));
         t[5,1] := xf + round(((xf-10)-xf)*cos(A) - ((yf+20)-yf)*sin(A));
         t[5,2] := yf + round(((yf+20)-yf)*cos(A) + ((xf-10)-xf)*sin(A));

      {  -------------------------------------------------
         Формулы вращения точки относительно центра
         здесь:
         --------------------------
         xf,yf - центр
         x1,y1 - координаты точки
         А     - угол
         --------------------------

         xx1:= xf + round((x1-xf)*cos(A) - (y1-yf)*sin(A));
         yy1:= yf + round((y1-yf)*cos(A) + (x1-xf)*sin(A));
         --------------------------------------------------}


         line(t[1,1],t[1,2],t[2,1],t[2,2]);
         line(t[2,1],t[2,2],t[3,1],t[3,2]);
         line(t[3,1],t[3,2],t[4,1],t[4,2]);
         line(t[4,1],t[4,2],t[5,1],t[5,2]);
         line(t[5,1],t[5,2],t[1,1],t[1,2]);
        end;




var  lodka:lod; k:char;
     xl,yl,angle:integer;
{---------Инициализация графики-----------------}
Procedure grinit;
 var gd,gm:integer;
 begin
  gd:=detect;
  Initgraph(gd,gm, ' ');
  if graphresult <> grOK then
   write('Хуйня');
 end;
{-----------------------------------------------}


Begin

grinit;
xl:=round(getmaxx/2);
yl:=round(getmaxy/2);
angle:=0;

   lodka.create(xl,yl,angle);

readln;
CloseGraph;
End.
Ну потом допишу обработку нажатых клавиш и т.д. Просто сейчас интересует сам принцип передвижения по вот тем формулам, которых нихрена мне не понятно
Да, и ещё. Как стирать старую лодку при повороте/перемещении?
Заранее очень благодарю за помощь)

Мда, во вложениях изображения уменьшаются)))
Вот тогда:

http://img151.imageshack.us/img151/3475/39646987lm2.gif
Изображения
Тип файла: jpg Untitled-2.jpg (33.9 Кб, 124 просмотров)
Создание качественных сайтов любой сложности -http://arte.dp.ua

Последний раз редактировалось Ustim; 04.03.2008 в 18:52.
Ustim вне форума Ответить с цитированием
Старый 04.03.2008, 19:03   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Чтобы стереть старую лодку, ее надо на том же месте нарисовать цветом фона.
puporev вне форума Ответить с цитированием
Старый 04.03.2008, 19:09   #3
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Ustim, у Вас тут ни горы, ни воза. Какую лодку стереть? Вам надо численно решать систему ДУ, одно как минимум, - второй степени, раз там гидродинамика присутствует, а уж потом дело до рисования дойдет.
B_N вне форума Ответить с цитированием
Старый 04.03.2008, 19:35   #4
Ustim
Пользователь
 
Регистрация: 04.03.2008
Сообщений: 12
По умолчанию

Ну я сделал то, что могу и понимаю. Я и пришел сюда, чтоб просить помощи с физикой.. гидродинамикой ёпт...
Создание качественных сайтов любой сложности -http://arte.dp.ua
Ustim вне форума Ответить с цитированием
Старый 04.03.2008, 19:37   #5
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Цитата:
Сообщение от B_N Посмотреть сообщение
Ustim, у Вас тут ни горы, ни воза. Какую лодку стереть? Вам надо численно решать систему ДУ, одно как минимум, - второй степени, раз там гидродинамика присутствует, а уж потом дело до рисования дойдет.
Если вода глубокая, то, боюсь, так просто не отделаться.
Carbon вне форума Ответить с цитированием
Старый 04.03.2008, 19:48   #6
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Ustim Посмотреть сообщение
Ну я сделал то, что могу и понимаю. Я и пришел сюда, чтоб просить помощи с физикой.. гидродинамикой ёпт...
Да с этим-то проблем особых нет, надо будет - поможем, если конечно Ваше отношение к проблеме не выражается словом "ёпт" и 74-й строчкой Вашего кода. Определяйте "лодку" как а) точку {x,y}, б) вектор, выражающий направление носа, в) вектор, выражающий текущую скорость, выбрасывайте всю эту красоту с сниусами-косинусами-массивами и будем дальше смотреть, если сами по ходу дела не догадаетесь.
------
Да, еще не забываем, что у "лодки" есть масса и что там еще по условиям, и тоже всё это добавляем к объекту.
B_N вне форума Ответить с цитированием
Старый 04.03.2008, 21:04   #7
Ustim
Пользователь
 
Регистрация: 04.03.2008
Сообщений: 12
По умолчанию

эээ, не совсем понятно понятие "вектор" что должно быть в векторе, выражающем направление носа? ну в векторе, выражающем скорость просто текущая скорость лодки? Массу добавлю
Создание качественных сайтов любой сложности -http://arte.dp.ua
Ustim вне форума Ответить с цитированием
Старый 04.03.2008, 21:08   #8
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

2 Ustim
Посмотрел еще раз задание, всё оказалось даже проще, чем можно было подумать.

Дальше добавляем к лодке
1. По вектору для каждой действующей на неё силы. Я вижу пока только две - тягу и сильно упрощенное сопротивление жидкости.
2. Определяемся, как быть с рулем. По идее пароход должен вращать момент силы, но здесь, видимо, задача упрощена и предполагается, что лодка крутится "сама-собой" в сторону поворота руля. Коли так, заводим переменную, показывающую, куда повернут руль.
3. Определяемся с "квантом" времени. Он будет нам нужен для определения всех параметров движения. Лучше его сразу выражать в системе Си, т.е. в секундах (ну или в долях секунды)
4. Определяем функцию [CalcForces], которая будет вычислять равнодействующую всех действующих сил.
5. Определяем функцию [CalcAcceleration], которая будет на основе полученной равнодействующей и массы лодки получать ускорение.
6. Определяем функцию [CalcNewVelocity], которая на основе полученного ускорения будет изменять существующую скорость лодки.
7. Определяем функцию [CalcPosition], которая будет на основе полученной скорости вычислять новые координаты.
8. Определяем функцию, [DrawBoat], которая рисует "лодку" по имеющимся координатам. В дальнейшем оптимизируем рисование.

9. Строим иерархию вызовов по принципу [CalcForces] вызывает [CalcAcceleration], та, в свою очередь, вызывает [CalcNewVelocity], та, в свою очередь, вызывает [CalcPosition], та, в свою очередь, вызывает [DrawBoat].

10. Всю эту конструкцию загоняем в цикл, который
Вариант 1 - будет выполняться каждый наш квант времени
Вариант 2 - будет выполняться по требованию, в таком случае вычисляем прошедшее с последнего вызова время.

В дальнейшем займемся лодкой как изображением, пока это ни к чему.

Если по структуре вопросов нет, создавайте объект, определяйте для него "пустые функции" и будем смотреть дальше.
----------------------------------
Цитата:
Сообщение от Ustim Посмотреть сообщение
эээ, не совсем понятно понятие "вектор" что должно быть в векторе, выражающем направление носа? ну в векторе, выражающем скорость просто текущая скорость лодки? Массу добавлю
Вам же нужно определять направление силы тяги. И в последующем даже рисовать лодку.
Вектор - значит вектор. Сила, ускорение, скорость - векторные величины.
------------------
Да, еще, по всей видимости, можно обойтись силой тяги в скалярном виде, а сопротивление среды, видимо, вычисляется на ее основе. На Вашей картинке с уловием Ворд сильно перемудрил с автозаменой...

Последний раз редактировалось B_N; 04.03.2008 в 21:14.
B_N вне форума Ответить с цитированием
Старый 04.03.2008, 21:46   #9
Ustim
Пользователь
 
Регистрация: 04.03.2008
Сообщений: 12
По умолчанию

Ну в принципе вот

Код:
Type lod = object
       angle,
       x,y:integer;
       tg,sopr:real;

       function CalcForces(tg1,sopr1:real):real;
       function CalcAcceleration(fc,mass:real):real;
       function CalcNewVelocity(acc:real):real;
       function CalcPosition(vel:real):integer;
       procedure DrawBoat(xl,yl:integer);
       end;

       function lod.CalcForces(tg1,sopr1:real):real;
        var force:real;
        begin


         CalcAcceleration(force,m);
        end;

       function lod.CalcAcceleration(fc,mass:real):real;
        var acceleration:real;
        begin

         CalcNewVelocity(acceleretion);
        end;

       function lod.CalcNewVelocity(acc:real):real;
        var velocity:real;
        begin

         CalcPosition(velocity);
        end;

       function lod.CalcPosition(vel:real):integer;
        begin
        end;

       procedure lod.DrawBoat(xl,yl:integer);
        begin
        end;
DrawBoat ничего не возвращает, ёё как процедуру оформляем, так?
Функция CalcPosition должна ведь возвращать х и у? Её тоже как процедуру оформить?
Вот с временем я вообще в ступоре
Создание качественных сайтов любой сложности -http://arte.dp.ua
Ustim вне форума Ответить с цитированием
Старый 04.03.2008, 22:05   #10
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Ustim Посмотреть сообщение
Ну в принципе вот
........................
DrawBoat ничего не возвращает, ёё как процедуру оформляем, так?
Функция CalcPosition должна ведь возвращать х и у? Её тоже как процедуру оформить?
Вот с временем я вообще в ступоре
Векторы, Ustim, векторы:
Код:
type
    vector = record
        cx, cy : extended; {Ну или double, real что больше нравится}
    end;
Ещё раз - сила, ускорение, скорость - векторы. Нам нужны их разложения по осям, а не просто скалярная величина. Массу не нужно в функцию передавать, она - свойство объекта, причем по условию задачи - неизменное. Аналогично, не нужно ничего передавать в CalcForces - она сама будет разбираться с силами. Судя по условию достаточно для "лодки" хранить только величину силы тяги, но мне всё же кажется, что в условии какая-то ошибка: Там получается, что сопротивление среды обратно пропорционально скорости, хотя на самом деле - прямо пропорционально квадрату скорости. Думаю, Вам стоит этот вопрос уточнить - формулу, по которой в задаче вычисляется сопротивление, я думаю, там Word что-то поназаменял... Да, и меняйте координаты на вещественные, может быть даже стоит запись создать вроде
Код:
type
    point = record
        x, y : extended;
    end;
B_N вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
квадрат и система координат=) kolduev Помощь студентам 8 11.03.2008 19:11
Система координат SunKnight Общие вопросы Delphi 2 05.02.2008 19:42
Приветствуем новых модераторов! Alar О форуме и сайтах клуба 4 23.04.2007 08:32
Создание новых разделов PAVEL315 О форуме и сайтах клуба 14 20.01.2007 23:05