File: Plane.cpp

package info (click to toggle)
spring 0.81.2.1%2Bdfsg1-6
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 28,496 kB
  • ctags: 37,096
  • sloc: cpp: 238,659; ansic: 13,784; java: 12,175; awk: 3,428; python: 1,159; xml: 738; perl: 405; sh: 297; makefile: 267; pascal: 228; objc: 192
file content (48 lines) | stat: -rw-r--r-- 1,320 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/*---------------------------------------------------------------------
 Terrain Renderer using texture splatting and geomipmapping

 Copyright (2006) Jelmer Cnossen
 This code is released under GPL license (See LICENSE.html for info)
---------------------------------------------------------------------*/
#include "StdAfx.h"
#include <cassert>
#include "Plane.h"


//--------------------------------------------------------- Plane

void Plane::MakePlane(const Vector3& v1,const Vector3& v2,const Vector3& v3)
{
	float rx1=v2.x-v1.x,ry1=v2.y-v1.y,rz1=v2.z-v1.z;
	float rx2=v3.x-v1.x,ry2=v3.y-v1.y,rz2=v3.z-v1.z;
	a=ry1*rz2-ry2*rz1;
	b=rz1*rx2-rz2*rx1;
	c=rx1*ry2-rx2*ry1;
	float len = (float)sqrt(a*a+b*b+c*c);
	a /= len;
	b /= len;
	c /= len;
	d=a*v2.x+b*v2.y+c*v2.z;
}

bool Plane::operator==(const Plane &pln)
{
	if((pln.a < a + EPSILON) && (pln.a > a - EPSILON) &&
		(pln.b < b + EPSILON) && (pln.b > b - EPSILON) &&
		(pln.c < c + EPSILON) && (pln.c > c - EPSILON) &&
		(pln.d < d + EPSILON) && (pln.d > d - EPSILON))  return true;
	return false;
}

bool Plane::EpsilonCompare (const Plane& pln, float epsilon)
{
	Plane t;
	t.a = fabs(a-pln.a);
	t.b = fabs(b-pln.b);
	t.c = fabs(c-pln.c);
	t.d = fabs(d-pln.d);
	if(t.a > epsilon || t.b > epsilon || t.c > epsilon || t.d > epsilon)
		return false;
	return true;
}