diff options
Diffstat (limited to 'Build/source/utils/asymptote/triple.h')
-rw-r--r-- | Build/source/utils/asymptote/triple.h | 32 |
1 files changed, 13 insertions, 19 deletions
diff --git a/Build/source/utils/asymptote/triple.h b/Build/source/utils/asymptote/triple.h index 4d49bf421b2..ddb5517fc4c 100644 --- a/Build/source/utils/asymptote/triple.h +++ b/Build/source/utils/asymptote/triple.h @@ -30,22 +30,11 @@ typedef double Triple[3]; class triple; bool isIdTransform3(const double* t); -void copyTransform3(double*& d, const double* s, - GCPlacement placement=NoGC); +void copyTransform3(double*& d, const double* s, GCPlacement placement=NoGC); void multiplyTransform3(double*& t, const double* s, const double* r); -void copyTriples(size_t n, Triple* d, const Triple* s); -void transformTriples(const double* t, size_t n, Triple* d, const Triple* s); -void transformshiftlessTriples(const double* t, size_t n, Triple* d, const Triple* s); -void transformNormalsTriples(const double* t, size_t n, Triple* d, const Triple* s); -void unitTriples(size_t n, Triple* d); - -void boundsTriples(double& x, double& y, double& z, double& X, double& Y, double& Z, size_t n, const Triple* v); - -void ratioTriples(pair &b, double (*m)(double, double), bool &first, size_t n, const Triple* v); - -void normalizeTriple(Triple v); -void crossTriple(Triple n, const Triple u, const Triple v); +void boundstriples(double& x, double& y, double& z, double& X, double& Y, + double& Z, size_t n, const triple* v); class triple : virtual public gc { double x; @@ -87,13 +76,12 @@ public: if(t == NULL) return v; - double *T=new double[16]; - copyTransform3(T,t); + double T[16]; + memcpy(T,t,sizeof(double)*16); T[3]=T[7]=T[11]=0.0; run::inverse(T,4); run::transpose(T,4); triple V=T*v; - delete T; return unit(V); } @@ -225,6 +213,11 @@ public: return x*x+y*y+z*z; } + friend double abs2(const triple &v) + { + return v.abs2(); + } + double length() const /* r */ { return sqrt(abs2()); @@ -251,7 +244,8 @@ public: friend triple unit(const triple& v) { double scale=v.length(); - if(scale != 0.0) scale=1.0/scale; + if(scale == 0.0) return v; + scale=1.0/scale; return triple(v.x*scale,v.y*scale,v.z*scale); } @@ -264,7 +258,7 @@ public: { return triple(u.y*v.z-u.z*v.y, u.z*v.x-u.x*v.z, - u.x*v.y-v.x*u.y); + u.x*v.y-u.y*v.x); } // Returns a unit triple in the direction (theta,phi), in radians. |