00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include <assert.h>
00027 #include <stdlib.h>
00028
00029 #include "mat4.h"
00030 #include "vec2.h"
00031 #include "utility.h"
00032
00033 kmVec2* kmVec2Fill(kmVec2* pOut, kmScalar x, kmScalar y)
00034 {
00035 pOut->x = x;
00036 pOut->y = y;
00037 return pOut;
00038 }
00039
00040 kmScalar kmVec2Length(const kmVec2* pIn)
00041 {
00042 return sqrtf(kmSQR(pIn->x) + kmSQR(pIn->y));
00043 }
00044
00045 kmScalar kmVec2LengthSq(const kmVec2* pIn)
00046 {
00047 return kmSQR(pIn->x) + kmSQR(pIn->y);
00048 }
00049
00050 kmVec2* kmVec2Normalize(kmVec2* pOut, const kmVec2* pIn)
00051 {
00052 kmScalar l = 1.0f / kmVec2Length(pIn);
00053
00054 pOut->x *= l;
00055 pOut->y *= l;
00056
00057 return pOut;
00058 }
00059
00060 kmVec2* kmVec2Add(kmVec2* pOut, const kmVec2* pV1, const kmVec2* pV2)
00061 {
00062 pOut->x = pV1->x + pV2->x;
00063 pOut->y = pV1->y + pV2->y;
00064
00065 return pOut;
00066 }
00067
00068 kmScalar kmVec2Dot(const kmVec2* pV1, const kmVec2* pV2)
00069 {
00070 return pV1->x * pV2->x + pV1->y * pV2->y;
00071 }
00072
00073 kmVec2* kmVec2Subtract(kmVec2* pOut, const kmVec2* pV1, const kmVec2* pV2)
00074 {
00075 pOut->x = pV1->x - pV2->x;
00076 pOut->y = pV1->y - pV2->y;
00077
00078 return pOut;
00079 }
00080
00081 kmVec2* kmVec2Transform(kmVec2* pOut, const kmVec2* pV1, const kmMat4* pM)
00082 {
00083 assert(0);
00084 return NULL;
00085 }
00086
00087 kmVec2* kmVec2TransformCoord(kmVec2* pOut, const kmVec2* pV, const kmMat4* pM)
00088 {
00089 assert(0);
00090 return NULL;
00091 }
00092
00093 kmVec2* kmVec2Scale(kmVec2* pOut, const kmVec2* pIn, const kmScalar s)
00094 {
00095 pOut->x = pIn->x * s;
00096 pOut->y = pIn->y * s;
00097
00098 return pOut;
00099 }
00100
00101 int kmVec2AreEqual(const kmVec2* p1, const kmVec2* p2)
00102 {
00103 return (
00104 (p1->x < p2->x + kmEpsilon && p1->x > p2->x - kmEpsilon) &&
00105 (p1->y < p2->y + kmEpsilon && p1->y > p2->y - kmEpsilon)
00106 );
00107 }