Tengo problemas para obtener el ancho/alto de una forma de triángulo en puntos/coordenadas de registro de objetos. Lo uso para generar como SVG o para CanvasRenderer2d. Lo probé con una función drawSVG y el dibujo está bien, es solo el ancho y la altura con los que tengo un error.
Mi código aligerado es así (sin descartar propiedades relevantes como grosor de línea, colores...):
function Triangle(name, arrayX, arrayY){ return { name:name, x:arrayX, y:arrayY, width:Math.max(this.x)-Math.min(this.x), height:Math.max(this.y)-Math.min(this.y), getWidth:function(){return Math.max(this.x)-Math.min(this.x) }, getHeight:function(){return Math.max(this.x)-Math.min(this.x) } } } let tri=Triangle('tri', [15, 42, 84], [10, 37, 48]) console.log(tri.width)//-- NaN console.log(tri.getWidth())//-- NaN /** i've tried using ... this way and having same issue: width:Math.max(...this.x)-Math.min(...this.x), height:Math.max(...this.y)-Math.min(...this.y), getWidth:function(){return Math.max(...this.x)-Math.min(...this.x) }, getHeight:function(){return Math.max(...this.x)-Math.min(...this.x) } let tri=ShapeTriangle('tri', [15, 42, 84], [10, 37, 48]) console.log(tri.width)//-- NaN console.log('tri.getWidth => '+tri.getWidth())//-- NaN */ /**----------------------------------------------- * more complete "real" code use extended object (inheritance) like this * but i don't think it's where is the trouble is function PolygonShape(arrayX,arrayY){//--Abstract return {primitive:'PolygonShape', type:'PolygonShapeAbstract', name:null, x:arrayX,y:arrayY, component:new Map(), list:[] //-- others methods such move coordinates and hit tests } } function ShapeTriangle(name, x, y, x1, y1,x2, y2){ let tri=PolygonShape([x,x1,x2],[y,y1,y2]) tri.type='PolygonShapeTriangle' tri.name=name tri.width=Math.max(this.x)-Math.min(this.x) tri.getWidth=function(){return Math.max(this.x)-Math.min(this.x)} tri.heigth= Math.max(this.y)-Math.min(this.y) tri.getHeight=function(){return Math.max(this.y)-Math.min(this.y)} return tri }*/Tienes 2 problemas con tu código.
Está llamando a this.x que no está definido, intente usar arrayX y arrayY.
Debe usar el operador de propagación, las funciones Math.max y Math.min requieren múltiples argumentos, no un solo argumento.
Prueba lo siguiente:
function Triangle(name, arrayX, arrayY){ return { name:name, x:arrayX, y:arrayY, width:Math.max(...arrayX)-Math.min(...arrayX), height:Math.max(...arrayY)-Math.min(...arrayY), getWidth:function(){return Math.max(...arrayX)-Math.min(...arrayX) }, getHeight:function(){return Math.max(...arrayX)-Math.min(...arrayX) } } } let tri=Triangle('tri', [15, 42, 84], [10, 37, 48]) console.log(tri.width)