Решение кросс-произведения двух 3D-векторов в однородных координатах (x, y, z, w) - PullRequest
1 голос
/ 09 мая 2020

Я хочу вычислить перекрестное произведение x и вектора y без numpy или какого-либо импорта.

x = Vector(1,2,1,0)  
y = Vector(0,1,2,1)

, но мой результат всегда неверен. что мне здесь не хватает?

def crossproduct(x, y):
        final = Vector()
        final.v[0] = y.v[1] * v.v[2] - x.v[2] * y.v[1]
        final.v[1] = y.v[2] * v.v[3] - x.v[3] * y.v[2]
        final.v[2] = y.v[3] * v.v[0] - x.v[0] * y.v[3] 
        final.v[3] = y.v[0] * v.v[1] - x.v[1] * y.v[0]
        return final

1 Ответ

1 голос
/ 09 мая 2020

Решение креста на Vec4 (однородное) аналогично решению его как Vec3 (декартово), поскольку вы находитесь в трех измерениях, независимо от того, как вы используете компонент w.

Проверьте свою формулу пересечения, та, которую я обычно использую, выглядит так:

crossX = vector1.Y * vector2.Z - vector2.Y * vector1.Z
crossY = -(vector1.X * vector2.Z - vector2.X * vector1.Z)
crossZ = vector1.X * vector2.Y - vector2.X * vector1.Y
crossW = 0.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...