Я в растерянности. Я пытался реализовать этот код по адресу: http://www.blackpawn.com/texts/pointinpoly/default.html
Однако я не знаю, как это возможно, что перекрестное произведение, присутствующее между двумя 2D-векторами, может также привести к 2D-вектору. Для меня это не имеет смысла. Это также присутствует в некоторых примерах пересечения полигонов и линий в прекрасной книге «Обнаружение столкновений в реальном времени», где даже скалярные тройки между 2D-векторами появляются в кодах (см., Например, стр. 189).
Проблема в том, что, насколько я понимаю, псевдокросс-произведение двух 2D-векторов может привести только к скаляру (v1.x v2.y-v1.y v2.x ) или самое большее в трехмерном векторе, если добавить два нуля, поскольку этот скаляр представляет размерность Z. Но как это может привести к двумерному вектору?
Я не первый, кто спрашивает об этом, и по совпадению, пытаясь использовать тот же пример кода: Перекрестное произведение двух 2D-векторов Однако, как легко увидеть, ответ, исходный вопрос после обновления и комментарии в этой цепочке закончились полным беспорядком, если я осмелюсь так сказать.
Кто-нибудь знает, как мне получить эти 2D-векторы из перекрестного произведения двух 2D-векторов? Если нужно предоставить код, я могу обрабатывать C #, JavaScript и немного C ++.
ИЗМЕНИТЬ - вот фрагмент кода в книге, как я упоминал выше:
int IntersectLineQuad(Point p, Point q, Point a, Point b, Point c, Point d, Point &r)
{
Vector pq = q - p;
Vector pa = a - p;
Vector pb = b - p;
Vector pc = c - p;
// Determine which triangle to test against by testing against diagonal first
Vector m = Cross(pc, pq);
float v = Dot(pa, m); // ScalarTriple(pq, pa, pc);
if (v >= 0.0f) {
// Test intersection against triangle abc
float u = -Dot(pb, m); // ScalarTriple(pq, pc, pb);
if (u < 0.0f) return 0;
float w = ScalarTriple(pq, pb, pa);
....