![]() |
![]() |
Bokul |
![]()
Сообщение
#1
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Тема зародилась Задачник по ООП, а это ее продолжения.
Вот структура того, что я написал (измененная)
Исходники в виде модулей для FPC - ![]() Возникли затруднения в написания модуля TSupervisor, а именно с главным циклом и наследием этого объекта. Вот, что я написал
-------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
![]() ![]() |
Bokul |
![]()
Сообщение
#2
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Спасибо!
![]() Извиняюсь, что заставил себя ждать, зато отладил некоторые модули и сделал реализацию твоего алгоритма - теперь шарики умеют отталкиваться. ![]() Изменения в структуре объектов:
ChangeDirection, Calculation, WriteResults - абстрактные до этого времени методы я удалил. Других объектов я не трогал.. Очередная поставка модулей - ![]() Если администрация разрешает - Exe-шник : ![]() Цитата Значит, придется запоминать массив/список "впереди-идущих" точек (если сторона - значит, конечно, не каждая ее точка, а, скажем, 5-10 равноотстоящих точек между началом и концом этой стороны включительно), и проверять каждую из них на попадание в другую фигуру... Это я оставил на следующий этап - пока только одна точка ![]() Понаблюдав чуть-чуть за шариками, можно увидеть ситуации, когда они "слипаются" и летят вмести - знак того, что алгоритм имеет недостатки и его надо менять ![]() ![]() Цитата понимаешь, о чем я? Ты имеешь ввиду, буду ли я делать вогнутые объекты? Не знаю, пока - нет... ![]() Сообщение отредактировано: volvo - 3.01.2007 12:11 -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
Цитата(Bokul @ 24.12.2006 2:49) Понаблюдав чуть-чуть за шариками, можно увидеть ситуации, когда они "слипаются" и летят вмести - знак того, что алгоритм имеет недостатки и его надо менять ![]() ![]() во-первых, ты опять тратишь лишние вычислительные ресурсы... На этот раз - здесь: function TBall.distance(P:TPoint):real;Вот расскажи мне, зачем тебе нужен ТУТ корень? Что, недостаточно было возвращать целый квадрат расстояния и сравнивать его с квадратом радиуса? Это ж ускорение какое... Мало того, что операции над целыми выполняются гораздо быстрее, чем над вещественными числами, так еще и "дорогая" Sqrt не нужна, а квадрат радиуса можно вычислять и в конструкторе... Во-вторых... Попробовав уменьшить число шариков до 2-х я с удивлением обнаружил, что проверка на выход за пределы Rect не всегда корректно срабатывает (даже, если шарики вообще не сталкиваются, а идут параллельными курсами ![]() ![]() Теперь еще одно... Что ты делаешь... Ты проходишь по списку шариков, и для каждого из них запускаешь еще один проход по списку... Все прекрасно, НО... Ты не боишься, что при проверке if not(IsInfield(p^.data)) thenты вторично изменяешь направление движения какого-нибудь шарика? Вот тут и будет наблюдаться "слипание"... Итого, программа тебе на сегодня: проверить и отладить IsInField, и придумать такой механизм, который запрещал бы вторично менять направление движения одному и тому же шарику... Кстати, чуть не забыл... Абстрактность метода может задаваться директивой Abstract, тогда реализацию (эту самую "пустышку") вообще не надо писАть... ![]() Теперь вроде все... |
![]() ![]() |
![]() |
Текстовая версия | 28.07.2025 5:12 |