summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/runpath.cc
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/utils/asymptote/runpath.cc')
-rw-r--r--Build/source/utils/asymptote/runpath.cc43
1 files changed, 28 insertions, 15 deletions
diff --git a/Build/source/utils/asymptote/runpath.cc b/Build/source/utils/asymptote/runpath.cc
index 64a0d08b8e3..9c4781dacea 100644
--- a/Build/source/utils/asymptote/runpath.cc
+++ b/Build/source/utils/asymptote/runpath.cc
@@ -484,7 +484,7 @@ void gen_runpath31(stack *Stack)
}
#line 266 "runpath.in"
-// pair min(path p);
+// pair min(explicit path p);
void gen_runpath32(stack *Stack)
{
path p=vm::pop<path>(Stack);
@@ -493,7 +493,7 @@ void gen_runpath32(stack *Stack)
}
#line 271 "runpath.in"
-// pair max(path p);
+// pair max(explicit path p);
void gen_runpath33(stack *Stack)
{
path p=vm::pop<path>(Stack);
@@ -698,22 +698,35 @@ void gen_runpath44(stack *Stack)
{Stack->push<bool>(fillrule.inside(g.windingnumber(z))); return;}
}
-// Determine the side of a--b that c lies on
-// (negative=left, zero=on line, positive=right).
-#line 421 "runpath.in"
-// real side(pair a, pair b, pair c);
+// Return a positive (negative) value if a--b--c--cycle is oriented
+// counterclockwise (clockwise) or zero if all three points are colinear.
+// Equivalently, return a positive (negative) value if c lies to the
+// left (right) of the line through a and b or zero if c lies on this line.
+// The value returned is the determinant
+// |a.x a.y 1|
+// |b.x b.y 1|
+// |c.x c.y 1|
+//
+#line 428 "runpath.in"
+// real orient(pair a, pair b, pair c);
void gen_runpath45(stack *Stack)
{
pair c=vm::pop<pair>(Stack);
pair b=vm::pop<pair>(Stack);
pair a=vm::pop<pair>(Stack);
-#line 422 "runpath.in"
+#line 429 "runpath.in"
{Stack->push<real>(orient2d(a,b,c)); return;}
}
-// Determine the side of the counterclockwise circle through a,b,c that d
-// lies on (negative=inside, 0=on circle, positive=right).
-#line 428 "runpath.in"
+// Return a positive (negative) value if d lies inside (outside)
+// the circle passing through the counterclockwise-oriented points a,b,c
+// or zero if d lies on this circle.
+// The value returned is the determinant
+// |a.x a.y a.x^2+a.y^2 1|
+// |b.x b.y b.x^2+b.y^2 1|
+// |c.x c.y c.x^2+c.y^2 1|
+// |d.x d.y d.x^2+d.y^2 1|
+#line 441 "runpath.in"
// real incircle(pair a, pair b, pair c, pair d);
void gen_runpath46(stack *Stack)
{
@@ -721,7 +734,7 @@ void gen_runpath46(stack *Stack)
pair c=vm::pop<pair>(Stack);
pair b=vm::pop<pair>(Stack);
pair a=vm::pop<pair>(Stack);
-#line 429 "runpath.in"
+#line 442 "runpath.in"
{Stack->push<real>(incircle(a.getx(),a.gety(),b.getx(),b.gety(),c.getx(),c.gety(),
d.getx(),d.gety())); return;}
}
@@ -797,9 +810,9 @@ void gen_runpath_venv(venv &ve)
#line 261 "runpath.in"
addFunc(ve, run::gen_runpath31, primPath(), SYM_AMPERSAND, formal(primPath(), SYM(p), false, false), formal(primPath(), SYM(q), false, false));
#line 266 "runpath.in"
- addFunc(ve, run::gen_runpath32, primPair(), SYM(min), formal(primPath(), SYM(p), false, false));
+ addFunc(ve, run::gen_runpath32, primPair(), SYM(min), formal(primPath(), SYM(p), false, true));
#line 271 "runpath.in"
- addFunc(ve, run::gen_runpath33, primPair(), SYM(max), formal(primPath(), SYM(p), false, false));
+ addFunc(ve, run::gen_runpath33, primPair(), SYM(max), formal(primPath(), SYM(p), false, true));
#line 276 "runpath.in"
addFunc(ve, run::gen_runpath34, primInt(), SYM(size), formal(pathArray() , SYM(p), false, false));
#line 285 "runpath.in"
@@ -823,8 +836,8 @@ void gen_runpath_venv(venv &ve)
#line 414 "runpath.in"
addFunc(ve, run::gen_runpath44, primBoolean(), SYM(inside), formal(primPath(), SYM(g), false, false), formal(primPair(), SYM(z), false, false), formal(primPen(), SYM(fillrule), true, false));
#line 419 "runpath.in"
- addFunc(ve, run::gen_runpath45, primReal(), SYM(side), formal(primPair(), SYM(a), false, false), formal(primPair(), SYM(b), false, false), formal(primPair(), SYM(c), false, false));
-#line 426 "runpath.in"
+ addFunc(ve, run::gen_runpath45, primReal(), SYM(orient), formal(primPair(), SYM(a), false, false), formal(primPair(), SYM(b), false, false), formal(primPair(), SYM(c), false, false));
+#line 433 "runpath.in"
addFunc(ve, run::gen_runpath46, primReal(), SYM(incircle), formal(primPair(), SYM(a), false, false), formal(primPair(), SYM(b), false, false), formal(primPair(), SYM(c), false, false), formal(primPair(), SYM(d), false, false));
}