Жучки, едят друг друга |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Жучки, едят друг друга |
Гersh |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 31 Пол: Мужской Реальное имя: Игорь Репутация: 0 |
Задача 229. Смоделируйте движение n случайно расположенных на плоскости жучков (точек – Авт.), каждый из которых с постоянной скоростью, ползет к жучку со следующим номером (n-й ползет к первому). При расстоянии между жучками меньшем некоторого критического преследуемый жучок считается съеденным и исчезает с экрана.
Я ее сделал, но оказалось, что жучки не должны ползти c постоянной скоростью, а должны догонять друг друга с постоянной скоросью. То есть каждый ход расстояние между двумя любыми жучками должно сокращаться. Это, очевидно, делается через задание направления и приращения скорости, но я не понял КАК это делать. Помогите кто-нибудь. Прилагается моя версия программы и мой модуль. ЗЫ. Кто хочет поприкалываться можно запускать программу в данной версии исключив процедуру Go и/или убрать очисту экрана. Получается сприкольно! ;) (Особенно если подключить драйвер BGI256) Прикрепленные файлы GERSH229.PAS ( 3.34 килобайт ) Кол-во скачиваний: 406 GERSH.PAS ( 652 байт ) Кол-во скачиваний: 388 |
Lapp |
Сообщение
#2
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Гersh, ты не совсем ясно выразился по поводу скорости (то она постоянна, то не постоянна, но все же постоянна..). Скорость - чисто физическое понятие, и с ним не должно быть путаницы. В твоем коде понятие скорости вообще отсутствует. Просто происходит смещение либо на 1 по х, либо на 1 по у, либо сразу по обеим осям. Я рекомендую тебе подойти к этому вопросу, как полагается.
1. Обозначь границы поля в абстрактных координатах: скажем, от 0 до 1 по х и от 0 до 0.75 по у. 2. Напиши функцию перевода абстрактных координат в реальные экранные. 3. Все расчеты производи в этих абстрактных координатах, а перед выводом объекта на экран производи перевод с помощью той функции. Если все будет написано так (и только в этом случае), понятие скорости и все остальное реализуется естественным образом. В настоящем же виде программа не годится для выполнения условий задачи. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Гersh |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 31 Пол: Мужской Реальное имя: Игорь Репутация: 0 |
Ого! Е мае! Да, скорости у меня пока что в помине нет. Я просто НЕ ПОНИМАЮ вообще как с этими скоростями работать - в этом и проблема. Я конечно намудрил с описанием скоростей... Но сама задача-то есть... |
Lapp |
Сообщение
#4
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Работать со скоростями совсем не сложно.
Скорость - вектор, у него две компоненты: Vx и Vy. Если положение точки в момент t есть х,у то то в момент t+dt будет x+Vx*dt, y+Vy*dt Чего тут такого сложного?.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Гersh |
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 31 Пол: Мужской Реальное имя: Игорь Репутация: 0 |
Чего?? Ну ты дал! ;)) Нет, это все ясно. У меня проплема с рассчетом координат... Чтобы расстояние между двумя любыми жучками сокращалось кажду секунду... Я просто не понимаю как это сделать... |
Lapp |
Сообщение
#6
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Чтобы расстояние между двумя любыми жучками сокращалось кажду секунду... Я просто не понимаю как это сделать... Это условие (между любыми) противоречит первоначальному. Если каждый n-ный догоняет (n+1)-го, то вектор скорости направь по вектору разницы векторов на каждого из них. То есть в любой момент каждый жук ползет точно по направлению к следующему (не обращая внимания на остальных, в том числе и на того, который догоняет его). По сути, оно так и было в твоем решении, только скорость была кривая - вот и все. И результат тоже будет похожий - они все друг друга съедят. А в процессе каждый опишет траекторию, которая назвается в математике "кривая погони". -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Гersh |
Сообщение
#7
|
Новичок Группа: Пользователи Сообщений: 31 Пол: Мужской Реальное имя: Игорь Репутация: 0 |
Да, извиняюсь... Не между любыми, а между вдумя с соседними номерами. Описался, сорри. Наврено я имел ввиду, между любыми -> любой парой -> всеми парами соседних...
В общем ясно... Короче, понятно... Код за меня никто не напишет... А мне завтра сдаватсья... Так что спасибо за помощь... Мож подумаю на досуге... |
Гersh |
Сообщение
#8
|
Новичок Группа: Пользователи Сообщений: 31 Пол: Мужской Реальное имя: Игорь Репутация: 0 |
не нашел где редактирование, так что Отвечаю
кстати, прогу-то доделал, забыл выложить. если кому вдруг интересно) ЗЫ. правда не помню, какая версия последняя, Паскаль снес. вроде эта... Прикрепленные файлы GERSH229.rar ( 1.82 килобайт ) Кол-во скачиваний: 314 |
Текстовая версия | 13.10.2024 21:45 |