Marcus Aseth
Utente Attivo
- Messaggi
- 408
- Reazioni
- 138
- Punteggio
- 60
Domanda :D
Codice sotto sono le funzioni dentro la mia classe Vector:
Mentre invece questo è il contenuto di main(), notare che vY è inclinato:
E questo è l'output nella console:
ignorando il fatto che sto applicando la cosa solo sull'asse X (per vedere se funziona correttamente prima di continuare), questa procedura in teoria dovrebbe rendere i vettori perpendicolari e ritornarmi un dot product = 0.
E visto l'output, sto applicando male dal punto di vista matematico o semplicemente una precisione di 0.00000 non si può ottenere?
Inoltre dopo la chiamata a normalize, cos'è quel numero stranissimo "1.90735e-06" ?
Codice sotto sono le funzioni dentro la mia classe Vector:
Codice:
//Methods
inline float computeMagnitude() {
magnitude = sqrt(x*x + y*y + z*z); return magnitude;
}
inline void normalize() {
computeMagnitude();
x = x / magnitude; y = y / magnitude; z = z / magnitude;
}
inline float angleBetween(Vector& v1, Vector& v2) {
return acos(Vector::dotProduct(v1, v2) / (v1.computeMagnitude() * v2.computeMagnitude()));
}
inline void orthogonalization(Vector v2) {
this->x = x - (this->magnitude * cos(angleBetween(*this, v2)));
}
//Static Method
static inline float dotProduct(const Vector& v1, const Vector& v2) {
return v1.x*v2.x + v1.y*v2.y + v1.z*v2.z;
}
Mentre invece questo è il contenuto di main(), notare che vY è inclinato:
Codice:
int main()
{
Vector vX(100, 0, 0), vY(30, 100, 0);
cout << "vY magnitude = " << vY.computeMagnitude() << endl;
cout << "(vY,vX) dot product: " << Vector::dotProduct(vX, vY) << endl << endl;
cout << "orthogonalization..." << endl;
vY.orthogonalization(vX); //orthogonalize vY based on vX
cout << "dot product: " << Vector::dotProduct(vX, vY) << endl;
cout << "vY magnitude = " << vY.computeMagnitude() << endl << endl;
cout << "normalize vY" << endl;
vY.normalize();
cout << "dot product: " << Vector::dotProduct(vX, vY) << endl;
cout << "vY magnitude = " << vY.computeMagnitude() << endl;
return 0;
}
E questo è l'output nella console:
vY magnitude = 104.403
(vY,vX) dot product: 3000
orthogonalization...
dot product: 0.000190735
vY magnitude = 100
normalize vY
dot product: 1.90735e-06
vY magnitude = 1
ignorando il fatto che sto applicando la cosa solo sull'asse X (per vedere se funziona correttamente prima di continuare), questa procedura in teoria dovrebbe rendere i vettori perpendicolari e ritornarmi un dot product = 0.
E visto l'output, sto applicando male dal punto di vista matematico o semplicemente una precisione di 0.00000 non si può ottenere?
Inoltre dopo la chiamata a normalize, cos'è quel numero stranissimo "1.90735e-06" ?