function lp2d(zoneaffichee,fenetre,zeco,contraintes) {
var xnom=zoneaffichee[0] , xmin=zoneaffichee[1] , xmax=zoneaffichee[2] ,
ynom=zoneaffichee[3] , ymin=zoneaffichee[4] , ymax=zoneaffichee[5]
var width=fenetre[0], height=fenetre[1]
var _xmin=xmin-(xmax-xmin) , _xmax=xmax+(xmax-xmin) , _ymin=xmin-(ymax-ymin) , _ymax=xmax+(ymax-ymin)
function contrainte(t) {
var a = t[0] , b = t[1] , c = t[2] ;
if (a==0 && b>0)
{ var _points = [ [_xmin,c/b],[_xmax,c/b] , [_xmax,_ymax],[_xmin,_ymax],[_xmin,c/b] ]}
else if (a==0 && b<0)
{ var _points = [ [_xmin,c/b],[_xmax,c/b] , [_xmax,_ymin],[_xmin,_ymin],[_xmin,c/b] ]}
else if (a>0)
{ _points = [ [(c-b*_ymin)/a,_ymin] , [(c-b*_ymax)/a,_ymax] , [_xmax,_ymax], [_xmax,_ymin], [(c-b*_ymin)/a,_ymin] ] }
else { _points = [ [(c-b*_ymin)/a,_ymin] , [(c-b*_ymax)/a,_ymax] , [_xmin,_ymax], [_xmin,_ymin], [(c-b*_ymin)/a,_ymin] ] }
return Plot.line( _points , { fill: "lightblue", opacity : 0.25 , stroke: "blue", strokeWidth: 3 } )
}
var marks = []
var a=zeco[0] , b=zeco[1] , c=zeco[2] , z=zeco[3]
if (a==0)
{marks.push( Plot.line( [ [_xmin, (z-c)/b], [_xmax, (z-c)/b] ] , { stroke: "red", strokeWidth: 2} ) )}
else
{marks.push( Plot.line( [ [(z-c-b*_xmin)/a, _xmin] , [(z-c-b*_xmax)/a, _xmax] ] , { stroke: "red", strokeWidth: 2} ) )}
for (let t of contraintes)
{ marks.push( contrainte(t) ) }
marks.push( Plot.ruleX([xmin]) )
marks.push( Plot.ruleY([ymin]) )
return Plot.plot({
grid : true,
x: { domain: [xmin, xmax] , label: xnom},
y: { domain: [ymin, ymax] , label: ynom},
width: width ,
height: height ,
marks: marks ,
grid : true
})}