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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2008, 22:24   #11
Ustim
Пользователь
 
Регистрация: 04.03.2008
Сообщений: 12
По умолчанию

Вот, правда на укр. языке.
Спасибо огромное за помощь
с векторами понял
Вложения
Тип файла: doc Kurs_rab222.doc (54.5 Кб, 6 просмотров)
Создание качественных сайтов любой сложности -http://arte.dp.ua
Ustim вне форума Ответить с цитированием
Старый 04.03.2008, 22:43   #12
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Ustim Посмотреть сообщение
Вот, правда на укр. языке...........
Хм... Это вопрос не прояснило... там тоже дробь. Ладно, по ходу дела разберемся, в крайнем случае, поставим "настоящую" формулу, потом этот вопрос из первоисточника проясните, можно будет легко поменять. Нужно еще со временм определиться. Судя по всему, Вы это под ДОС пишете, как делать собираетесь, просто бесконечным циклом гонять? Нужно будет, видимо, какую-то задержу предусмотреть, боюсь что сегодня между проходами цикла может пройти 0 времени, это смешает все карты... Давайте, доделывайте класс и показывайте, пора подправлять и заниматься механикой.
B_N вне форума Ответить с цитированием
Старый 05.03.2008, 10:36   #13
Ustim
Пользователь
 
Регистрация: 04.03.2008
Сообщений: 12
По умолчанию

Ну, впринципе, вот:
Код:
Const m = 5000;
{--------Объект:Лодка:)------------------------}
Type
     vector = record
       cx,cy:extended;
     end;
     point = record
       x,y:extended;
     end;

     lod = object
       xy:point;
       tg,sopr,angle:vector;

       function CalcForces:vector;
       function CalcAcceleration(fc:vector):real;
       function CalcNewVelocity(acc:vector):real;
       function CalcPosition(vel:vector):integer;
       procedure DrawBoat(x_y:point);
       end;

       function lod.CalcForces:real;
        var force:real;
        begin

       function lod.CalcAcceleration(fc: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(x_y:point);
        begin
        end;
Создание качественных сайтов любой сложности -http://arte.dp.ua
Ustim вне форума Ответить с цитированием
Старый 05.03.2008, 17:44   #14
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Сначала определяем систему координат, в которой будем работать. Естественно, лучше это сделать обычным образом - ось X - вправо, Y - вверх, начало координат, например, нижний левый угол экрана (или центр, не суть важно). Преобразовывать эти мировые координаты к видовым будет потом функция DrawBoat, уже непосредственно при рисовании.

Для лодки имеем:
1. Координаты центра масс (координаты лодки) - точка в мировых координатах
2. Величина силы тяги - скаляр, который мы потом используем для расчета
3. Скорость - вектор в мировых координатах
4. Направление носа лодки - единичный вектор в мировых координатах
5. Масса лодки в кг.
-----------
потом добавим, пока делаем без них
6. запись для вычисления угла поворота руля
7. запись для определения величины тяги

Добавим еще одну функцию
ControlBoat(deltaT) (к определению deltaT вернемся позже, а пока используем её просто как переменную, равную, для определенности, скажем 0.1 сек)
Позже несколько улучшим функцию, а пока сделаем так:
а) Рассчитываем новые координаты вектора, выражающего "направление носа" следующим образом: поскольку поворот вектора в старой системе координат аналогичен повороту самой системы координат в другую сторону пишем обычные формулы для поворота системы координат
x' = x*cos(a) + y*sin(a)
y' = -x*sin(a) + y*cos(a)
но направление отсчета угла меняем на обратное - поворот по часовой стрелке будем считать положительным, т.е. если нажата стрелка вправо, принимаем угол равным, например, 1 градусу, если влево: -1 градусу. Запоминаем новые координаты в векторе "направление носа". Если стрелки не нажаты, значит вообще не трогаем направление.
б) текущая величина силы тяги. из условия не совсем ясно, что подразумевается под всеми этими возможными её изменениями, но, видимо, здесь тоже речь об "управлении стрелками", грубо говоря, нажата стрелка - силя тяги растет, отпущена - снижается до нуля. для начала можно сделать так: стрелка нажата - тяга максимальна, отпущена - тяга равно нулю, потом исправим.

CalcForces(deltaT)
Здесь рассчитываем
а) вектор силы тяги. Для этого берём текущее направление носа (которое мы только что посчитали, тяга направлена по оси лодки) и умножаем его (поскольку мы положили его единичным вектором) на текущую величину силы тяги.
б) вектор силы сопротивления. Умножаем вектор скорости сам на себя, берем с обратным знаком (поскольку сила сопротивления направлена против скорости) и умножаем на некий коэфф. К, о нём потом, а пока можно принять его равным где-то 0.01 - 0.1.
в) складываем оба вектора - получаем равнодействующую, передаем ее в CalcAcceleration.

CalcAcceleration(deltaT, вектор_равнодействующей) Берем второй закон Ньютона - a = F/m, получаем ускорение и. передаем его в CalcNewVelocity.

CalcNewVelocity(deltaT, ускорение) - Складываем полученное приращение скорости (произведение ускорения на deltaT) с текущей скоростью, запоминаем новую скорость в объекте.

CalcPosition(deltaT) - складываем текущие координаты лодки с произведением текущей скорости на deltaT.

DrawBoat - без параметров
Для начала просто рисуем вектор направления носа (из точки, выражающей текущую позицию парохода) в подходящем масштабе.

Если вопросов нет - пишите, потом будем рихтовать.
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