#include "Vectors.h" void AddVector(Vector * v1, Vector * v2, Vector * v3) { v3->x = v1->x + v2->x; v3->y = v1->y + v2->y; v3->z = v1->z + v2->z; } void SubtractVector(Vector * v1, Vector * v2, Vector * v3) { v3->x = v1->x - v2->x; v3->y = v1->y - v2->y; v3->z = v1->z - v2->z; } void MultiplyVector(Vector * v1, Vector * v2, Vector * v3) { v3->x = v1->x * v2->x; v3->y = v1->y * v2->y; v3->z = v1->z * v2->z; } void DivideVector(Vector * v1, Vector * v2, Vector * v3) { v3->x = v1->x / v2->x; v3->y = v1->y / v2->y; v3->z = v1->z / v2->z; } void NormalizeVector(Vector * v) { float Mag = VectorMagnitude(v); if (Mag != 0.0) { v->x /= Mag; v->y /= Mag; v->z /= Mag; } else { v->x = 0.0; v->y = 0.0; v->z = 0.0; } } void CrossProduct(Vector * v1, Vector * v2, Vector * v3) { v3->x = (v1->y * v2->z) - (v1->z * v2->y); v3->y = (v1->z * v2->x) - (v1->x * v2->z); v3->z = (v1->x * v2->y) - (v1->y * v2->x); } void AbsoluteVector(Vector * v) { v->x = fabs(v->x); v->y = fabs(v->y); v->z = fabs(v->z); } float VectorMagnitudeSquared(Vector * v) { return ((v->x * v->x) + (v->y * v->y) + (v->z * v->z)); } float VectorMagnitude(Vector * v) { return sqrt(v->x * v->x + v->y * v->y + v->z * v->z); } void RotateVector(Vector * Look, Vector * rotate) { Vector NewLook; Vector NewRot; float angle, x, y, z, CosAngle, SinAngle; angle = VectorMagnitude(rotate); CosAngle = cos(angle); SinAngle = sin(angle); NewRot = *rotate; NormalizeVector(&NewRot); x = NewRot.x; y = NewRot.y; z = NewRot.z; NewLook.x = (CosAngle + (1 - CosAngle) * x) * Look->x; NewLook.x += ((1 - CosAngle) * x * y - z * SinAngle) * Look->y; NewLook.x += ((1 - CosAngle) * x * z + y * SinAngle) * Look->z; NewLook.y = ((1 - CosAngle) * x * y + z * SinAngle) * Look->x; NewLook.y += (CosAngle + (1 - CosAngle) * y) * Look->y; NewLook.y += ((1 - CosAngle) * y * z - x * SinAngle) * Look->z; NewLook.z = ((1 - CosAngle) * x * z - y * SinAngle) * Look->x; NewLook.z += ((1 - CosAngle) * y * z + x * SinAngle) * Look->y; NewLook.z += (CosAngle + (1 - CosAngle) * z) * Look->z; *Look = NewLook; }