summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/triple.h
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/utils/asymptote/triple.h')
-rw-r--r--Build/source/utils/asymptote/triple.h32
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.