Ну, как-то получилось. Что непонятно, OpenSCAD криво считала
решение через классическую форму, но всё получилось через
приведённую. Хотя, может и я чего напутал был.
/* Triangles line
#use "tri_grid.scad"
*/
// x,y,x - dimensions, b - border thinkness, n - num of cells.
module triagrid(x, y, z, b, n)
{
step=(y+b)/n;
cY=step-b; // Y-size of filled cell.
// Some of math.
// x^2 + p*x + q = 0; x=-p/2+-sqrt(p^2/4-q)
p= -(2*pow(b,2)*cY)/(pow(b,2)-pow(x,2));
q= pow(b,2) * (pow(x,2)+pow(cY,2)) / (pow(b,2)-pow(x,2));
echo(" p, q = ", p, q);
x1=-p/2+sqrt(pow(p,2)/4-q);
x2=-p/2-sqrt(pow(p,2)/4-q);
//echo("x1, x2", x1, x2);
xi=x1;
for(i=[0:n-1]){
//color("green") translate([0,i*step,0])cube([x,step-b,z/2],false);
linear_extrude(height=z) {
polygon([[0,i*step+xi],[0,i*step+cY],[x,i*step+cY]]);
polygon([[0,i*step],[x,i*step],[x,i*step+cY-xi]]);
}
}
echo(x, y, z, b, n);
}
// Example:
b=1;
color("coral")cube([3,15+2*b,0.4],false);
triagrid(3,15+2*b,1,b,3);