Vector orthogonalization
This commit is contained in:
@@ -17,6 +17,60 @@ float vec2_norm(vec2 v){
|
||||
return(len);
|
||||
}
|
||||
|
||||
void vec2_orthogonalize4(vec2 v) {
|
||||
if (fabs(v[0]) > fabs(v[1])) {
|
||||
if (v[0] >= 0) {
|
||||
v[0] = 1.0f;
|
||||
v[1] = 0.0f;
|
||||
} else {
|
||||
v[0] = -1.0f;
|
||||
v[1] = 0.0f;
|
||||
}
|
||||
} else {
|
||||
if (v[1] >= 0) {
|
||||
v[1] = 1.0f;
|
||||
v[0] = 0.0f;
|
||||
} else {
|
||||
v[1] = -1.0f;
|
||||
v[0] = 0.0f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void vec2_orthogonalize8(vec2 v) {
|
||||
float diff = fabs(fabs(v[0]) - fabs(v[1]));
|
||||
if (diff > 0.2f) {
|
||||
if (fabs(v[0]) > fabs(v[1])) {
|
||||
if (v[0] >= 0) {
|
||||
v[0] = 1.0f;
|
||||
v[1] = 0.0f;
|
||||
} else {
|
||||
v[0] = -1.0f;
|
||||
v[1] = 0.0f;
|
||||
}
|
||||
} else {
|
||||
if (v[1] >= 0) {
|
||||
v[1] = 1.0f;
|
||||
v[0] = 0.0f;
|
||||
} else {
|
||||
v[1] = -1.0f;
|
||||
v[0] = 0.0f;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (v[0] > 0.0f) {
|
||||
v[0] = 0.707f;
|
||||
} else {
|
||||
v[0] = -0.707f;
|
||||
}
|
||||
if (v[1] > 0.0f) {
|
||||
v[1] = 0.707f;
|
||||
} else {
|
||||
v[1] = -0.707f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
// SolveQuadratic
|
||||
|
||||
@@ -29,6 +29,9 @@ float vec2_norm(vec2 v);
|
||||
#define vec2_interpol(v,v1,v2,f) \
|
||||
(v)[0]=(v1)[0]-f*((v1)[0]-(v2)[0]);\
|
||||
(v)[1]=(v1)[1]-f*((v1)[1]-(v2)[1]);
|
||||
void vec2_orthogonalize4(vec2 v);
|
||||
void vec2_orthogonalize8(vec2 v);
|
||||
|
||||
|
||||
|
||||
/////////////////////////////
|
||||
|
||||
Reference in New Issue
Block a user