51 return (b.
y-a.
y) * (px-a.
x) / (b.
x-a.
x) + a.
y;
59 if ( p.
x < a.
x && p.
x < b.
x && p.
x < c.
x )
return false;
60 if ( p.
x > a.
x && p.
x > b.
x && p.
x > c.
x )
return false;
61 if ( p.
y < a.
y && p.
y < b.
y && p.
y < c.
y )
return false;
62 if ( p.
y > a.
y && p.
y > b.
y && p.
y > c.
y )
return false;
64 if ( a.
x > b.
x )
Swap(a,b);
65 if ( a.
x > c.
x )
Swap(a,c);
66 if ( c.
x < a.
x )
Swap(c,a);
67 if ( c.
x < b.
x )
Swap(c,b);
71 if ( (n>p.
y||p.
y>m) && (n<p.
y||p.
y<m) )
return false;
75 if ( (n>p.
y||p.
y>m) && (n<p.
y||p.
y<m) )
return false;
93 b.
x = a.
x*cosf(angle) - a.
y*sinf(angle);
94 b.
y = a.
x*sinf(angle) + a.
y*cosf(angle);
109 float x = p.
x*cosf(angle) - p.
y*sinf(angle);
110 float y = p.
x*sinf(angle) + p.
y*cosf(angle);
122 float x = dist*cosf(angle);
123 float y = dist*sinf(angle);
134 inline void RotatePoint(
float cx,
float cy,
float angle,
float &px,
float &py)
141 ax = px*cosf(angle) - py*sinf(angle);
142 ay = px*sinf(angle) + py*cosf(angle);
163 b.
x = p.
x*cosf(angleH) - p.
z*sinf(angleH);
164 b.
y = p.
z*sinf(angleV) + p.
y*cosf(angleV);
165 b.
z = p.
x*sinf(angleH) + p.
z*cosf(angleH);
185 a.
x = p.
x*cosf(angleH) - p.
z*sinf(angleH);
187 a.
z = p.
x*sinf(angleH) + p.
z*cosf(angleH);
191 b.
y = a.
z*sinf(angleV) + a.
y*cosf(angleV);
192 b.
z = a.
z*cosf(angleV) - a.
y*sinf(angleV);
200 if (x == 0.0f && y == 0.0f)
return 0.0f;
206 if (x > y)
return atanf(y/x);
207 else return PI*0.5f - atanf(x/y);
211 if (x > -y)
return PI*2.0f + atanf(y/x);
212 else return PI*1.5f - atanf(x/y);
219 if (-x > y)
return PI*1.0f + atanf(y/x);
220 else return PI*0.5f - atanf(x/y);
224 if (-x > -y)
return PI*1.0f + atanf(y/x);
225 else return PI*1.5f - atanf(x/y);
244 float a1 = asinf((p1.
y - center.
y) /
Distance(p1, center));
245 float a2 = asinf((p2.
y - center.
y) /
Distance(p2, center));
247 if (p1.
x < center.
x) a1 =
PI - a1;
248 if (p2.
x < center.
x) a2 =
PI - a2;
271 float length = view.
Length();
272 assert(!
IsZero(length) );
334 float nearPlane = 1.0f,
float farPlane = 1000.0f)
336 assert(fabs(farPlane - nearPlane) >= 0.01f);
337 assert(fabs(sin(fov / 2)) >= 0.01f);
339 float f = cosf(fov / 2.0f) / sinf(fov / 2.0f);
343 mat.
m[0 ] = f / aspect;
345 mat.
m[10] = (nearPlane + farPlane) / (nearPlane - farPlane);
347 mat.
m[14] = (2.0f * farPlane * nearPlane) / (nearPlane - farPlane);
358 float zNear = -1.0f,
float zFar = 1.0f)
362 mat.
m[0 ] = 2.0f / (right - left);
363 mat.
m[5 ] = 2.0f / (top - bottom);
364 mat.
m[10] = -2.0f / (zFar - zNear);
366 mat.
m[12] = - (right + left) / (right - left);
367 mat.
m[13] = - (top + bottom) / (top - bottom);
368 mat.
m[14] = - (zFar + zNear) / (zFar - zNear);
405 mat.
m[5 ] = cosf(angle);
406 mat.
m[6 ] = sinf(angle);
407 mat.
m[9 ] = -sinf(angle);
408 mat.
m[10] = cosf(angle);
419 mat.
m[0 ] = cosf(angle);
420 mat.
m[2 ] = -sinf(angle);
421 mat.
m[8 ] = sinf(angle);
422 mat.
m[10] = cosf(angle);
433 mat.
m[0 ] = cosf(angle);
434 mat.
m[1 ] = sinf(angle);
435 mat.
m[4 ] = -sinf(angle);
436 mat.
m[5 ] = cosf(angle);
447 float cos = cosf(angle);
448 float sin = sinf(angle);
453 mat.
m[0 ] = (v.
x * v.
x) * (1.0f - cos) + cos;
454 mat.
m[1 ] = (v.
x * v.
y) * (1.0f - cos) - (v.
z * sin);
455 mat.
m[2 ] = (v.
x * v.
z) * (1.0f - cos) + (v.
y * sin);
457 mat.
m[4 ] = (v.
y * v.
x) * (1.0f - cos) + (v.
z * sin);
458 mat.
m[5 ] = (v.
y * v.
y) * (1.0f - cos) + cos ;
459 mat.
m[6 ] = (v.
y * v.
z) * (1.0f - cos) - (v.
x * sin);
461 mat.
m[8 ] = (v.
z * v.
x) * (1.0f - cos) - (v.
y * sin);
462 mat.
m[9 ] = (v.
z * v.
y) * (1.0f - cos) + (v.
x * sin);
463 mat.
m[10] = (v.
z * v.
z) * (1.0f - cos) + cos;
495 return sqrtf( (a.
x-b.
x)*(a.
x-b.
x) +
496 (a.
z-b.
z)*(a.
z-b.
z) );
518 return p1 + (p2 - p1) * dist;
530 float d = -(n.
x*a.
x + n.
y*a.
y + n.
z*a.
z);
532 return fabs(n.
x*p.
x + n.
y*p.
y + n.
z*p.
z + d);
545 if ( fabs(n1.
x-n2.
x) > 0.1f ||
546 fabs(n1.
y-n2.
y) > 0.1f ||
547 fabs(n1.
z-n2.
z) > 0.1f )
550 float dist =
DistanceToPlane(plane1[0], plane1[1], plane1[2], plane2[0]);
561 float d1 = (d.
x-a.
x)*((b.
y-a.
y)*(c.
z-a.
z)-(c.
y-a.
y)*(b.
z-a.
z)) -
562 (d.
y-a.
y)*((b.
x-a.
x)*(c.
z-a.
z)-(c.
x-a.
x)*(b.
z-a.
z)) +
563 (d.
z-a.
z)*((b.
x-a.
x)*(c.
y-a.
y)-(c.
x-a.
x)*(b.
y-a.
y));
565 float d2 = (d.
x-e.
x)*((b.
y-a.
y)*(c.
z-a.
z)-(c.
y-a.
y)*(b.
z-a.
z)) -
566 (d.
y-e.
y)*((b.
x-a.
x)*(c.
z-a.
z)-(c.
x-a.
x)*(b.
z-a.
z)) +
567 (d.
z-e.
z)*((b.
x-a.
x)*(c.
y-a.
y)-(c.
x-a.
x)*(b.
y-a.
y));
572 i.
x = d.
x + d1/d2*(e.
x-d.
x);
573 i.
y = d.
y + d1/d2*(e.
y-d.
y);
574 i.
z = d.
z + d1/d2*(e.
z-d.
z);
583 float d = (b.
x-a.
x)*(c.
z-a.
z) - (c.
x-a.
x)*(b.
z-a.
z);
584 float d1 = (p.
x-a.
x)*(c.
z-a.
z) - (c.
x-a.
x)*(p.
z-a.
z);
585 float d2 = (b.
x-a.
x)*(p.
z-a.
z) - (p.
x-a.
x)*(b.
z-a.
z);
590 p.
y = a.
y + d1/d*(b.
y-a.
y) + d2/d*(c.
y-a.
y);