Реклама

 
1 голос
 
95 просмотров
11.11.2019 / 10:58  GOAR

Столкновение двух обьектов (Pascal)

доброго времени суток
вопрос: как правильно составить столкновение двух обьектов (2D).?
  есть какая процедура?
   или же столкновение предавать за щет координат (х,у,х1,у1 коорд. 2х обьектов)?

если кто чет знает, подскажите. Зарание спасибо.
Буду благодарен за любую инфу.)
Изм. aNNiMON от 11.11.2019 / 17:48
Ответы
 
1 голос
 
# 11.11.2019 / 13:18  SuperSystem
1.если два объекта круги:
x1, y1 - координаты 1
x2, y2 - координаты 2
r1 - радиус 1
r2 - радиус 2

if sqrt(sqr(x1 + x2) + sqr(y1 + y2)) < (r1 + r2) then...

2.если прямоугольные:
x1, y1 - координаты 1
x2, y2 - координаты 2
w1, h1 - ширина и высота 1;
w2, h2 - ширина и высота 2;
s1 - скорость 1
s2 - скорость 2

if ((x1 + w1) > x2) and (x1 < x2) then begin
x1 := x1 - s1;
x2 := x2 + s2;
end;
if ((x2 + w2) > x1) and (x2 < x1) then begin
x1 := x1 + s1;
x2 := x2 - s2;
end;
if ((y1 + h1) > y2) and (y1 < y2) then begin
y1 := y1 - s1;
y2 := y2 + s2;
end;
if ((y2 + h2) > y1) and (y2 < y1) then begin
y1 := y1 + s1;
y2 := y2 - s2;
end;
11.11.2019 / 14:51  GOAR
спасибо, попробую )
 
0 голосов
 
# 11.11.2019 / 17:16  Magatino
Можно и через массив игрового поля (и не только) сталкивать объекты, перебирать вокруг объекта ячейки массива на существования других объектов.
11.11.2019 / 18:00  GOAR
пример?
11.11.2019 / 18:56  RblSb
https://annimon.com/code/5180
 
0 голосов
 
# 11.11.2019 / 15:24  RblSb
Ссылка из второго ответа нужна только для выпуклых многоугольников, если говорить про простое столкновение двух прямоугольников или кругов, алгоритм на js:
https://developer.mozilla.org/..._collision_detection
Или укороченный вариант (для прямоугольников):

  1. function aabb(a, b) { // принимает две структуры, возвращает true/false
  2.     return !( // ! это not в Pascal
  3.         a.y + a.h < b.y || a.y > b.y + b.h ||
  4.         a.x + a.w < b.x || a.x > b.x + b.w
  5.     );
  6. }

Вместо передачи объектов/структур параметрами функции (не знаю что именно для этого в Pascal) передача x, y, w, h обоих фигур вполне подойдет.
 
0 голосов
 
# 11.11.2019 / 13:23  vl@volk
Посмотрите раздел "полезные коды" на наличие подобных решений. Например есть вот такой вот метод https://annimon.com/code/5171

Так же есть и другие алгоритмы определения столкновения, сейчас алгоритмы очень легко находится на вкус и цвет. Полезно будет поискать исходники на GitHub
11.11.2019 / 14:53  GOAR
cnacuбо )
Всего: 4

Мы в соцсетях

vk tw tg yt

Пожертвования

Аноним2850 р.
Freddy1700 р.
riseremi1611 р.
NaruTrey800 р.
vlavolk637 р.