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

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


Профи
****

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

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


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

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


Прикрепленные файлы
Прикрепленный файл  CIRCLES.PAS ( 10.21 килобайт ) Кол-во скачиваний: 424
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 9.04.2007 21:23
Сообщение #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 - 9.04.2007 21:24
 К началу страницы 
+ Ответить 
18192123
сообщение 9.04.2007 22:56
Сообщение #3


Профи
****

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

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


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

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


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


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

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

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


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

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

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

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


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

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


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

 



- Текстовая версия 18.07.2025 6:02
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"