00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <common/VectorLib.h>
00023 #include <common/Defines.h>
00024 #include <math.h>
00025
00026 Vector VectorLib::reflection(Vector &ray, Vector &normal)
00027 {
00028 Vector s = ray.Normalize();
00029 Vector n = normal.Normalize();
00030
00031 return -((n * (2 * s.dotP(n))) - s);
00032 }
00033
00034 bool VectorLib::sphereIntersection(Vector &start, Vector &end,
00035 Vector &sphereCentre, float radius, float &distance)
00036 {
00037 if (start == end) return false;
00038
00039 Vector EO = sphereCentre - start;
00040 Vector V = (end - start).Normalize();
00041 float v = EO.dotP(V);
00042 float disc = (radius * radius) - (EO.dotP(EO) - (v * v));
00043
00044 if (disc >= 0.0f)
00045 {
00046 float d = sqrtf(disc);
00047 if (v - d > 0)
00048 {
00049 distance = v - d;
00050 return (distance >= 0.0f && distance <= 1.0f);
00051 }
00052 else if (v + d > 0)
00053 {
00054 distance = v + d;
00055 return (distance >= 0.0f && distance <= 1.0f);
00056 }
00057 }
00058
00059 return false;
00060 }