diff --git a/Frontend Angular 4/src/app/layout/plotter/graph2D/graph2D.component.ts b/Frontend Angular 4/src/app/layout/plotter/graph2D/graph2D.component.ts index bb8564dd75451b505062219e1c2c11d37944ff4f..b3c58900e87e5049a98b23ecce0464bdabf08604 100755 --- a/Frontend Angular 4/src/app/layout/plotter/graph2D/graph2D.component.ts +++ b/Frontend Angular 4/src/app/layout/plotter/graph2D/graph2D.component.ts @@ -36,6 +36,8 @@ export class Graph2DComponent { private id = 0; + private valores = []; + private conjunto= []; // Animation state @@ -80,22 +82,58 @@ export class Graph2DComponent { var conjs = this.obtenerConjunto(jsonCanvas.funs[0]); var d = conjs + "}"; //Leo - var obj = JSON.parse(d); + //Para las funciones if (obj.conj.sets.fdom == "function(x)") { var nom = jsonCanvas.funs[0].dom; var elemento1 = this.recursionfuncion(jsonCanvas.funs[0].sets, nom); - obj.conj.sets.fdom = function (x) { return eval(elemento1) } + + + var funcionString = ''; + funcionString ="var "+nom+" = function(x){\nreturn "+elemento1+"}\n" + + funcionString += 'return ' + nom + '(x);\n' + + for (var funs of jsonCanvas.funs) { + funcionString = 'var ' + funs.fun + ' = function('+funs.args+'){\n return ' + this.generarExpresion(funs.bdy) + '}\n' + funcionString; + } + funcionString = '(x)=>{\n' + funcionString + '}'; + console.log(funcionString) + obj.conj.sets.fdom = eval(funcionString); + + + + + + + + } if (obj.conj.sets.fcod == "function(x)") { var nom = jsonCanvas.funs[0].cod; var elemento2 = this.recursionfuncion(jsonCanvas.funs[0].sets, nom); obj.conj.sets.fcod = function (x) { return (eval(elemento2)) } + + var funcionString = ''; + funcionString ="var "+nom+" = function(x){\nreturn "+elemento2+"}\n" + + funcionString += 'return ' + nom + '(x);\n' + + for (var funs of jsonCanvas.funs) { + funcionString = 'var ' + funs.fun + ' = function('+funs.args+'){\n return ' + this.generarExpresion(funs.bdy) + '}\n' + funcionString; + } + funcionString = '(x)=>{\n' + funcionString + '}'; + + obj.conj.sets.fdom = eval(funcionString); + + } var funcionGenerada = this.generarFuncion(jsonCanvas); - console.log(obj) + + + //para Enumerados if (obj.conj.dom == 'Numer') { @@ -116,9 +154,11 @@ export class Graph2DComponent { } + + let fun = eval(funcionGenerada); - var colores = ['pink', 'red', 'blue', 'orange', 'green'] + var colores = ['violet', 'red', 'blue', 'orange', 'green','black',''] var num = this.getRandomArbitrary(0, 4); var color = colores[num]; @@ -135,18 +175,78 @@ export class Graph2DComponent { this.conjunto.push(obj.conj); this.id = 0; this.funciones = []; - this.funciones.push({ - id: this.funciones.length, - sampler: 'builtIn', - fn: function(scope) { - return fun(scope.x) - }, - graphType: tipoGraf, - color: color - }) + if(obj.conj.baseDom == 'R'){ + this.valores = []; + var funcionGenerada2 = this.generarFuncionDisc(jsonCanvas); + + var funcionesVer2019 = this.createListFunction(jsonCanvas); + var listValores = []; + for (var k of this.valores){ + listValores.push(parseInt(k)) + } + for (var i of this.valores){ + for(var t of this.valores){ + var aux = parseInt(t); + var aux2 = parseInt(i); + var mul = aux * aux2; + listValores.push(mul) + } + } + for (i = -999; i < 1000; i++) { + listValores.push(i) + } + let sinRepetidos = listValores.filter((valor, indiceActual, arreglo) => arreglo.indexOf(valor) === indiceActual); + + for (var fun2 of funcionesVer2019){ + let fun3 = eval(fun2); + var insertar = false; + var punto1 = []; + + if (sinRepetidos.length){ + for (var p of sinRepetidos){ + var pn= parseInt(p) - 0.001 + var pp= parseInt(p) + 0.001 + insertar = (((fun3(pp) != undefined) ) || ((fun3(pn) != undefined)) || insertar) + if((fun3(pp) != undefined)){ + punto1.push(pp); + }else if ((fun3(pn) != undefined)){ + punto1.push(p); + } + } + }else{ + insertar = true; + } + if (insertar){ + this.funciones.push({ + id: 0, + sampler: 'builtIn', + fn: function(scope) { + return fun3(scope.x) + }, + graphType: tipoGraf, + point:punto1[0], + color: color, + + }); + } + } + }else{ + + this.funciones.push({ + id: this.funciones.length, + sampler: 'builtIn', + fn: function(scope) { + return fun(scope.x) + }, + graphType: tipoGraf, + color: color + }) + } + }else{ if(this.conjunto.length == 1){ this.id = 1; + this.conjunto.unshift({radio: 2, dom:this.conjunto[0].baseDom, cod:this.conjunto[0].baseCod, baseCod:this.conjunto[0].baseCod, baseDom:this.conjunto[0].baseDom, sets:{fdom:this.conjunto[0].baseDom,fcod:this.conjunto[0].baseCod}}); this.funciones[0].id = this.id; @@ -164,9 +264,144 @@ export class Graph2DComponent { } } this.conjunto.push(obj.conj); + var identificador=0; + if (this.conjunto.length > 1){ + identificador=this.conjunto.length - 2 + this.id; + } + if(obj.conj.baseDom == 'R'){ + this.valores = []; + var funcionGenerada2 = this.generarFuncionDisc(jsonCanvas); + + var funcionesVer2019 = this.createListFunction(jsonCanvas); + var listValores = []; + for (var k of this.valores){ + listValores.push(parseInt(k)) + } + for (var i of this.valores){ + for(var t of this.valores){ + var aux = parseInt(t); + var aux2 = parseInt(i); + var mul = aux * aux2; + listValores.push(mul) + } + } + for (i = -999; i < 1000; i++) { + listValores.push(i) + } + let sinRepetidos = listValores.filter((valor, indiceActual, arreglo) => arreglo.indexOf(valor) === indiceActual); + + for (var fun2 of funcionesVer2019){ + let fun3 = eval(fun2); + var insertar = false; + var punto1 = []; + + if (sinRepetidos.length){ + for (var p of sinRepetidos){ + var pn= parseInt(p) - 0.001 + var pp= parseInt(p) + 0.001 + insertar = (((fun3(pp) != undefined) ) || ((fun3(pn) != undefined)) || insertar) + if((fun3(pp) != undefined)){ + punto1.push(pp); + }else if ((fun3(pn) != undefined)){ + punto1.push(p); + } + } + }else{ + insertar = true; + } + if (insertar){ + this.funciones.push({ + id: identificador, + sampler: 'builtIn', + fn: function(scope) { + return fun3(scope.x) + }, + graphType: tipoGraf, + point:punto1[0], + color: color, + + }); + } + } + }else{ + this.funciones.push({ + id: identificador, + sampler: 'builtIn', + fn: function(scope) { + return fun(scope.x) + }, + graphType: tipoGraf, + color: color + }); + } + + } + }else{ + + this.conjunto = []; + this.conjunto.push(obj.conj); + this.id = 0; + this.funciones = []; + if(obj.conj.baseDom == 'R'){ + this.valores = []; + var funcionGenerada2 = this.generarFuncionDisc(jsonCanvas); + var funcionesVer2019 = this.createListFunction(jsonCanvas); + var listValores = []; + for (var k of this.valores){ + listValores.push(parseInt(k)) + } + for (var i of this.valores){ + for(var t of this.valores){ + var aux = parseInt(t); + var aux2 = parseInt(i); + var mul = aux * aux2; + listValores.push(mul) + } + } + for (i = -999; i < 1000; i++) { + listValores.push(i) + } + let sinRepetidos = listValores.filter((valor, indiceActual, arreglo) => arreglo.indexOf(valor) === indiceActual); + + for (var fun2 of funcionesVer2019){ + let fun3 = eval(fun2); + var insertar = false; + var punto1 = []; + + if (sinRepetidos.length){ + for (var p of sinRepetidos){ + var pn= parseInt(p) - 0.001 + var pp= parseInt(p) + 0.001 + insertar = (((fun3(pp) != undefined) ) || ((fun3(pn) != undefined)) || insertar) + if((fun3(pp) != undefined)){ + punto1.push(pp); + }else if ((fun3(pn) != undefined)){ + punto1.push(p); + } + } + }else{ + insertar = true; + } + if (insertar){ + this.funciones.push({ + id: 0, + sampler: 'builtIn', + fn: function(scope) { + return fun3(scope.x) + }, + graphType: tipoGraf, + point:punto1[0], + color: color, + + }); + + } + + } + }else{ this.funciones.push({ - id: this.funciones.length + this.id, + id: this.funciones.length, sampler: 'builtIn', fn: function(scope) { return fun(scope.x) @@ -174,21 +409,8 @@ export class Graph2DComponent { graphType: tipoGraf, color: color }); - } - }else{ - this.conjunto = []; - this.conjunto.push(obj.conj); - this.id = 0; - this.funciones = []; - this.funciones.push({ - id: this.funciones.length, - sampler: 'builtIn', - fn: function(scope) { - return fun(scope.x) - }, - graphType: tipoGraf, - color: color - }); + + } } let bounding = this.getBounding(); this.instance = functionPlot({ @@ -747,9 +969,501 @@ export class Graph2DComponent { return expresion; } - //Nuevo 20-07-2018 +// nueva +createListFunction = function (graph) { + var funcionString = ''; + var grafica; + var funciones = []; + var j = 0; + while (graph.funs[j].fun != graph.graph) { + j += 1; + } + + var fun1 = graph.funs[j]; + var arrayFunction = []; + var nameFun = []; + nameFun.push(fun1.fun); + funciones = this.armarFuncion(fun1.bdy,graph,nameFun); + + for (var funs of funciones){ + for (var fun of graph.funs){ + if (fun.fun != fun1.fun){ + funcionString = 'var ' + fun.fun + ' = function(' + fun.args.join() + '){\n return ' + this.generarExpresion(fun.bdy) + '}\n' + funcionString; + } + } + funcionString = 'var ' + fun1.fun + ' = function(' + fun1.args.join() + '){\n return ' + funs + '}\n' + funcionString; + + funcionString += ';return ' + fun1.fun + '(' + fun1.args.join() + ');\n' + grafica = fun1; + funcionString = '(' + grafica.args.join() + ')=>{\n' + funcionString + '}'; + arrayFunction.push(funcionString); + var funcionString = ''; + } + return arrayFunction; +} + +armarFuncion = function (exp,graph,nameFun){ + var lisArm = this.generateFunctionAndExp(exp,graph,nameFun); + var lisFun = []; + for(var lis of lisArm){ + var aux = ''; + if(lis[0] == 'N'){ + aux = lis[1]; + }else{ + aux = '('+lis[0]+' ? '+lis[1]+' : undefined )'; + } + lisFun.push(aux); + } + return lisFun +} + + +generateFunctionAndExp = function (exp,graph,namefun6) { + var myList = []; + // devuelvo lista con tupla (cond,funcion) + if (exp.kind == 'cnd') { + var lisA = this.generateFunctionAndExp(exp.exp1,graph,namefun6); + var lisB = this.generateFunctionAndExp(exp.exp2,graph,namefun6); + var cond = this.createListExp(exp.cond); + var g = this.createListExp(exp.cond); + var aux121 = []; + var cond2 = g.splice(1); + var union = g[0] + + + for(var a of cond2){ + union = '('+union+' && '+a+')'; + } + for (var fun1 of lisA){ + if(fun1[0] == 'N'){ + if(cond.length == 0){ + aux121[0]='N'; + }else{ + aux121[0]=union; + } + }else{ + aux121[0]= '('+fun1[0]+' && '+union+ ')'; + } + aux121[1] = fun1[1]; + myList.push(aux121); + } + for (var fun2 of lisB){ + if(cond.length != 0){ + for (var condi of cond){ + var aux123 = []; + aux123[1]=fun2[1]; + if(fun2[0] == 'N'){ + aux123[0]='!('+condi+')'; + }else{ + aux123[0] = '('+fun2[0]+' && !('+condi+'))'; + } + myList.push(aux123); + } + }else{ + myList.push(fun2); + } + } + + } else if (exp.kind == 'bop') { + + if (exp.op == '^') { + var lisA1 = this.generateFunctionAndExp(exp.exp1,graph,namefun6); + var lisB1 = this.generateFunctionAndExp(exp.exp2,graph,namefun6); + var aux1 = []; + for (var f1 of lisA1){ + for (var f2 of lisB1){ + var aux11 = 'Math.pow('+f1[1]+' , '+f2[1]+')'; + var aux21; + if ((f2[0] == 'N') && (f1[0] == 'N')){ + aux21 = 'N' + }else if(f2[0] == 'N'){ + aux21=f1[0] + }else if(f1[0] == 'N'){ + aux21=f2[0] + }else{ + aux21= '('+f1[0]+' && '+f2[0]+')'; + } + aux1[0]= aux21; + aux1[1] = aux11; + myList.push(aux1); + } + } + } else { + + var lisA2 = this.generateFunctionAndExp(exp.exp1,graph,namefun6); + var lisB2 = this.generateFunctionAndExp(exp.exp2,graph,namefun6); + var aux2 = []; + for (var f1 of lisA2){ + for (var f2 of lisB2){ + var aux12 = '(('+f1[1]+')'+exp.op+'('+f2[1]+'))'; + var aux22 + if ((f2[0] == 'N') && (f1[0] == 'N')){ + aux22 = 'N' + }else if (f2[0] == 'N'){ + aux22 =f1[0] + }else if (f1[0] == 'N'){ + aux22 =f2[0] + }else{ + aux22= '('+f1[0]+' && '+f2[0]+')'; + } + aux2[0]= aux22; + aux2[1] = aux12; + myList.push(aux2); + + } + } + } + } else if (exp.kind == 'uop') { + var lisA3 = this.generateFunctionAndExp(exp.exp,graph,namefun6); + var aux3 = []; + for (var f1 of lisA3){ + var aux13 = ' '+exp.op+' '+f1[1]+' '; + aux3[0]= f1[0]; + aux3[1] = aux13; + myList.push(aux3); + } + } else if (exp.kind == 'app') { + if ((exp.fun == 'Math.cos') || (exp.fun == 'cos')) { + var aux4 = []; + var aux14 = 'Math.cos('+ exp.args.map(e => this.generarExpresion(e)).join() +')'; + var aux24 = 'N' + aux4[0]= aux24; + aux4[1] = aux14; + myList.push(aux4); + } else if ((exp.fun == 'Math.sin') || (exp.fun == 'sin')) { + var aux5 = []; + var aux15 = 'Math.sin('+ exp.args.map(e => this.generarExpresion(e)).join() +')'; + var aux25 = 'N' + aux5[0]= aux25; + aux5[1] = aux15; + myList.push(aux5); + } else if ((exp.fun == 'Math.round') || (exp.fun == 'round')){ + var aux6 = []; + var aux16 = 'Math.round('+ exp.args.map(e => this.generarExpresion(e)).join() +')'; + var aux26 = 'N' + aux6[0]= aux26; + aux6[1] = aux16; + myList.push(aux6); + }else{ + if(!namefun6.includes(exp.fun)){ + var ListnameFNew = namefun6; + ListnameFNew.push(exp.fun); + for (var fun5 of graph.funs){ + if(fun5.fun == exp.fun){ + myList = this.generateFunctionAndExp(fun5.bdy,graph,ListnameFNew); + } + } + }else{ + var aux76 = []; + aux76[0] = 'N'; + aux76[1] = exp.fun; + myList.push(aux76); + } + } + + } else if (exp.kind == 'tup') { + var lisA7 = this.generateFunctionAndExp(exp.exps,graph,namefun6); + for (var f of lisA7){ + var aux65 = []; + aux65[1] = '('+f[1]+')'; + aux65[0] = f[0]; + myList.push(aux65); + } + //Es esto o las combinaciones + // expresion = ' (' + exp.exps.map(e => this.generarExpresion(e)).join() + ') '; + } else if (exp.kind == 'lit') { + var aux8 = []; + aux8[0] = 'N'; + aux8[1] = ' ' + exp.val + ' '; + myList.push(aux8); + } else if (exp.kind == 'var') { + + var aux9 = []; + aux9[0] = 'N'; + aux9[1] = ' ' + exp.var + ' '; + myList.push(aux9); + } else { + var aux54 = []; + aux54[0]= 'N'; + aux54[1]='undefined'; + myList.push(aux54); + } + + return myList; +} + +///////////////////// + +createListExp = function (exp) { + var expresion = ''; + var funcione = []; + if (exp.kind == 'cnd') { + funcione = this.createListExp(exp.cond); + } else if (exp.kind == 'bop') { + if (exp.op == '==') { + expresion = ' Math.abs((' + this.createListExp(exp.exp1)[0] + ') - (' + this.createListExp(exp.exp2)[0] + ')) == 0 '; + if(exp.exp1.kind == 'lit'){ + this.valores.push(exp.exp1.val) + } + if(exp.exp2.kind == 'lit'){ + this.valores.push(exp.exp2.val) + } + funcione.push(expresion) + + } else if (exp.op == '/=') { + expresion = ' Math.abs((' + this.createListExp(exp.exp1) + ') - (' + this.createListExp(exp.exp2) + ')) != 0'; + funcione.push(expresion) + + } else if (exp.op == '^') { + expresion = ' Math.pow(' + this.createListExp(exp.exp1) + ',' + this.createListExp(exp.exp2) + ') '; + funcione.push(expresion) + + } else if (exp.op == '&&'){ + + for (var atr of this.createListExp(exp.exp1)){ + funcione.push(atr) + } + for (var atr2 of this.createListExp(exp.exp2)){ + funcione.push(atr2) + } + }else if (exp.op == 'or'){ + funcione.push('!'+this.createListExp(exp.exp1)) + funcione.push('!'+this.createListExp(exp.exp2)) + }else{ + var lis1 = this.createListExp(exp.exp1) + var lis2 = this.createListExp(exp.exp2) + for(var expes1 of lis1){ + for (var expes2 of lis2){ + expresion = ' ((' + expes1 + ')' + exp.op + '(' + expes2 + ') )'; + funcione.push(expresion) + } + } + } + } else if (exp.kind == 'uop') { + expresion = ' ' + exp.op + ' ' + this.createListExp(exp.exp) + ' '; + funcione.push(expresion) + + } else if (exp.kind == 'app') { + + if (exp.fun == 'Math.cos') { + exp.fun = 'Math.cos' + expresion = ' ' + exp.fun + '(' + exp.args.map(e => this.generarExpresion(e)).join() + ') '; + funcione.push(expresion) + + } else if (exp.fun == 'Math.sin') { + exp.fun = 'Math.sin' + expresion = ' ' + exp.fun + '(' + exp.args.map(e => this.generarExpresion(e)).join() + ') '; + funcione.push(expresion) + + } else if (exp.fun == 'Math.round') { + exp.fun = 'Math.round' + expresion = ' ' + exp.fun + '(' + exp.args.map(e => this.generarExpresion(e)).join() + ') '; + funcione.push(expresion) + + }else{ + expresion = ' ' + exp.fun + '(' + exp.args.map(e => this.generarExpresion(e)).join() + ') '; + funcione.push(expresion) + } + + } else if (exp.kind == 'tup') { + expresion = ' (' + exp.exps.map(e => this.generarExpresion(e)).join() + ') '; + funcione.push(expresion) + + } else if (exp.kind == 'lit') { + expresion = ' ' + exp.val + ' '; + this.valores.push(exp.val) + funcione.push(expresion) + + } else if (exp.kind == 'var') { + + expresion = ' ' + exp.var + ' '; + funcione.push(expresion) + + } else { + expresion = 'undefined '; + funcione.push(expresion) + + } + return funcione; +} +///////////////////// fin de nuevo + + + // Prueba 2019 + generarFuncionDisc = function (graph) { + var funcionString = ''; + var grafica; + var arrayFunction = []; + var fun = graph.funs[0]; + var ListnameF = []; + ListnameF.push(fun.fun); + var funciones = this.generarExpresionDisc(fun.bdy,graph,ListnameF) + for (var funs of funciones){ + funcionString = 'var ' + fun.fun + ' = function(' + fun.args.join() + '){\n return ' + funs + '}\n' + funcionString; + + if (fun.fun == graph.graph) { + funcionString += ';return ' + fun.fun + '(' + fun.args.join() + ');\n' + grafica = fun; + } + funcionString = '(' + grafica.args.join() + ')=>{\n' + funcionString + '}'; + arrayFunction.push(funcionString); + var funcionString = ''; + } + + + var arrayFunction1 = [arrayFunction[0]] + return arrayFunction; + } + + generarExpresionDisc = function (exp,grap,ListnameF) { + var expresion = ''; + var funcione = []; + if (exp.kind == 'cnd') { + + var con1 = this.generarExpresionDisc(exp.cond,grap,ListnameF); + var con11 = ''; + + for (var condi of con1){ + if (con11 == ''){ + con11 = condi; + }else{ + con11 = '('+con11 +' && '+ condi +')'; + } + + } + for (var funs of this.generarExpresionDisc(exp.exp1,grap,ListnameF)){ + funcione.push('('+con11+' ? '+ funs +' : undefined)'); + } + for (var funs2 of this.generarExpresionDisc(exp.exp2,grap,ListnameF)){ + for (var condi2 of con1){ + funcione.push('(!('+condi2+') ? '+ funs2 +' : undefined)'); + + } + } + + + + } else if (exp.kind == 'bop') { + if (exp.op == '==') { + expresion = ' Math.abs((' + this.generarExpresionDisc(exp.exp1,grap,ListnameF) + ') - (' + this.generarExpresionDisc(exp.exp2,grap,ListnameF) + ')) == 0 '; + if(exp.exp1.kind == 'lit'){ + this.valores.push(exp.exp1.val) + } + if(exp.exp2.kind == 'lit'){ + this.valores.push(exp.exp2.val) + } + funcione.push(expresion) + + } else if (exp.op == '/=') { + expresion = ' Math.abs((' + this.generarExpresionDisc(exp.exp1,grap,ListnameF) + ') - (' + this.generarExpresionDisc(exp.exp2,grap,ListnameF) + ')) != 0'; + funcione.push(expresion) + + } else if (exp.op == '^') { + expresion = ' Math.pow(' + this.generarExpresionDisc(exp.exp1,grap,ListnameF) + ',' + this.generarExpresionDisc(exp.exp2,grap,ListnameF) + ') '; + funcione.push(expresion) + + } else if (exp.op == '&&'){ + + for (var atr of this.generarExpresionDisc(exp.exp1,grap,ListnameF)){ + funcione.push(atr) + } + for (var atr2 of this.generarExpresionDisc(exp.exp2,grap,ListnameF)){ + funcione.push(atr2) + } + }else if (exp.op == 'or'){ + funcione.push('!'+this.generarExpresionDisc(exp.exp1,grap,ListnameF)) + funcione.push('!'+this.generarExpresionDisc(exp.exp2,grap,ListnameF)) + }else{ + var lis1 = this.generarExpresionDisc(exp.exp1,grap,ListnameF) + var lis2 = this.generarExpresionDisc(exp.exp2,grap,ListnameF) + for(var expes1 of lis1){ + for (var expes2 of lis2){ + expresion = ' ((' + expes1 + ')' + exp.op + '(' + expes2 + ') )'; + funcione.push(expresion) + } + } + + + } + } else if (exp.kind == 'uop') { + expresion = ' ' + exp.op + ' ' + this.generarExpresionDisc(exp.exp,grap,ListnameF) + ' '; + funcione.push(expresion) + + } else if (exp.kind == 'app') { + + if (exp.fun == 'Math.cos') { + exp.fun = 'Math.cos' + expresion = ' ' + exp.fun + '(' + exp.args.map(e => this.generarExpresionDisc(e,grap,ListnameF)).join() + ') '; + funcione.push(expresion) + + } else if (exp.fun == 'Math.sin') { + exp.fun = 'Math.sin' + expresion = ' ' + exp.fun + '(' + exp.args.map(e => this.generarExpresionDisc(e,grap,ListnameF)).join() + ') '; + funcione.push(expresion) + + } else if (exp.fun == 'Math.round') { + exp.fun = 'Math.round' + expresion = ' ' + exp.fun + '(' + exp.args.map(e => this.generarExpresionDisc(e,grap,ListnameF)).join() + ') '; + funcione.push(expresion) + + }else{ + + if(!ListnameF.includes(exp.fun)){ + + var ListnameFNew = ListnameF; + ListnameFNew.push(exp.fun); + for (var fun5 of grap.funs){ + + if(fun5.fun == exp.fun){ + + var funresul = this.generarExpresionDisc(fun5.bdy,grap,ListnameFNew); + for (var subfunciones of funresul){ + funcione.push(subfunciones); + } + + } + } + }else{ + funcione.push(exp.fun); + } + + } + + } else if (exp.kind == 'tup') { + expresion = ' (' + exp.exps.map(e => this.generarExpresionDisc(e,grap,ListnameF)).join() + ') '; + funcione.push(expresion) + + } else if (exp.kind == 'lit') { + expresion = ' ' + exp.val + ' '; + this.valores.push(exp.val) + funcione.push(expresion) + + } else if (exp.kind == 'var') { + + expresion = ' ' + exp.var + ' '; + funcione.push(expresion) + + } else { + expresion = ' undefined '; + funcione.push(expresion) + + } + return funcione; + } + + + //Prueba 2019 fin + + + + + + + //Nuevo 20-07-2018 + + obtenerConjunto = function (grf) { var setf = '\"sets\": {'; @@ -786,9 +1500,9 @@ export class Graph2DComponent { } else if (grf.cod == 'Z') { dominio += "\"baseCod\": \"Z\", \"cod\": \"Z\" ,"; setf += "\"fcod\": \"Z\""; - // } else if (grf.cod == 'N') { - // dominio += "\"baseCod\": \"N\", \"cod\": \"N\" ,"; - // setf += "\"fcod\": \"N\""; + } else if (grf.cod == 'N') { + dominio += "\"baseCod\": \"N\", \"cod\": \"N\" ,"; + setf += "\"fcod\": \"N\""; } else { var nom = grf.cod; if (Array.isArray(grf.sets[0][nom])) { @@ -807,12 +1521,19 @@ export class Graph2DComponent { return dominio + setf + "}}"; } + + + + recursionfuncion = function (func, nombre) { var fun = func[0][nombre].set; var resul = ""; if (fun == 'R' || fun == 'Z' || fun == 'N') { + resul += this.generarF(func[0][nombre].cond); + } else { + resul += this.generarF(func[0][nombre].cond) + " && " + this.recursionfuncion(func, fun); } @@ -825,8 +1546,8 @@ export class Graph2DComponent { domin += "\"radio\": 0.3, \"baseDom\": \"R\", \"dom\": \"Func\""; } else if (sets[0][nom].set == 'Z') { domin += "\"radio\": 2, \"baseDom\": \"Z\", \"dom\": \"Func\""; - // } else if (sets[0][nom].set == 'N') { - // domin += "\"radio\": 2, \"baseDom\": \"N\", \"dom\": \"Func\""; + } else if (sets[0][nom].set == 'N') { + domin += "\"radio\": 2, \"baseDom\": \"N\", \"dom\": \"Func\""; } else { var nombre = sets[0][nom].set; domin = this.recursivoDom(sets, nombre); @@ -841,8 +1562,8 @@ export class Graph2DComponent { coodo += "\"baseCod\": \"R\", \"cod\": \"Func\","; } else if (sets[0][nom].set == 'Z') { coodo += "\"baseCod\": \"Z\", \"cod\": \"Func\","; - // } else if (sets[0][nom].set == 'N') { - // coodo += "\"baseCod\": \"N\", \"cod\": \"Func\","; + } else if (sets[0][nom].set == 'N') { + coodo += "\"baseCod\": \"N\", \"cod\": \"Func\","; } else { var nombre = sets[0][nom].set; coodo += this.recursivoDom(sets, nombre); @@ -858,7 +1579,7 @@ export class Graph2DComponent { if (exp.op == '==') { expresion = ' Math.abs((' + this.generarF(exp.exp1) + ') - (' + this.generarF(exp.exp2) + ')) == 0 '; } else if (exp.op == '/=') { - expresion = ' Math.abs((' + this.generarF(exp.exp1) + ') - (' + this.generarF(exp.exp2) + ')) != 0'; + expresion = ' Math.abs((' + this.generarF(exp.exp1) + ') - (' + this.generarF(exp.exp2) + ')) != 0 '; } else if (exp.op == '^') { expresion = ' Math.pow(' + this.generarF(exp.exp1) + ',' + this.generarF(exp.exp2) + ') '; } else {