![]() |
![]() |
Bokul |
![]()
Сообщение
#1
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Тема зародилась Задачник по ООП, а это ее продолжения.
Вот структура того, что я написал (измененная)
Исходники в виде модулей для FPC - ![]() Возникли затруднения в написания модуля TSupervisor, а именно с главным циклом и наследием этого объекта. Вот, что я написал
-------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
![]() ![]() |
Bokul |
![]()
Сообщение
#2
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Цитата НО как только первый шар касается нижней границы и меняет направление, то же самое делает и второй шар Не выходит спроектировать тоже самое (хотя, когда много шаров я видел ситуации, как шар менял направления не долетая до стенки), можешь дать данные для двух шаров, когда это происходит? Цитата кстати, меняет он направление не по закону "угол падения равен углу отражения", а на противоположное - на 180 градусов ![]() Код uses math; function ChangeDirection(l:real):real; function mydiv(a,b:real):longint; begin mydiv:=trunc(a/b); end; function mymod(a,b:real):real; begin mymod:=a-mydiv(a,b)*b; end; const l90=pi/2; begin ChangeDirection:=mydiv(l,l90)*l90 + (pi-mymod(l,l90)); end; begin writeln(radtodeg(ChangeDirection(degtorad(120))):0:2); readln; end. Как видишь она не получает никаких внешних данных, но это не правильно. Почему? Вот ![]() Выходит нам надо передавать этой процедуре угол (T) под каким располагается поверхность об какую ударился шарик. И новый угол полёта = T+L где L - угол до соударения. Но так как метод ChangeDirection один для всех (и для случаев столкновения с другими шарами), то нужно знать под каким углом(P) соударяются объекты, для шариков он будет таковым: P:=arctan((y2-y1)/(x2-x1))+90 x1,y1- координаты центра (точка А на рисунке) первого шара x2,y2- координаты центра (точка В на рисунке) второго шара ![]() Угол P должен высчитывать TSupervisor, но в зависимости от столкнувшихся объектов, он будет вычисляться по разному. Как предлагаешь TSupervisor-у без наследия определять этот угол для любых возможных наследников TGObject? Сообщение отредактировано: Bokul - 25.12.2006 0:13 -------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
![]() ![]() |
![]() |
Текстовая версия | 28.07.2025 5:16 |