K-Dop столкновение между различными K и томами - PullRequest
1 голос
/ 30 января 2010

И теперь, после некоторой работы, я наконец-то понял, как создаются ограничивающие тома KDop и как пересекаются коллизии, и я создал их рабочую реализацию. Теперь проблема в другом. : D

Как я могу пересечь (это должно быть возможно, или это не имело бы никакого смысла) 2 K-Dop различных значений K? (очевидно, мы заранее знаем, какая ось использовалась для создания этих 2 K-Dop.)

Например, как я могу пересечь DOP6 (AABB) и DOP14 (AABB + углы обрезаны)? Или DOP14 (AABB + срезанные углы) и DOP26 (AABB + срезанные углы + обрезанные кромки)?

Простой метод (между KDOP с тем же K):

 public Boolean Intersects(kDOP a, kDOP b)
        {
            // TODO : How to do if the K is not the same?
            for (int i = 0; i < a.K / 2; i++)
                if ((a.Min[i] > b.Max[i]) || (a.Max[i] < b.Min[i]))
                    return false;
            return true;
        }

Другой вопрос. Как сделать пересечение между KDOP и Сферой? КДОП и капсула? КДОП и ООБ? КДОП и ААББ? (это должно быть проще, если мы знаем, как поступить с разными K (поскольку AABB - это DOP6 в принципе)) Я имею в виду, каков общий способ сделать пересечение между этими простыми структурами?

Большое спасибо за ответы !!!

РЕДАКТИРОВАТЬ: Из какого-то поиска в сети кажется, что ось разделения - это путь, но я не могу найти никакой подробной информации о том, как реализовать это в K-DOP. : P

РЕДАКТИРОВАТЬ 2: У кого-то есть рабочая реализация теоремы об отделенной оси по KDOP? : |

1 Ответ

1 голос
/ 30 января 2010

Если Ks другого порядка, просто запустите цикл i до минимума a.K / 2 или b.K / 2.

...