Вычисление площади между спрайтами - PullRequest
0 голосов
/ 13 июля 2010

Я работаю над простой 2D игрой в футбол, передавая мяч между моими игроками, я хотел бы проверить, может ли кто-либо из вражеских игроков перехватить мяч, и я хотел бы рассчитать список координат между моими игроками.игроки, если можно так выразиться, в коридоре, а затем проверьте, есть ли в этом регионе какие-либо вражеские игроки,

--------------------------
S                        S
--------------------------

Легко вычислить площадь между S, когда они лежат таким образом, но как рассчитать область, когдаони не выровнены,

       /S /
      /  /
     /  /
    /  /
   /  /
  /  /
 / S/

РЕДАКТИРОВАТЬ: Когда я имею в виду область, я хочу список координат в этой области, чтобы я мог проверить эти координаты по координатам игроков, а не по величине области.

Ответы [ 3 ]

1 голос
/ 13 июля 2010

Почему бы вам не повернуть свою систему координат, чтобы оба игрока были выровнены?Предполагая, что у вас есть фиксированное количество игроков (22 для примера), вы умножаете каждую из их (x, y) координат в матрице вращения + перевода, что делает S1 (или S2, на самом деле не имеет значения) выровненным с его компаньоном.

И вы можете вычислить матрицу вращения по этой простой формуле: http://en.wikipedia.org/wiki/Rotation_matrix#Rotation_matrix_given_an_axis_and_an_angle Дальнейшее объяснение и хороший пример: http://www.quantunet.com/flash8/knowledgebase/actionscript/advanced/matrix/matrix_rotation.html

1 голос
/ 13 июля 2010

(изображение) http://img441.imageshack.us/img441/9051/soccer.png

Показать противника между красными линиями : Рассчитать расстояние противника до линии, образованной двумя игроками (пунктирная линия) .Если это <= w/2 (w - ширина вашего "региона") , то либо враг находится внутри региона, либо позади одного из игроков.

Показать противника между оранжевыми линиями : чтобы убедиться, что он не находится позади одного из игроков, просто убедитесь, что он находится между двумя линиями , которые проходят через одного из игроков и имеют обычный ( перпендикуляр ) к первой линии (пунктирная линия, проходящая через обоих игроков).

Это скажет вам, если враг находится в желтой области:

0 голосов
/ 13 июля 2010

Если он должен быть только приблизительным, и вам нужно быстро его вычислить, тогда оцените «диаметр» вашего объекта (даже если он квадратный) и умножьте на расстояние между их центрами (минус 1 радиус на каждом конце) всего 1 диаметр). Это будет чертовски быстро и довольно близко.

Обновление: неправильно прочитал вопрос, я думал, что вы буквально хотели "область".

Вы все еще можете приблизить его, как указано выше, но определить боковые точки как точки на воображаемых кругах, на 90 градусов от линии, которая соединяет их. Опять же, он приблизительный, но он не позволяет рассчитать «ближайшую сторону объекта» и «ближайшие точки к линии».

Обновление 2:

На самом деле, даже лучше: отсортируйте точки S1 по тому, как далеко они находятся от центра S2. Выберите 2-й и 3-й ближайший. Сортируйте точки S2 в порядке их отдаленности от центра S1. Выберите 2-й и 3-й ближайший. Это 4 вершины. «1-й» самый близкий - тот, который непосредственно указывает на другой объект, таким образом, 2-й и 3-й являются «боковыми», если смотреть на другой объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...