#include "Plane3.h" #include "Matrix4x4.h" namespace GtpVisibilityPreprocessor { Plane3::Plane3(const Vector3 &a, const Vector3 &b, const Vector3 &c) { Vector3 v1=a-b, v2=c-b; mNormal = Normalize(CrossProd(v2,v1)); mD = -DotProd(b, mNormal); } Plane3::Plane3(const Vector3 &normal, const Vector3 &point): mNormal(normal) { mD = -DotProd(normal, point); } bool PlaneIntersection(const Plane3 &a, const Plane3 &b, const Plane3 &c, Vector3 &result) { Vector3 sx(a.mNormal.x, b.mNormal.x, c.mNormal.x), sy(a.mNormal.y, b.mNormal.y, c.mNormal.y), sz(a.mNormal.z, b.mNormal.z, c.mNormal.z), sd(a.mD, b.mD, c.mD); Matrix4x4 md(a.mNormal, b.mNormal, c.mNormal), mx, my, mz; mx.SetColumns(sd, sy, sz); my.SetColumns(sx, sd, sz); mz.SetColumns(sx, sy, sd); double det = md.Det3x3(); if (abs(det)