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

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


Профи
****

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

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


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

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


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


меркантильный
***

Группа: Пользователи
Сообщений: 161
Пол: Мужской

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


18192123, здравствуй!
Читал НЕ мало твою тему, и прочитав вот это:
Цитата(Lapp @ 18.04.2007 3:19) *

Некто хочет научиться варить суп. Прежде всего он идет на кухню в общаге, хватает с плиты первую попавшуюся кастрюлю, тащит ее к шеф-повару и говорит: "Объясите мне пожалуйста, зачем тут вот эти штуки.." - и показывает на плавающие там обрывки упаковочной бумаги, куски полиэтилена (нет, волосы упоминать не буду, можете не зажмать рты.. smile.gif). Что может сказать шеф-повар? Его спросили не нужно ли это, а именно с какой целью это тут. Прямо показали пальчиком, и заинтересованно и серьезно ждут ответа.. Я думаю, он поступит как в том старом анекдоте из серии про студента кулинарного техникума (у Хазанова было такое амплуа), когда упомянутый студент пришел к врачу с обваренными гениталиями. Он скажет: "вылейте все это на ..."
После этого он прочтет бедному несчастному студенту лекцию на тему о варке супа, и проведет практическое занятие, а также подарит тарелку хорошего супа. А потом скажет, как это свойственно профессорам-шеф-поварам: если что неясно - я к Вашим услугам, милейший.
Но студент, уяснив кое-что (хоть и не много), говорит - а, не хочу я разбираться в его супе. Его суп слишком сложен для меня (и мой семинарист говорит, что мне такой суп никогда не сварить..) Сварю-ка я свой собственный суп.. И варит. Но суп получается горький, пересоленый, мясо в нем не разжевать.. Что делать? Конечно, идти к шеф-повару! И спрашивать: а зачем я сделал так? а почему я сделал этак?..
Понимаешь, если программа небольшая или речь идет о фрагменте, где локализована ошибка - это одно. Но если нужно расхлебывать весь переперченый недосоленный суп...

опечалился сильно, подумав, что супу в твоем приготовлении мы так и не отведаем (а супу надо), потому решил настрогать в твою тему пару "премудрых телег"...
Программу, твою не смотрел, извини, но по кускам кода, в которых ты плаваеш, пытаясь разобраться, диагноз мне стал ясен.
А именно-ТЫ НЕ ПОНИМАЕШЬ ЛОГИКИ ДЕЙСТВИЙ ПРОГРАММЫ, КОТОРАЯ БУДЕТ РЕШАТЬ ТВОЮ ЗАДАЧУ.
Вот смотри: есть шарик, с параметрами (X,Y,R) (пусть R в простейшем случае не меняется) и программа должна постоянно отслеживать их состояние, и причем на основании определенной логики (Если А, то В). Сначала надо было понять эту логику, потом прописать алгоритм, затем уже начинать писать программу, а не наоборот. Ты же сразу пытаешься разобраться в коде (сначала чужом, затем в своем).
(Если все понятно, можешь дальше не читать...)
Да, на первый взгляд простая задача-и чуть ли не на уровень Искуственного Интеллекта тянет...Но не баись-вдвоем не пропадем!-(она чуть проще).
Щас "аз, многогрешный" будет перечить Lapp'у-уже коленки трясуться...
Все советы из раздела "Физика" оставь побоку, поскольку на Паскале можно моделировать не только физическую среду, а какую угодно среду, хватило бы знания программирования, математики и логики, и (главное!) фантазии, творческого воображения и воли...
Я знаю, о чем говорю, потому что изучал Паскаль в рамках предмета "Математич.моделирование электромеханических систем", и там надо было не только написать работающий код, и даже не просто решить систему уравнений, а чтобы эта система уравнений правильно моделировала электродвигатель, и чтобы он работал, т.е. вращался...Так вот: проверка на соответсвие реальной физике в Паскаль не встроена, там можно прописать уравнения и логику, которая моделирует то, чего в природе нет...В твоем случае это означает, что шарики можно заставить пульсировать, отражаться и вообще плясать под балалайку...
Не зацикливайся не на физике процесса (какая захочешь, такая и будет), не на коде-взгляни на проблему шире...(Стереотипное мышление-между нами!-не лучший советчик...)
Это называется "открытый простор"-включи воображение, сначала представь себе идеальный конечный результат (т.е.в твоем случае-какой ты хочешь видеть свою программу), а затем препятствия, которые мешают тебе в его достижении-и не наоборот, иначе твоя мысля отразиться от первого же препятсвия, как шарик от борта, и конечная цель даже в представлении будет неясной...
Приемы раскрытия творческого мышления человека (типа "открытого простора" ), не только известны, но систематизированы. Есть даже ТРИЗ-Теория Решения Изобретательских Задач (если проснулась творческая жилка и решимость самой решить до конца-прочитай об этом всем www.trizland.ru,www.trizminsk.org и др.) и вперед...
(Если все понятно, можешь дальше не читать...)
Теперь о решении твоей задачи-если в Паскале полно возможностей и опций (процедуры, фунции, массивы и др.) для Cod-Master'а типа volvo или Lapp-не пытайся сразу все использовать, используй лишь те, что нужны для решения твоей задачи...Еще раз говорю-задача не на физику, а на корректную логику-вот и рассуждай логически.
Итак, есть шарик, с параметрами (X,Y,R), и для начала один. Есть направления его движения на восемь сторон Верх(V), Верх-Право(VP), Право(P), Низ-Право (NP), Низ (N), Низ-Лево(NL), Лево (L), Верх-Лево(VL).
(Пока берем четырехсторонюю...VP,NP,VL,NL). И изменения направления на границе. Это всё! И все это реализовано в моей простоватой программе:
 program Sharik;
uses graph,crt;
var Gd, Gm, X, Y, R: Integer; Napr: string;
begin
Gd := Detect; InitGraph(Gd, Gm, ' ');
X:=320; Y:=240; R:=10; Napr:='NP';
repeat
setcolor(15);
Line(20, 40,20, 440); Line(20,40,620,40);
Line(620,40,620,440); Line(620,440,20,440);
Circle(X,Y,R);
delay(500);
setcolor(0);
Circle(X,Y,R);
if Napr='VP' then begin
X:=X+1; Y:=Y-1;
end;
if Napr='NP' then begin
X:=X+1; Y:=Y+1;
end;
if Napr='NL' then begin
X:=X-1; Y:=Y+1;
end;
if Napr='VL' then begin
X:=X-1; Y:=Y-1;
end;
if Y=40 then begin
if Napr='VP' then Napr:='NP';
if Napr='VL' then Napr:='NL';
end;
if X=620 then begin
if Napr='VP' then Napr:='VL';
if Napr='NP' then Napr:='NL';
end;
if Y=440 then begin
if Napr='NP' then Napr:='VP';
if Napr='NL' then Napr:='VL';
end;
if X=20 then begin
if Napr='VL' then Napr:='VP';
if Napr='NL' then Napr:='NP';
end;
until keypressed;
CloseGraph
end.

Так вот-это базовая конструкция-хочешь поменять параметры шарика, поменяй X,Y,R, хочешь изменить скорость-вместо X+1 поставь X+N (и для Y тоже, и пропиши N в Var'е), или просто уменьши/увеличь задержку в delay(), хочешь добавь еше шарик-тогда у каждого шарика свои параметры ш1(X1,Y1,R1), ш2(X2,Y2,R2)(И сделай логику для соударения шариков, как я сделал для границ-там все просто), потом сделай ввод переменных скорости и др. с клавиатуры и т.д..Главное-вноси изменения поэтапно, и по изменению за раз-внесла одно-проверила, внесла следующее и т.д. Короче, твори!
"Гуру", Марина, это хорошо, а "своим умом" гораздо лучше. Гуру-он витает в высотах Объектно-Ориентированного Программинга, куда небожителям снизойти до Нас, простых людей...
Будь здорова, Мариночка!
Жму лапку котику на твоем аватарчике!
С нетерпением жду твоего супчика!
Искренне, от души, Чужак.
P.S. а кто посмеяся над сим посланием-тот посмеяся над собой.

Сообщение отредактировано: Чужак - 29.04.2007 1:01


--------------------
Смысл откроется тебе. Красками играя
Жизнь предстанет как поток без конца и края.


В этом мире порой разбиваютсямечты
Но чтобы он стал другой Вдруг в него приходишь ТЫ...

После странствий и скитаний настают другие времена.
Старая волна уходит и приходит новая волна.
 Оффлайн  Профиль  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 5:57
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"