gpt4 book ai didi

java - 只有在使用自定义 Vector 类时,添加负零 float 才会导致 1.0f

转载 作者:行者123 更新时间:2023-11-30 07:30:33 25 4
gpt4 key购买 nike

当我使用我的方法计算两个 vector a = (-0, -0, -5)b = (0, 1, 0) 的点积时自定义 Vector 类,当它应该给出 0 时它给我 1。但是,当我使用 PVector 时,它按预期工作。我看了一下 source code对于 PVector,但我没有注意到我尝试做的事情有什么不同。

我怀疑这与 -0.0f 等于 +1.0f 的方式有关,我知道我可以使用 PVector ,但奇怪的是我的实现被破坏了。有谁知道它为什么坏了? (我正在使用 Processing 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;
}

}

最佳答案

问题是:

float dotProduct(Vector other) {
return this.x * other.x + this.y + other.y + this.z * other.z;
}

this.yother.y 相加,而不是将它们相乘。应该是:

float dotProduct(Vector other) {
return this.x * other.x + this.y * other.y + this.z * other.z;
}

我个人会添加括号以提高可读性:

float dotProduct(Vector other) {
return (this.x * other.x) + (this.y * other.y) + (this.z * other.z);
}

关于java - 只有在使用自定义 Vector 类时,添加负零 float 才会导致 1.0f,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7781218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com