Algebra(2,0,1,()=>{
var translator = (line,dist)=>1+0.5*dist*(line.Normalized*1e012);
var l=6, d=3/l, points=Array.apply([],{length:l+1}).map((x,i)=>1e12+(1.5-i*d)*1e02);
var IK=(c)=>{
for (var i,j=0;j<4; j++) {
c[l-1].set(c[l]);
for (i=l-2; i>0; i--) c[i].set(translator(c[i]&c[i+1],-d)>>>(c[i+1]));
for (i=1; i<l; i++) c[i].set(translator(c[i-1]&c[i],d)>>>(c[i-1]));
}};
return this.graph([].concat(
()=>IK(points), points[0], "Base",
0x0000ff,points.slice(1,l),
points.map((x,i,a)=>[a[i-1],x]).slice(1,l),
0x000000,points[l],"Target"
),{grid:true});
})