IPB
ЛогинПароль:

> Моделирование движения шаров
сообщение
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Вот такое задание:
Даны два шарика диаметром М. Промоделировать движение шариков по всей плоскости экрана. Шарики могут двигаться по прямым линиям. Изменение угла движения после столкновения с границей экрана или друг с другом может быть случайной величиной. Шарик не может вылететь за пределы квадрата. Пользователь может варьировать скорости движения шариков с помощью стрелок управления курсором.

Хотелось бы разобраться в коде программы... ( дело в том, что код не мой)
Объясните пожалуйста назначение каждой из процедур в тексте приведённой ниже программы!


Прикрепленные файлы
Прикрепленный файл  CIRCLES.PAS ( 10.21 килобайт ) Кол-во скачиваний: 762
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Цитата
Не пойму, почему происходит "затирание"?

Потому, что надо сначала менять положение шара, и только потом проверять его на столкновение с бордюром, правда? smile.gif

Вот так:
...
move (x1, y1, dx1, dy1); { <--- Сначала это }
move (x2, y2, dx2, dy2);
border (x1, y1, r1, dx1, dy1); { <--- и только потом - проверка }
border (x2, y2, r2, dx2, dy2);
...


Цитата
как ещё учесть (при пристолкновении) изменение угла движения?
Ты имеешь в виду при столкновении шаров между собой? Тебе понадобится функция, определяющая, было ли такое столкновение... На каждом шаге кроме того, что ты проверяешь столкновения шаров с бортом, надо будет вызывать еще и эту функцию, и если столкновение было (расстояние между центрами шаров меньше суммы их радиусов), то менять направление движения...

А вот как менять - это уже зависит от того, насколько реалистично ты это хочешь сделать... Можно просто поменять знак DX или DY на противоположный, можно рассчитать новые направления движения шаров по формулам...

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(volvo @ 9.04.2007 22:23) *

А вот как менять - это уже зависит от того, насколько реалистично ты это хочешь сделать... Можно просто поменять знак DX или DY на противоположный, можно рассчитать новые направления движения шаров по формулам...


Я хочу делать наиболее реалистично...
Про ф-цию - понятно, буду делать. Спасибо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(18192123 @ 9.04.2007 23:56) *

Я хочу делать наиболее реалистично...
Про ф-цию - понятно, буду делать. Спасибо.

Реалистично - я уже говорил: нужно вводить массы. Тогда можно будет использовать ЗСИ. Но это можно сделать только имея нормальную интерперетацию скорости! В моем примере скорость практически реальная, при этом время течет квантами (в цикле). Посмотри, как это устроено, и сможешь менять скорость по ЗСИ.

Для максимальной реалистичности можно использовать натуральное время (в секундах) и натуральные рамеры экранного окна (в см). Это не так сложно, но реально того, как сделано в моей проге, достаточно для описания физики соударений. Только там у меня рассчитано на несколько (до 9) объектов, при этом проверка на соударение производится, ессно, циклом по всем для каждого. При девяти это еще не так много, но если еще увеличивать количество, то производительность может начать падать..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
18192123   Моделирование движения шаров   4.04.2007 1:03
18192123   procedure Change(g1,g2:integer;var n:integer;a:re…   6.04.2007 0:44
Lapp   Марина, извини, но ты выбрала неправильную програм…   6.04.2007 11:54
18192123   Марина, извини, но ты выбрала неправильную програ…   7.04.2007 17:49
18192123   начни с алгоритма.. 1. Меню (где можно выбрат…   8.04.2007 0:31
Tan   Случайно на компе наткнулся на задачку с шариком п…   8.04.2007 2:32
Lapp   1. Меню (где можно выбрать радиус 2-х шариков) …   8.04.2007 13:58
18192123   С помощью стрелок - не очень удобно, поскольку и…   8.04.2007 15:02
volvo   Для того, чтобы начать реализовывать меню (интерфе…   8.04.2007 15:13
18192123   Мои "очень скромные" наработки..... вот …   8.04.2007 20:26
TarasBer   procedure move (x, y, dx, dy : integer); замените…   8.04.2007 20:36
18192123   procedure move (x, y, dx, dy : integer); заменит…   8.04.2007 20:51
volvo   Значит, смотри, в чем твои ошибки: 1) если ты дум…   9.04.2007 5:13
18192123   в момент касания шаром бордюра он затирается - п…   10.04.2007 1:02
Lapp   Марина, я покажу пример программы, которая гоняет …   9.04.2007 18:11
18192123   Марина, я покажу пример программы, которая гоняет…   9.04.2007 22:37
18192123   x1,x2,y1,y2 : real; А это - текстовый мод…   11.04.2007 3:36
Lapp   за что отвечают переменные x1,x2,y1,y2 и Aspect,M…   11.04.2007 5:13
volvo   Потому, что надо сначала менять положение шара, и…   10.04.2007 1:23
18192123   А вот как менять - это уже зависит от того, наско…   10.04.2007 2:56
Lapp   Я хочу делать наиболее реалистично... Про ф-цию -…   10.04.2007 4:41
18192123   возник такой вопрос: если теоретически я должна уп…   12.04.2007 17:43
18192123   Попыталась добавить в программу движение под углом…   13.04.2007 0:49
18192123   Попыталась добавить в программу движение под угло…   14.04.2007 17:45
18192123   .... меню (не знаю, как при выборе одного из пунк…   14.04.2007 21:20
Lapp   если теоретически я должна управлять скоростью дв…   13.04.2007 2:52
18192123   Управляешь с клавы - ну, управляй. А при чем ту…   13.04.2007 12:48
volvo   Насчет #207, которая возникает в balls_hit ... Дл…   14.04.2007 19:01
volvo   Обрамляешь все, что делается в меню Repeat / Unti…   14.04.2007 22:20
18192123   вот такие вопросы появились: 1. если шарики соприк…   14.04.2007 23:54
18192123   вот такие вопросы появились: 1. если шарики сопри…   16.04.2007 2:23
18192123   вот такие вопросы появились: 1. если шарики сопри…   17.04.2007 1:46
18192123   по вопросу2: begin dx := -dx; dy := -dy; x…   17.04.2007 23:05
18192123   а насчёт варьирования скоростями: от чего отталкив…   18.04.2007 1:53
Lapp   а насчёт варьирования скоростями: от чего отталки…   18.04.2007 6:19
18192123   Если у меня положения центров шаров будут находить…   19.04.2007 2:50
Lapp   как должны выглядеть процедуры ..., которые я исп…   19.04.2007 10:29
18192123   Примерно так: по Х: angle:=180-angle; по Y: angle…   19.04.2007 17:46
Lapp   С этим получилось , но в результате , если один и…   20.04.2007 2:47
18192123   Видимо, у тебя один угол на два шара. А надо име…   20.04.2007 12:33
18192123   Мне бы хотелось, чтобы шарики, при столкновении др…   22.04.2007 3:21
18192123   но шарики только проводят друг через друга..... …   22.04.2007 3:42
Lapp   не пойму, в чём причина? Причин несколько. 1. т…   22.04.2007 14:20
18192123   Например, функция balls_hit моогла бы выглядеть …   22.04.2007 19:32
18192123   3. Ты пересчитываешь параметры, но обратно из пр…   23.04.2007 0:38
Lapp   не совсем тебя поняла....какие параметры я ещё до…   23.04.2007 4:47
18192123   То же самое касается других параметров, которые…   24.04.2007 1:13
Lapp   Но у меня шарики всё равно проходят друг через др…   24.04.2007 14:14
18192123   3. Скорость персчитывай по ЗСИ по [b]каждой комп…   25.04.2007 0:59
18192123   ты снова забываешь сменить углы.. а как их меня…   23.04.2007 1:01
Lapp   Дальше для каждой компоненты записываешь (на бумаж…   25.04.2007 2:10
18192123   Находишь Vx1' и Vx2' (а также Vy1' и …   25.04.2007 3:10
Lapp   ты имел ввиду Vx1' := ?Нет, я имел в виду т…   25.04.2007 3:38
18192123   Дальше для каждой компоненты записываешь (на бума…   25.04.2007 22:38
18192123   перед тем, как шарики сталкиваются, программа выле…   26.04.2007 23:01
Lapp   перед тем, как шарики сталкиваются, программа выл…   27.04.2007 9:35
18192123   Ошибок в математике не нашла.... (но у меня получи…   28.04.2007 2:41
Lapp   в какой строке это происходит - не разберусь... …   28.04.2007 2:49
18192123   В чем ты работаешь? в ТР/ВР или FPC? ТР   28.04.2007 3:05
Lapp   ТР ТР обычно показывает строку с ошибкой.. Стран…   28.04.2007 3:33
18192123   Перед передачей параметров в эту процедуру, расп…   28.04.2007 23:27
18192123   А если не применять з-ны сохранения ( изменение ск…   29.04.2007 2:58
Чужак   18192123, здравствуй! Читал НЕ мало твою тему,…   29.04.2007 3:16


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 25.04.2024 13:24
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name