ref: d373fc68baa8fad364956bd5a1a5d9834adeb7dc
parent: 8a79bead1af83cb65ec7e0fc991332c200416373
author: rodri <rgl@antares-labs.eu>
date: Mon Jun 16 13:00:20 EDT 2025
plot3: add axis scale tenth markers. update tools/plotgen
--- a/plot3.c
+++ b/plot3.c
@@ -123,8 +123,8 @@
void
addpttotheplot(Point3 p)
{- if(theplot.npts % 4 == 0)
- theplot.pts = erealloc(theplot.pts, (theplot.npts + 4)*sizeof(Plotpt));
+ if(theplot.npts % 16 == 0)
+ theplot.pts = erealloc(theplot.pts, (theplot.npts + 16)*sizeof(Plotpt));
theplot.pts[theplot.npts++] = (Plotpt){p, brush};updatebboxfromtheplot();
}
@@ -173,7 +173,9 @@
{Model *mdl;
Entity *ent;
- Primitive line;
+ Primitive line, mark;
+ Point3 stepv;
+ int i;
mdl = newmodel();
ent = newentity("axis scales", mdl);@@ -181,19 +183,41 @@
line.type = PLine;
line.v[0].c = line.v[1].c = Pt3(0.4,0.4,0.4,1);
+ mark = line;
/* x scale */
line.v[0].p = Pt3(smallestbbox(x), smallestbbox(y), smallestbbox(z), 1);
line.v[1].p = Pt3(biggestbbox(x), smallestbbox(y), smallestbbox(z), 1);
mdl->addprim(mdl, line);
+ stepv = subpt3(line.v[1].p, line.v[0].p);
+ stepv = divpt3(stepv, 10);
+ for(i = 1; i <= 10; i++){+ mark.v[0].p = addpt3(line.v[0].p, mulpt3(stepv, i));
+ mark.v[1].p = addpt3(mark.v[0].p, qrotate(stepv, Vec3(0,1,0), 90*DEG));
+ mdl->addprim(mdl, mark);
+ }
/* y scale */
line.v[1].p = Pt3(smallestbbox(x), biggestbbox(y), smallestbbox(z), 1);
mdl->addprim(mdl, line);
+ stepv = subpt3(line.v[1].p, line.v[0].p);
+ stepv = divpt3(stepv, 10);
+ for(i = 1; i <= 10; i++){+ mark.v[0].p = addpt3(line.v[0].p, mulpt3(stepv, i));
+ mark.v[1].p = addpt3(mark.v[0].p, qrotate(stepv, normvec3(Vec3(-1,0,1)), 90*DEG));
+ mdl->addprim(mdl, mark);
+ }
/* z scale */
line.v[1].p = Pt3(smallestbbox(x), smallestbbox(y), biggestbbox(z), 1);
mdl->addprim(mdl, line);
+ stepv = subpt3(line.v[1].p, line.v[0].p);
+ stepv = divpt3(stepv, 10);
+ for(i = 1; i <= 10; i++){+ mark.v[0].p = addpt3(line.v[0].p, mulpt3(stepv, i));
+ mark.v[1].p = addpt3(mark.v[0].p, qrotate(stepv, Vec3(0,1,0), -90*DEG));
+ mdl->addprim(mdl, mark);
+ }
}
void
@@ -213,7 +237,6 @@
memset(&prim, 0, sizeof prim);
prim.type = PPoint;
-
for(p = theplot.pts; p < theplot.pts + theplot.npts; p++){prim.v[0].p = p->p;
prim.v[0].c = p->c->c;
--- a/tools/plotgen
+++ b/tools/plotgen
@@ -15,6 +15,13 @@
step=$step(1)
hoc <<EOF
+func sign(x) {+ if(x < 0) return -1
+ return 1
+}
+func round(x) {+ return int(x + 0.5)
+}
func lanczos(x) {if(x == 0) return 1
if(x < -a || x >= a) return 0
@@ -32,10 +39,10 @@
for(x = lo; x < hi; x += step){ for(z = lo; z < hi; z += step){y = $3
- if(y > 0 && y < 0.1) print "co red\n"
- if(y >= 0.1 && y < 0.5) print "co green\n"
- if(y >= 0.5 && y < 0.75) print "co blue\n"
- if(y >= 0.75) print "co black\n"
+# if(y > 0 && y < 0.1) print "co red\n"
+# if(y >= 0.1 && y < 0.5) print "co green\n"
+# if(y >= 0.5 && y < 0.75) print "co blue\n"
+# if(y >= 0.75) print "co black\n"
print x
print " "
print y
--
⑨