Web
This module builds webs, where a web is defined as a set of lines drawn between given points, in such a way that intersections do not occur.
As customary, webs will be introduced via annotated code, which generates this image:
![]()
Here's the code:
import {rs as linePP} from '/shape/line.mjs';
import {rs as basicP} from '/generators/basics.mjs';
import {rs as addPointMethods} from '/mlib/pointGen.mjs';
import {rs as addWebMethods} from '/mlib/web.mjs';
let rs = basicP.instantiate();
addPointMethods(rs);
addWebMethods(rs);
rs.setName('web_wheel');
let rd= 3000;
let topParams = {width:rd,height:rd,framePadding:1.2*rd};
let webParams = {webTries:1000,minConnectorLength:0,maxConnectorLength:2000};
let ringParams = {numRings:20,radius:rd,numPointsPerRing:20};
Object.assign(rs,topParams);
rs.initProtos = function () {
let lineP = this.lineP = linePP.instantiate();
this.lineP.stroke = 'white';
this.lineP['stroke-width'] = .1;
this.lineP['stroke-width'] = 5;
}
rs.initialize = function () {
this.initProtos();
let points = this.ringPoints(ringParams);
this.generateWeb(Object.assign(webParams,{points}));
this.addFrame();
}
export {rs};
A web is a set of lines ("connectors") obeying the length constraints which connect given points without intersecting. generateWeb successively adds new connectors until it impossible to add a connector without intersection. generateWeb has this type:
generateWeb({points:arrayOf(Point),minConnectorLength:number,maxConnectorLength,lineP:line});
generateWeb will take its parameters from this if they are not found in the parameter object.