Показать сообщение отдельно
Старый 10.10.2005, 05:50   #2
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
Привет!

конечно можем, для этого мы здесь и есть

вот пример кода:
graphics 800,600,32,2

setbuffer backbuffer()

; инициализируем генератор случайных чисел
seedrnd millisecs()

; случайная скорость по Х и Y
xspeed#=rnd(-10,10)
yspeed#=rnd(-10,10)

; случайный радиус
radius=rnd(10,50)

; случайное положение на экране
x#=rnd(0+radius,graphicswidth()-radius)
y#=rnd(0+radius,graphicsheight()-radius)

repeat
 cls

 oval x,y,radius,radius

; перемещаем шарик
 x=x+xspeed
 y=y+yspeed
 
; коррекция координат для проверки соприкосновения с краем экрана
 x1=x+radius*0.5
 y1=y+radius*0.5
 
; проверка соприкосновения с краем экрана, если да, то скорось меняется на противоположную
 if y1<radius*0.5 or y1>graphicsheight()-radius*0.5 then yspeed=-1*yspeed
 if x1<radius*0.5 or x1>graphicswidth()-radius*0.5 then xspeed=-1*xspeed
 
 flip
until keyhit(1)

end
здест про угол падения равен углу отражения сказки нет, потому, что это с точки зрения компьютера будет очень долго обрабатываться... алгоритм работает следующим образом: скорость объекта подразделяется на скорость по оси Х и скорость по оси Y, мы просто проверяем есть кружок вышел за верхнюю или нижнюю границу, меняем скорость по Y на протироположную (если он летел вверх и достиг верха то летит теперь вниз)... точно так-же по Х... можно конечно и с синусами сделать, но это потребуется если только поверхности будут кривыми или будут двигаться (крутиться), а в "квадратном" случае вот этот был-бы самым оптимальным методом...

__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием