Определение граничных нормалей в теореме о разделяющей оси SAT - PullRequest
1 голос
/ 09 октября 2010

Алгоритм SAT требует, чтобы вы нашли нормаль каждого ребра каждой фигуры (по существу, вектор, перпендикулярный вектору ребра), чтобы использовать в качестве разделительных осей. Это можно сделать очень просто ...

(x, y) => (-y, x)

OR

(x, y) => (y, -x)

Что следует использовать в алгоритме SAT? По сути, это вопрос того, следует ли использовать нормаль левой руки или нормаль правой руки. Будет ли это иметь значение, которое используется? Должна ли использоваться только левая или правая рука? Должно ли это измениться в разных ситуациях?

См. http://www.codezealot.org/archives/55#sat-axes

Ответы [ 2 ]

0 голосов
/ 09 октября 2010

Нормаль всегда должна указывать от края.Есть только два возможных решения, которые вы выяснили.Одна из них правильная, а другая неправильная.

Какая верна, зависит от двух вещей:

  • Независимо от того, являются ли ваши ребра по часовой стрелке или против часовой стрелки.* Ваша система координации.
0 голосов
/ 09 октября 2010

Это не имеет значения, если вы используете одно и то же соглашение для каждого лица, потому что нормали используются для вычисления проекций и их сравнения:

  Projection p1 = shape1.project(axis);
  Projection p2 = shape2.project(axis);
  // do the projections overlap?
  if (!p1.overlap(p2)) {

Результат (!p1.overlap(p2)) будетто же самое с обеими формулами.

HTH

...