Показать сообщение отдельно
Старый 10.02.2006, 20:30   #8
Кандидат наук
 
Аватар для pokibor
 
Регистрация: 13.06.2005
Адрес: 0x00000000
Сообщений: 8,356
Репутация скрыта [+/-]
Цитата:
Сообщение от SkyLine
pokibor
А можно по подробнее про 2D.
Не совсем понимаю, что подробнее... Ну рассмотрю случай, когда область столкновения представляется окружностью как самый простой. Вообще, если не дружишь с геометрией, то трудно тебе будет на поприще разработчика игр... Итак, у тебя есть объект - юнит с координатами x0 и y0, а также радиусом коллизионой окружности r, и есть объект - прпятствие с координатами X и Y, коллизионая окружность R. Допустим, мы знаем, что в текущий момент юнит не столкнулся с препятствием. Он делает шаг. Нам интересно, сможет ли он сделать этот шаг, или столкнется с препятсвием. Пусть, если герой сделает шаг, у него координаты станут x и y. Тогда нам нужно фактически проверить, пересекает ли окружность с центром в т. (x,y) и радиусом r окружность с центром в т. (X,Y) и радиусом R. Такие задачи решаются классе в седьмом-восьмом, кстати. Очевидно, что если окружности пересекаются, то расстояние между их центрами будет меньше, чем сумма их радиусов. Расстояние между центрами в квадрате равно (т. Пифагора) (x-X)^2+(y-Y)^2, ну и по условию это должно быть < (r+R)^2. Корень не беру (а возвожу в квадрат) потому, что операция взятия корня куда более трудоемка для компьютера, нежели возведение в квадрат. Итак, получили:
Если (x-X)^2+(y-Y)^2 < (r+R)^2, то юнит шаг сделать не может и мы этот шаг запрещаем, если же нет - разрешаем.
Разумеется, куда естественнее будет сделать стенки наборами отрезков, а героя - окружностью. В таком случае придется искать столкновение сферы с отрезком, что несколько сложнее. Я эти уравнения выводил, но на память не помню. Задачка, кстати, класса для восьмого. Предоставляю это тебе. Если не осилишь, я поднапрягусь и выведу из заново. Напомню, что уравнение окружности (x-xc)^2+(y-yc)^2=r^2 (xc,yc-координаты центра, r-радиус), а отрезка -
x = (xa-xb)*c+xb
y = (ya-yb)*c+yb
0<c<1
xa,ya - координаты одного конца отрезка, xb,yb - другого, а c - как раз коэффициент, который нужно тоже найти из системы уравнений и проверить условие 0<c<1.
__________________
Товарищ, верь: пройдет она -
Эпоха лживых, злых понятий.
Весь мир очнется ото сна,
И на обломках "демократий"
Напишут наши имена!

Мы были волшебницами (оригинальное фентези)
Тень Войны (фанфик по ГП)

Последний раз редактировалось pokibor; 10.02.2006 в 20:42.
pokibor вне форума  
Отправить сообщение для pokibor с помощью ICQ Ответить с цитированием