Когда я вычисляю скалярное произведение двух векторов a = (-0, -0, -5)
и b = (0, 1, 0)
, используя мой пользовательский класс Vector
, он дает мне 1
, когда он должен был дать 0
.Тем не менее, когда я использую PVector
, он работает как ожидалось.Я взглянул на исходный код для PVector
, но не заметил ничего, что отличалось бы от того, что я пытался сделать.
Я подозреваю, что это как-то связано с тем, как -0.0f
равно +1.0f
, и я знаю, что могу просто использовать PVector
, но странно, что моя реализация не работает.Кто-нибудь знает, почему он сломан?(Я использую Обработка 1.5.1)
Простой тестовый пример, сравнивающий точечные продукты для PVector
и моего Vector
:
void setup() {
Vector a = new Vector(-0, -0, -5);
Vector b = new Vector(0, 1, 0);
println(a.dotProduct(b));
PVector pA = new PVector(-0, -0, -5);
PVector pB = new PVector(0, 1, 0);
println(pA.dot(pB));
}
class Vector {
public float x, y, z, w;
Vector(float x, float y, float z) {
this.x = x;
this.y = y;
this.z = z;
this.w = 1;
}
void doScale(float scalar) {
this.x *= scalar;
this.y *= scalar;
this.z *= scalar;
}
float dotProduct(Vector other) {
return this.x * other.x + this.y + other.y + this.z * other.z;
}
}