Функция (столкновение двух 2D прямоугольныков) - Игростроение и развлечение

Форма входа

Приветствую Вас Гость!

Логин:
Пароль:

Наш опрос

Зачем нужны книги?
Всего ответов: 61


    Случайное фото

    Статистика


Поддержите наш проект

WebMoney:
R309699065243
U292079291240
Z373355457648

Счётчики


Rambler's Top100
Рейтинг@Mail.ru

Функция (столкновение двух 2D прямоугольныков) - Игростроение и развлечение

[ Новые сообщения · Участники · Правила форума · RSS ]

WWW Site Forum
Страница 1 из 11
Игростроение и развлечение » Программинг » Алгоритмика, Математика, Физика » Функция (столкновение двух 2D прямоугольныков) (формула решение задачи.)
Функция (столкновение двух 2D прямоугольныков)
quadrathellДата: Среда, 07.01.2015, 15:38 | Сообщение # 1
Admin
Группа: Администраторы
Сообщений: 1018
Репутация: 23
Статус: Offline
Так получилось что в школе математика у меня страдала и я был одним из тех кто считал что это мне в жизни не понадобится. Но человек так устроен чтобы тянутся к чему-то новому и неизведанному и судьба забросила к игростроению... Так что в предложенной функции нет ничего нового, просто решил разобраться и поделиться с вами. В интернете можно найти много решений, но они в каких-то жутких формулах и пр...

Функцию буду описывать в простом для понимании человека даже не связанным с программированием.

И так что мы имеем:

x1 = координата х динамического объекта
y1 = координата у динамического объекта
w1 = ширина динамического объекта
h1 = высота динамического объекта

x2 = координата х объекта с которым будет столкновение
y2 = координата y объекта с которым будет столкновение
w2 = ширина объекта с которым будет столкновение
h2 = высота объекта с которым будет столкновение

в данной функции, мы будем искать относительное смещение динамического объекта при столкновении с другим объектом:

функция:

px = 0 относительное смещение динамического объекта по оси х
py = 0 относительное смещение динамического объекта по оси у

Если x1 < x2+w2 и
x2 < x1+w1 и
y1 < y2+h2 и
y2 < y1+h1 то
Если (x2+w2/2)-(x1+w1/2) < 0 то
px = (x2+w2) - x1
Иначе px = x2 - (x1+w1)
Конец
Конец

Если (y1+h1/2)-(y2+h2/2) < 0 то
py = y2 - (y1+h1)
Иначе py = (y2+h2) - y1
Конец

Если abs(px) > abs(py) то
px = 0
Иначе py = 0
Конец

Конец функции.

После этой функции прибавляем результаты к координатам нашего объекта:

Итог:
x1 = x1 + px
y1 = y1 + py


Прелесть такого решения в том, что функция определяет коллизию между объектами и вычисляет физическое столкновение...

Код
function CheckCollision(x1,y1,w1,h1,x2,y2,w2,h2)
local pX = 0
local pY = 0
      if x1 < x2+w2 and
          x2 < x1+w1 and
          y1 < y2+h2 and
          y2 < y1+h1 then
if (x2+w2/2)-(x1+w1/2) < 0 then
pX = (x2+w2) - x1
else pX = x2 - (x1+w1) end

if (y1+h1/2)-(y2+h2/2) < 0 then        
pY = y2 - (y1+h1)
else pY = (y2+h2) - y1 end

if math.abs(pX) > math.abs(pY) then pX = 0
else pY = 0 end
return pX, pY
end
end


Возможно есть и другие решения, делитесь B)


 
quadrathellДата: Среда, 11.03.2015, 15:59 | Сообщение # 2
Admin
Группа: Администраторы
Сообщений: 1018
Репутация: 23
Статус: Offline
Кому-то может пригодится, формула столкновение двух окружностей
(x2-x1)^2 + (y2-y1)^2 <(R1+R2)^2


 
Игростроение и развлечение » Программинг » Алгоритмика, Математика, Физика » Функция (столкновение двух 2D прямоугольныков) (формула решение задачи.)
Страница 1 из 11
Поиск: