![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Пользователь
Регистрация: 04.03.2008
Сообщений: 12
|
![]()
Вот, правда на укр. языке.
Спасибо огромное за помощь с векторами понял
Создание качественных сайтов любой сложности -http://arte.dp.ua
|
![]() |
![]() |
![]() |
#12 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
![]()
Хм... Это вопрос не прояснило... там тоже дробь. Ладно, по ходу дела разберемся, в крайнем случае, поставим "настоящую" формулу, потом этот вопрос из первоисточника проясните, можно будет легко поменять. Нужно еще со временм определиться. Судя по всему, Вы это под ДОС пишете, как делать собираетесь, просто бесконечным циклом гонять? Нужно будет, видимо, какую-то задержу предусмотреть, боюсь что сегодня между проходами цикла может пройти 0 времени, это смешает все карты... Давайте, доделывайте класс и показывайте, пора подправлять и заниматься механикой.
|
![]() |
![]() |
![]() |
#13 |
Пользователь
Регистрация: 04.03.2008
Сообщений: 12
|
![]()
Ну, впринципе, вот:
Код:
Создание качественных сайтов любой сложности -http://arte.dp.ua
|
![]() |
![]() |
![]() |
#14 |
Новичок
Джуниор
Регистрация: 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 - без параметров Для начала просто рисуем вектор направления носа (из точки, выражающей текущую позицию парохода) в подходящем масштабе. Если вопросов нет - пишите, потом будем рихтовать. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
квадрат и система координат=) | 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 |