11#define _USE_MATH_DEFINES
12#define _CRT_SECURE_NO_DEPRECATE 1
20#include <OpenMEEG_Export.h>
24 inline double sqr(
const double x) {
return x*x; }
34 Vect3(
const double x1,
const double x2,
const double x3) { m[0] = x1; m[1] = x2; m[2] = x3; }
35 Vect3(
const double a=0.0) { std::fill(&m[0],&m[3],a); }
37 Vect3(
const Vect3& v) { std::copy(&v.m[0],&v.m[3],&m[0]); }
39 operator const double*()
const {
return m; }
42 for (
unsigned i=0;i<3;++i)
48 std::copy(&v.m[0],&v.m[3],&m[0]);
52 double&
x() {
return m[0]; }
53 double x()
const {
return m[0]; }
55 double&
y() {
return m[1]; }
56 double y()
const {
return m[1]; }
58 double&
z() {
return m[2]; }
59 double z()
const {
return m[2]; }
61 double operator<(
const Vect3& v)
const {
return ((m[0]!=v.
x()) ? (m[0]<v.
x()) : ((m[1]!=v.
y()) ? (m[1]<v.
y()) : (m[2]<v.
z()))); }
63 double norm()
const {
return sqrt(norm2()); }
71 void operator*=(
const double d) { m[0] *= d; m[1] *= d; m[2] *= d; }
74 void multadd(
const double d,
const Vect3& v) {m[0] += d*v.
x(); m[1] += d*v.
y(); m[2] += d*v.
z();}
83 om_assert(i>=0 && i<3);
88 om_assert(i>=0 && i<3);
94 inline double solid_angle(
const Vect3& v1,
const Vect3& v2,
const Vect3& v3)
const;
97 *
this /= (*this).
norm();
112 const Vect3& V0 = *
this;
113 const Vect3& Y1 = V1-V0;
114 const Vect3& Y2 = V2-V0;
115 const Vect3& Y3 = V3-V0;
116 const double y1 = Y1.
norm();
117 const double y2 = Y2.
norm();
118 const double y3 = Y3.
norm();
119 const double d =
det(Y1,Y2,Y3);
120 return (fabs(d)<1e-10) ? 0.0 : 2*atan2(d,(y1*y2*y3+y1*
dotprod(Y2,Y3)+y2*
dotprod(Y3,Y1)+y3*
dotprod(Y1,Y2)));
124 return is >> v.
x() >> v.
y() >> v.
z();
128 return os << v.
x() <<
' ' << v.
y() <<
' ' << v.
z() ;
Vect3 operator^(const Vect3 &v) const
Vect3 operator+(const Vect3 &v) const
Vect3 operator*(const double d) const
void operator+=(const Vect3 &v)
double operator<(const Vect3 &v) const
double & operator()(const int i)
void operator-=(const Vect3 &v)
Vect3 operator-(const Vect3 &v) const
double solid_angle(const Vect3 &v1, const Vect3 &v2, const Vect3 &v3) const
bool operator!=(const Vect3 &v) const
void operator/=(const double d)
double operator()(const int i) const
Vect3 operator/(const double d) const
Vect3(const double a=0.0)
void operator*=(const double d)
Vect3 & operator=(const Vect3 &v)
void multadd(const double d, const Vect3 &v)
Vect3 & operator=(const double v)
Vect3(const double x1, const double x2, const double x3)
bool operator==(const Vect3 &v) const
Vect3 operator*(const double d, const Vect3 &V)
Vect3 crossprod(const Vect3 &V1, const Vect3 &V2)
double det(const Vect3 &V1, const Vect3 &V2, const Vect3 &V3)
std::istream & operator>>(std::istream &is, Conductivity< REP > &m)
double sqr(const double x)
std::ostream & operator<<(std::ostream &os, const Conductivity< REP > &m)
std::vector< Normal > Normals
double dotprod(const Vect3 &V1, const Vect3 &V2)