Comunidad de diseño web y desarrollo en internet online

Cómo graficar una funcion matemática

Citar            
MensajeEscrito el 01 Oct 2005 04:29 pm
:D Hola. He aqui el tema que me preocupa.
Cómo así puedo graficar en flash una funcion matematica (por ejemplo, una parabola y=x^2) en flash para un un intervalo especifico (por ejemplo para x comprendido entre -4 y 4), si no es posible esta última condición no importa.

Por shantifox

93 de clabLevel

1 tutorial

 

Peru

msie
Citar            
MensajeEscrito el 01 Oct 2005 05:23 pm
mirate este link
te interesara

http://www.kadazuro.com/blog/archives/000039.php

Xaludos ^^

Por FeNtO

BOFH

5091 de clabLevel

18 tutoriales

1 ejemplo

  Bastard Operators From Hell

FeNtO DataCenter

clabbrowser
Citar            
MensajeEscrito el 01 Oct 2005 06:59 pm
En general, si lo que quieres es representar cualquier tipo de función, la cosa está bastante complicada, porque según creo, el hecho de evaluar cadenas de texto para poder convertirlas en funciones matemáticas es bastante complicado.

En cambio, si separas el problema en distintos tipos de funciones, la cosa puede ir resolviéndose poco a poco. Por ejemplo, para el caso de funciones polinómicas, se me ocurre que podrías hacer algo así:

Código :

function creaVector(Xo:Number, Xn:Number, N:Number):Array{
   var vectorX:Array = new Array();
   var paso:Number = (Xn-Xo)/N;
   
   for (var i=0;i<=N;i++){
      vectorX[i] = Xo + i*paso;
   }
   return vectorX;
}

function evalua(vectorX:Array, pol:Array):Array{
   var vectorY:Array = new Array();
   var y:Number = 0;
   var powX:Number = 1;
   var orden:Number = pol.length-1;
   var N:Number = vectorX.length-1;

   for(var i=0;i<=N;i++){
      
      for(var j=0;j<=orden;j++){
         powX = Math.pow(vectorX[i],j);
         
         y += powX*pol[orden-j];
      }
      
      vectorY[i] = y;
      
      y = 0;
      powX = 1;
      
   }
   
   return vectorY;
}


La función "creaVector", te crea un vector entre los puntos inicial y final con N puntos intermedios, y te devuelve el array creado. Este es el que usarás como ejeX.

Luego, la función "evalua", se encarga de en cada punto del ejeX (elementos del vectorX), calcular la potencia adecuada y multiplicarla por el coeficiente correspondiente dado en el vector "pol".

El vector "pol", es un vector que almacena los coeficientes del polinomio que deseas representar, en orden decreciente de exponente. Por ejemplo, si quieres representar y = x^2, pol sería
[1(1*x^2), 0(0*x), 0(0)], si quisieras, -x^3+3x^2-2x+4 sería [-1, 3, -2, 4], y así...

De este modo, si quisieras representar y = x^2, bastaría con hacer:

Código :

var polinomio:Array = new Array(1,0,0);
var vectorX:Array = new Array();
var vectorY:Array = new Array();

vectorX = creaVector(0,1,10);
vectorY = evalua(vectorX,polinomio);


Con lo que tendrías los pares x,y (vectorX[i],vectorY[i]) adecuados para poder representar la función. Si hay por aquí alguien familiarizado con Matlab o similares, verá que es básicamente la forma en que trabajan estos programas.

Te dejo a tí el pelearte con "lineTo", "moveTo" y demás, para luego representar los pares de puntos según te convenga.

Con respecto a otro tipo de funciones, sería cuestión de buscarle un poco las vueltas.

Espero que te sirva de algo.

Salu2

Por Cyril

45 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Oct 2005 09:19 am
Hola a todos, soy nuevo en el foro. Hace unos días tuve un problema con esto de las graficas, y a lo mejor podría servirte, ShantiFox. Si lo deseas te puedo mandar el código.

PD: ¿Como se pone el código pa que salga en el recuadro amarillo?

Por Gengis

27 de clabLevel



 

Córdoba(España)

msie
Citar            
MensajeEscrito el 02 Oct 2005 09:50 am
El texto que quieras que esté en el recuadro amarillo debe estar entre las etiquetas [ code ] "Aquí va tu texto [ /code ]

Fijate que hay un botón que pone code en la parte superior.

Pincha una vez para empezar a introducir el código, y nuevamente cuando hayas acabado.

Por Cyril

45 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Oct 2005 10:26 am
Gracias Cyril :D

Bueno, ahora que ya soy todo un experto en esto de los mensajes :wink: , intentare explicar mejor lo de antes:

Código :

// Calculamos el valor mínimo y máximo de x e y
minimoX = maximoX = x[0];
minimoY = maximoY = y[0];
for( i=0; i<puntos.length; i++ ) {
   if( minimoX > x[i] )   minimoX  = x[i];
   if( maximoX > x[i] )   maximoX = x[i];
   if( minimoY > y[i] )   minimoY  = y[i];
   if( maximoY < y[i] )   maximoY = y[i];
}
   
// Calculamos el factor de escalado en x e y.
// dimensionX y dimensionY son las dimensiones del area de dibujo
// El factor de escalado en y es negativo debido al sistema de 
// coordenadas de Flash
escalaX = dimensionX / ( maximoX - minimoX );
escalaY = - dimensionY / ( maximoY - minimoY );

// Para dibujar
xDibujo = ( x[0] - minimoX ) * escalaX;
yDibujo = ( y[0] - minimoY ) * escalaY;
zonaDibujo.moveTo( xDibujo, yDibujo  );
for( i=1; i<numeroPuntos; i++) {
   xDibujo = ( x[i] - minimoX ) * escalaX;
   yDibujo = ( y[i] - minimoY ) * escalaY;
   zonaDibujo.lineTo( xDibujo, yDibujo  );
}


Con esto dibujamos la gráfica ajustada a una clip de pelicula.

Ciao...

Por Gengis

27 de clabLevel



 

Córdoba(España)

msie
Citar            
MensajeEscrito el 02 Oct 2005 12:06 pm
Jejeej, yo llegué ayer a la misma solución

Código :

function escalaVector(vector:Array, c:Number, d:Number):Array{
   var N:Number = vector.length;
   var max:Number = vector[0];
   var min:Number = vector[0];
   
   //Encontrar máximo y mínimo
   for(var i=0;i<N;i++){
      max = Math.max(max,vector[i]);
      min = Math.min(min,vector[i]);
   }

   var a:Number = min;
   var b:Number = max;
      
   var m:Number = (d-c)/(b-a);
   var k:Number = (b*c - a*d)/(b-a);
      
   for(var i=0;i<N;i++){
      vector[i] = m*vector[i] + k;
   }
   return vector;
}

function dibuja(vectorX:Array, vectorY:Array, mc:MovieClip):Void{
   var N:Number = vectorX.length;
   
   with(mc){
      lineStyle(1,"0xFFFFFF");
      moveTo(vectorX[0],vectorY[0]);
      for (var i=1;i<N;i++){
         var x:Number = vectorX[i];
         var y:Number = vectorY[i];
         lineTo(x,y);
      }
   }
}


Salu2

Por Cyril

45 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Oct 2005 06:13 pm
muchas gracias, es un buen inicio... cuando lo tenga todo terminado podré compartirlo con tofos.
gracias a todos

Por shantifox

93 de clabLevel

1 tutorial

 

Peru

msie

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.