Показать сообщение отдельно
Старый 03.01.2010, 22:33   #15
drwoland
AnyKey`щик
 
Регистрация: 15.05.2009
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Массивы в типе

Сообщение от Dstalk Посмотреть сообщение
И еще вопросик:


Имеется начальная точка (0,0) и пункт назначения; имеются препятствия (красным цветом), они в массиве карта[maxX,maxY].
Вопрос: как вычислить клетки по которым пойдет объект до столкновения с препятствием? Чего-то я думал, думал - каша какая-то выходит. Помогите пожалуйста)))

P.S. даже проще, если без препятствий - как вычислить по каким клеткам он пройдет? Кстати движения наискосок допускаются...
Клетки по которым пойдет объект из точки (startx;starty) в точку (finishx;finishy) можно посчитать так:

dx = finishx-startx 
dy = finishy-starty

Angle#   = atan(dx,dy)           ;угол от начальной точки до конечной
Lenght# = sqrt(dx^2+dy^2)  ;длина проверяемого отрезка
maxsteps = 10                       ;количество шагов проверки чем больше - тем точнее проверка. Ставь его равным Abs(Lenght#) для средней точности
steplenght# = lenght/steps     ; размер одного шага.
currx# = startx 
curry# = starty

for currstep = 0 to maxsteps
currX# = currx# + steplenght#*sin (angle#) ; это координаты клетки через которую пройдет объект на этом шаге
currY# = currx# + steplenght#*cos(angle#) ; округли их до минимального целого.
next
(Offline)
 
Ответить с цитированием