summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/runpath3d.cc
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/utils/asymptote/runpath3d.cc')
-rw-r--r--Build/source/utils/asymptote/runpath3d.cc230
1 files changed, 120 insertions, 110 deletions
diff --git a/Build/source/utils/asymptote/runpath3d.cc b/Build/source/utils/asymptote/runpath3d.cc
index 1e071931de5..6912a5906d7 100644
--- a/Build/source/utils/asymptote/runpath3d.cc
+++ b/Build/source/utils/asymptote/runpath3d.cc
@@ -351,73 +351,81 @@ void gen_runpath3d22(stack *Stack)
{Stack->push<path3>(p.unstraighten()); return;}
}
-// Return the maximum perpendicular deviation of segment i of path3 g
-// from a straight line.
+// return the maximum distance squared of points c0 and c1 from
+// the respective internal control points of z0--z1.
#line 183 "runpath3d.in"
-// real straightness(path3 p, Int t);
+// real straightness(triple z0, triple c0, triple c1, triple z1);
void gen_runpath3d23(stack *Stack)
{
- Int t=vm::pop<Int>(Stack);
- path3 p=vm::pop<path3>(Stack);
+ triple z1=vm::pop<triple>(Stack);
+ triple c1=vm::pop<triple>(Stack);
+ triple c0=vm::pop<triple>(Stack);
+ triple z0=vm::pop<triple>(Stack);
#line 184 "runpath3d.in"
- if(p.straight(t)) {Stack->push<real>(0); return;}
- triple z0=p.point(t);
- triple u=unit(p.point(t+1)-z0);
- {Stack->push<real>(::max(length(perp(p.postcontrol(t)-z0,u)),
- length(perp(p.precontrol(t+1)-z0,u)))); return;}
+ {Stack->push<real>(Straightness(z0,c0,c1,z1)); return;}
}
-// Return the maximum perpendicular deviation of z0..controls c0 and c1..z1
-// from a straight line.
-#line 194 "runpath3d.in"
-// real straightness(triple z0, triple c0, triple c1, triple z1);
+// return the straightness of segment i of path3 g.
+#line 189 "runpath3d.in"
+// real straightness(path3 p, Int t);
void gen_runpath3d24(stack *Stack)
{
- triple z1=vm::pop<triple>(Stack);
- triple c1=vm::pop<triple>(Stack);
- triple c0=vm::pop<triple>(Stack);
- triple z0=vm::pop<triple>(Stack);
-#line 195 "runpath3d.in"
- triple u=unit(z1-z0);
- {Stack->push<real>(::max(length(perp(c0-z0,u)),length(perp(c1-z0,u)))); return;}
+ Int t=vm::pop<Int>(Stack);
+ path3 p=vm::pop<path3>(Stack);
+#line 190 "runpath3d.in"
+ if(p.straight(t)) {Stack->push<real>(0); return;}
+ {Stack->push<real>(Straightness(p.point(t),p.postcontrol(t),p.precontrol(t+1),
+ p.point(t+1))); return;}
}
-#line 200 "runpath3d.in"
+#line 196 "runpath3d.in"
// bool piecewisestraight(path3 p);
void gen_runpath3d25(stack *Stack)
{
path3 p=vm::pop<path3>(Stack);
-#line 201 "runpath3d.in"
+#line 197 "runpath3d.in"
{Stack->push<bool>(p.piecewisestraight()); return;}
}
-#line 205 "runpath3d.in"
+#line 201 "runpath3d.in"
// real arclength(path3 p);
void gen_runpath3d26(stack *Stack)
{
path3 p=vm::pop<path3>(Stack);
-#line 206 "runpath3d.in"
+#line 202 "runpath3d.in"
{Stack->push<real>(p.arclength()); return;}
}
-#line 210 "runpath3d.in"
-// real arctime(path3 p, real dval);
+#line 206 "runpath3d.in"
+// real arclength(triple z0, triple c0, triple c1, triple z1);
void gen_runpath3d27(stack *Stack)
{
+ triple z1=vm::pop<triple>(Stack);
+ triple c1=vm::pop<triple>(Stack);
+ triple c0=vm::pop<triple>(Stack);
+ triple z0=vm::pop<triple>(Stack);
+#line 207 "runpath3d.in"
+ {Stack->push<real>(arcLength(z0,c0,c1,z1)); return;}
+}
+
+#line 211 "runpath3d.in"
+// real arctime(path3 p, real dval);
+void gen_runpath3d28(stack *Stack)
+{
real dval=vm::pop<real>(Stack);
path3 p=vm::pop<path3>(Stack);
-#line 211 "runpath3d.in"
+#line 212 "runpath3d.in"
{Stack->push<real>(p.arctime(dval)); return;}
}
-#line 215 "runpath3d.in"
+#line 216 "runpath3d.in"
// realarray* intersect(path3 p, path3 q, real fuzz=-1);
-void gen_runpath3d28(stack *Stack)
+void gen_runpath3d29(stack *Stack)
{
real fuzz=vm::pop<real>(Stack,-1);
path3 q=vm::pop<path3>(Stack);
path3 p=vm::pop<path3>(Stack);
-#line 216 "runpath3d.in"
+#line 217 "runpath3d.in"
bool exact=fuzz <= 0.0;
if(fuzz < 0)
fuzz=BigFuzz*::max(::max(length(p.max()),length(p.min())),
@@ -434,14 +442,14 @@ void gen_runpath3d28(stack *Stack)
{Stack->push<realarray*>(new array(0)); return;}
}
-#line 233 "runpath3d.in"
+#line 234 "runpath3d.in"
// realarray2* intersections(path3 p, path3 q, real fuzz=-1);
-void gen_runpath3d29(stack *Stack)
+void gen_runpath3d30(stack *Stack)
{
real fuzz=vm::pop<real>(Stack,-1);
path3 q=vm::pop<path3>(Stack);
path3 p=vm::pop<path3>(Stack);
-#line 234 "runpath3d.in"
+#line 235 "runpath3d.in"
bool exact=fuzz <= 0.0;
if(fuzz < 0)
fuzz=BigFuzz*::max(::max(length(p.max()),length(p.min())),
@@ -473,14 +481,14 @@ void gen_runpath3d29(stack *Stack)
{Stack->push<realarray2*>(V); return;}
}
-#line 266 "runpath3d.in"
+#line 267 "runpath3d.in"
// realarray* intersect(path3 p, triplearray2 *P, real fuzz=-1);
-void gen_runpath3d30(stack *Stack)
+void gen_runpath3d31(stack *Stack)
{
real fuzz=vm::pop<real>(Stack,-1);
triplearray2 * P=vm::pop<triplearray2 *>(Stack);
path3 p=vm::pop<path3>(Stack);
-#line 267 "runpath3d.in"
+#line 268 "runpath3d.in"
triple *A;
copyArray2C(A,P,true,4);
if(fuzz <= 0) fuzz=BigFuzz*::max(::max(length(p.max()),length(p.min())),
@@ -498,14 +506,14 @@ void gen_runpath3d30(stack *Stack)
{Stack->push<realarray*>(new array(0)); return;}
}
-#line 285 "runpath3d.in"
+#line 286 "runpath3d.in"
// realarray2* intersections(path3 p, triplearray2 *P, real fuzz=-1);
-void gen_runpath3d31(stack *Stack)
+void gen_runpath3d32(stack *Stack)
{
real fuzz=vm::pop<real>(Stack,-1);
triplearray2 * P=vm::pop<triplearray2 *>(Stack);
path3 p=vm::pop<path3>(Stack);
-#line 286 "runpath3d.in"
+#line 287 "runpath3d.in"
triple *A;
copyArray2C(A,P,true,4);
if(fuzz <= 0) fuzz=BigFuzz*::max(::max(length(p.max()),length(p.min())),
@@ -525,49 +533,49 @@ void gen_runpath3d31(stack *Stack)
{Stack->push<realarray2*>(W); return;} // Sorting will done in asy.
}
-#line 306 "runpath3d.in"
+#line 307 "runpath3d.in"
// Int size(path3 p);
-void gen_runpath3d32(stack *Stack)
+void gen_runpath3d33(stack *Stack)
{
path3 p=vm::pop<path3>(Stack);
-#line 307 "runpath3d.in"
+#line 308 "runpath3d.in"
{Stack->push<Int>(p.size()); return;}
}
-#line 311 "runpath3d.in"
+#line 312 "runpath3d.in"
// path3 &(path3 p, path3 q);
-void gen_runpath3d33(stack *Stack)
+void gen_runpath3d34(stack *Stack)
{
path3 q=vm::pop<path3>(Stack);
path3 p=vm::pop<path3>(Stack);
-#line 312 "runpath3d.in"
+#line 313 "runpath3d.in"
{Stack->push<path3>(camp::concat(p,q)); return;}
}
-#line 316 "runpath3d.in"
+#line 317 "runpath3d.in"
// triple min(path3 p);
-void gen_runpath3d34(stack *Stack)
+void gen_runpath3d35(stack *Stack)
{
path3 p=vm::pop<path3>(Stack);
-#line 317 "runpath3d.in"
+#line 318 "runpath3d.in"
{Stack->push<triple>(p.min()); return;}
}
-#line 321 "runpath3d.in"
+#line 322 "runpath3d.in"
// triple max(path3 p);
-void gen_runpath3d35(stack *Stack)
+void gen_runpath3d36(stack *Stack)
{
path3 p=vm::pop<path3>(Stack);
-#line 322 "runpath3d.in"
+#line 323 "runpath3d.in"
{Stack->push<triple>(p.max()); return;}
}
-#line 326 "runpath3d.in"
+#line 327 "runpath3d.in"
// realarray* mintimes(path3 p);
-void gen_runpath3d36(stack *Stack)
+void gen_runpath3d37(stack *Stack)
{
path3 p=vm::pop<path3>(Stack);
-#line 327 "runpath3d.in"
+#line 328 "runpath3d.in"
array *V=new array(3);
triple v=p.mintimes();
(*V)[0]=v.getx();
@@ -576,12 +584,12 @@ void gen_runpath3d36(stack *Stack)
{Stack->push<realarray*>(V); return;}
}
-#line 336 "runpath3d.in"
+#line 337 "runpath3d.in"
// realarray* maxtimes(path3 p);
-void gen_runpath3d37(stack *Stack)
+void gen_runpath3d38(stack *Stack)
{
path3 p=vm::pop<path3>(Stack);
-#line 337 "runpath3d.in"
+#line 338 "runpath3d.in"
array *V=new array(3);
triple v=p.maxtimes();
(*V)[0]=v.getx();
@@ -590,31 +598,31 @@ void gen_runpath3d37(stack *Stack)
{Stack->push<realarray*>(V); return;}
}
-#line 346 "runpath3d.in"
+#line 347 "runpath3d.in"
// path3 *(realarray2 *t, path3 g);
-void gen_runpath3d38(stack *Stack)
+void gen_runpath3d39(stack *Stack)
{
path3 g=vm::pop<path3>(Stack);
realarray2 * t=vm::pop<realarray2 *>(Stack);
-#line 347 "runpath3d.in"
+#line 348 "runpath3d.in"
{Stack->push<path3>(transformed(*t,g)); return;}
}
-#line 351 "runpath3d.in"
+#line 352 "runpath3d.in"
// pair minratio(path3 g);
-void gen_runpath3d39(stack *Stack)
+void gen_runpath3d40(stack *Stack)
{
path3 g=vm::pop<path3>(Stack);
-#line 352 "runpath3d.in"
+#line 353 "runpath3d.in"
{Stack->push<pair>(g.ratio(::min)); return;}
}
-#line 356 "runpath3d.in"
+#line 357 "runpath3d.in"
// pair maxratio(path3 g);
-void gen_runpath3d40(stack *Stack)
+void gen_runpath3d41(stack *Stack)
{
path3 g=vm::pop<path3>(Stack);
-#line 357 "runpath3d.in"
+#line 358 "runpath3d.in"
{Stack->push<pair>(g.ratio(::max)); return;}
}
@@ -626,15 +634,15 @@ void gen_runpath3d40(stack *Stack)
// |b.x b.y b.z 1|
// |c.x c.y c.z 1|
// |d.x d.y d.z 1|
-#line 369 "runpath3d.in"
+#line 370 "runpath3d.in"
// real orient(triple a, triple b, triple c, triple d);
-void gen_runpath3d41(stack *Stack)
+void gen_runpath3d42(stack *Stack)
{
triple d=vm::pop<triple>(Stack);
triple c=vm::pop<triple>(Stack);
triple b=vm::pop<triple>(Stack);
triple a=vm::pop<triple>(Stack);
-#line 370 "runpath3d.in"
+#line 371 "runpath3d.in"
real A[]={a.getx(),a.gety(),a.getz()};
real B[]={b.getx(),b.gety(),b.getz()};
real C[]={c.getx(),c.gety(),c.getz()};
@@ -652,16 +660,16 @@ void gen_runpath3d41(stack *Stack)
// |c.x c.y c.z c.x^2+c.y^2+c.z^2 1|
// |d.x d.y d.z d.x^2+d.y^2+d.z^2 1|
// |e.x e.y e.z e.x^2+e.y^2+e.z^2 1|
-#line 388 "runpath3d.in"
+#line 389 "runpath3d.in"
// real insphere(triple a, triple b, triple c, triple d, triple e);
-void gen_runpath3d42(stack *Stack)
+void gen_runpath3d43(stack *Stack)
{
triple e=vm::pop<triple>(Stack);
triple d=vm::pop<triple>(Stack);
triple c=vm::pop<triple>(Stack);
triple b=vm::pop<triple>(Stack);
triple a=vm::pop<triple>(Stack);
-#line 389 "runpath3d.in"
+#line 390 "runpath3d.in"
real A[]={a.getx(),a.gety(),a.getz()};
real B[]={b.getx(),b.gety(),b.getz()};
real C[]={c.getx(),c.gety(),c.getz()};
@@ -723,45 +731,47 @@ void gen_runpath3d_venv(venv &ve)
#line 176 "runpath3d.in"
addFunc(ve, run::gen_runpath3d22, primPath3(), SYM(unstraighten), formal(primPath3(), SYM(p), false, false));
#line 181 "runpath3d.in"
- addFunc(ve, run::gen_runpath3d23, primReal(), SYM(straightness), formal(primPath3(), SYM(p), false, false), formal(primInt(), SYM(t), false, false));
-#line 192 "runpath3d.in"
- addFunc(ve, run::gen_runpath3d24, primReal(), SYM(straightness), formal(primTriple(), SYM(z0), false, false), formal(primTriple(), SYM(c0), false, false), formal(primTriple(), SYM(c1), false, false), formal(primTriple(), SYM(z1), false, false));
-#line 200 "runpath3d.in"
+ addFunc(ve, run::gen_runpath3d23, primReal(), SYM(straightness), formal(primTriple(), SYM(z0), false, false), formal(primTriple(), SYM(c0), false, false), formal(primTriple(), SYM(c1), false, false), formal(primTriple(), SYM(z1), false, false));
+#line 188 "runpath3d.in"
+ addFunc(ve, run::gen_runpath3d24, primReal(), SYM(straightness), formal(primPath3(), SYM(p), false, false), formal(primInt(), SYM(t), false, false));
+#line 196 "runpath3d.in"
addFunc(ve, run::gen_runpath3d25, primBoolean(), SYM(piecewisestraight), formal(primPath3(), SYM(p), false, false));
-#line 205 "runpath3d.in"
+#line 201 "runpath3d.in"
addFunc(ve, run::gen_runpath3d26, primReal(), SYM(arclength), formal(primPath3(), SYM(p), false, false));
-#line 210 "runpath3d.in"
- addFunc(ve, run::gen_runpath3d27, primReal(), SYM(arctime), formal(primPath3(), SYM(p), false, false), formal(primReal(), SYM(dval), false, false));
-#line 215 "runpath3d.in"
- addFunc(ve, run::gen_runpath3d28, realArray(), SYM(intersect), formal(primPath3(), SYM(p), false, false), formal(primPath3(), SYM(q), false, false), formal(primReal(), SYM(fuzz), true, false));
-#line 233 "runpath3d.in"
- addFunc(ve, run::gen_runpath3d29, realArray2(), SYM(intersections), formal(primPath3(), SYM(p), false, false), formal(primPath3(), SYM(q), false, false), formal(primReal(), SYM(fuzz), true, false));
-#line 266 "runpath3d.in"
- addFunc(ve, run::gen_runpath3d30, realArray(), SYM(intersect), formal(primPath3(), SYM(p), false, false), formal(tripleArray2(), SYM(p), false, false), formal(primReal(), SYM(fuzz), true, false));
-#line 285 "runpath3d.in"
- addFunc(ve, run::gen_runpath3d31, realArray2(), SYM(intersections), formal(primPath3(), SYM(p), false, false), formal(tripleArray2(), SYM(p), false, false), formal(primReal(), SYM(fuzz), true, false));
-#line 306 "runpath3d.in"
- addFunc(ve, run::gen_runpath3d32, primInt(), SYM(size), formal(primPath3(), SYM(p), false, false));
-#line 311 "runpath3d.in"
- addFunc(ve, run::gen_runpath3d33, primPath3(), SYM_AMPERSAND, formal(primPath3(), SYM(p), false, false), formal(primPath3(), SYM(q), false, false));
-#line 316 "runpath3d.in"
- addFunc(ve, run::gen_runpath3d34, primTriple(), SYM(min), formal(primPath3(), SYM(p), false, false));
-#line 321 "runpath3d.in"
- addFunc(ve, run::gen_runpath3d35, primTriple(), SYM(max), formal(primPath3(), SYM(p), false, false));
-#line 326 "runpath3d.in"
- addFunc(ve, run::gen_runpath3d36, realArray(), SYM(mintimes), formal(primPath3(), SYM(p), false, false));
-#line 336 "runpath3d.in"
- addFunc(ve, run::gen_runpath3d37, realArray(), SYM(maxtimes), formal(primPath3(), SYM(p), false, false));
-#line 346 "runpath3d.in"
- addFunc(ve, run::gen_runpath3d38, primPath3(), SYM_TIMES, formal(realArray2(), SYM(t), false, false), formal(primPath3(), SYM(g), false, false));
-#line 351 "runpath3d.in"
- addFunc(ve, run::gen_runpath3d39, primPair(), SYM(minratio), formal(primPath3(), SYM(g), false, false));
-#line 356 "runpath3d.in"
- addFunc(ve, run::gen_runpath3d40, primPair(), SYM(maxratio), formal(primPath3(), SYM(g), false, false));
-#line 361 "runpath3d.in"
- addFunc(ve, run::gen_runpath3d41, primReal(), SYM(orient), formal(primTriple(), SYM(a), false, false), formal(primTriple(), SYM(b), false, false), formal(primTriple(), SYM(c), false, false), formal(primTriple(), SYM(d), false, false));
-#line 378 "runpath3d.in"
- addFunc(ve, run::gen_runpath3d42, primReal(), SYM(insphere), formal(primTriple(), SYM(a), false, false), formal(primTriple(), SYM(b), false, false), formal(primTriple(), SYM(c), false, false), formal(primTriple(), SYM(d), false, false), formal(primTriple(), SYM(e), false, false));
+#line 206 "runpath3d.in"
+ addFunc(ve, run::gen_runpath3d27, primReal(), SYM(arclength), formal(primTriple(), SYM(z0), false, false), formal(primTriple(), SYM(c0), false, false), formal(primTriple(), SYM(c1), false, false), formal(primTriple(), SYM(z1), false, false));
+#line 211 "runpath3d.in"
+ addFunc(ve, run::gen_runpath3d28, primReal(), SYM(arctime), formal(primPath3(), SYM(p), false, false), formal(primReal(), SYM(dval), false, false));
+#line 216 "runpath3d.in"
+ addFunc(ve, run::gen_runpath3d29, realArray(), SYM(intersect), formal(primPath3(), SYM(p), false, false), formal(primPath3(), SYM(q), false, false), formal(primReal(), SYM(fuzz), true, false));
+#line 234 "runpath3d.in"
+ addFunc(ve, run::gen_runpath3d30, realArray2(), SYM(intersections), formal(primPath3(), SYM(p), false, false), formal(primPath3(), SYM(q), false, false), formal(primReal(), SYM(fuzz), true, false));
+#line 267 "runpath3d.in"
+ addFunc(ve, run::gen_runpath3d31, realArray(), SYM(intersect), formal(primPath3(), SYM(p), false, false), formal(tripleArray2(), SYM(p), false, false), formal(primReal(), SYM(fuzz), true, false));
+#line 286 "runpath3d.in"
+ addFunc(ve, run::gen_runpath3d32, realArray2(), SYM(intersections), formal(primPath3(), SYM(p), false, false), formal(tripleArray2(), SYM(p), false, false), formal(primReal(), SYM(fuzz), true, false));
+#line 307 "runpath3d.in"
+ addFunc(ve, run::gen_runpath3d33, primInt(), SYM(size), formal(primPath3(), SYM(p), false, false));
+#line 312 "runpath3d.in"
+ addFunc(ve, run::gen_runpath3d34, primPath3(), SYM_AMPERSAND, formal(primPath3(), SYM(p), false, false), formal(primPath3(), SYM(q), false, false));
+#line 317 "runpath3d.in"
+ addFunc(ve, run::gen_runpath3d35, primTriple(), SYM(min), formal(primPath3(), SYM(p), false, false));
+#line 322 "runpath3d.in"
+ addFunc(ve, run::gen_runpath3d36, primTriple(), SYM(max), formal(primPath3(), SYM(p), false, false));
+#line 327 "runpath3d.in"
+ addFunc(ve, run::gen_runpath3d37, realArray(), SYM(mintimes), formal(primPath3(), SYM(p), false, false));
+#line 337 "runpath3d.in"
+ addFunc(ve, run::gen_runpath3d38, realArray(), SYM(maxtimes), formal(primPath3(), SYM(p), false, false));
+#line 347 "runpath3d.in"
+ addFunc(ve, run::gen_runpath3d39, primPath3(), SYM_TIMES, formal(realArray2(), SYM(t), false, false), formal(primPath3(), SYM(g), false, false));
+#line 352 "runpath3d.in"
+ addFunc(ve, run::gen_runpath3d40, primPair(), SYM(minratio), formal(primPath3(), SYM(g), false, false));
+#line 357 "runpath3d.in"
+ addFunc(ve, run::gen_runpath3d41, primPair(), SYM(maxratio), formal(primPath3(), SYM(g), false, false));
+#line 362 "runpath3d.in"
+ addFunc(ve, run::gen_runpath3d42, primReal(), SYM(orient), formal(primTriple(), SYM(a), false, false), formal(primTriple(), SYM(b), false, false), formal(primTriple(), SYM(c), false, false), formal(primTriple(), SYM(d), false, false));
+#line 379 "runpath3d.in"
+ addFunc(ve, run::gen_runpath3d43, primReal(), SYM(insphere), formal(primTriple(), SYM(a), false, false), formal(primTriple(), SYM(b), false, false), formal(primTriple(), SYM(c), false, false), formal(primTriple(), SYM(d), false, false), formal(primTriple(), SYM(e), false, false));
}
} // namespace trans