elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ActionScript: Duda con fragmento de código (¡Matemáticas!)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ActionScript: Duda con fragmento de código (¡Matemáticas!)  (Leído 3,027 veces)
Alejandro CabreraH

Desconectado Desconectado

Mensajes: 2


Mәktūb


Ver Perfil WWW
ActionScript: Duda con fragmento de código (¡Matemáticas!)
« en: 20 Enero 2011, 14:54 pm »

Buscando por internet he encontrado el siguiente código, funciona a la perfección y tras toquetearlo un poco hace lo que quiero.

Código:
var fuerza_repulsiva = 50; 
var distancia_minima = 5;
 
var coordenada_x_final = this._x;
var coordenanda_y_final = this._y;
 
this.onEnterFrame = function(){
   
   var distancia_x = this._x - _root._xmouse;
   var distancia_y = this._y - _root._ymouse;
   
   var distancia_existente = Math.sqrt(distancia_x * distancia_x + distancia_y * distancia_y);
   
   if(distancia_existente < distancia_minima){
       
      var incremento_x = distancia_x * (distancia_existente + fuerza_repulsiva) / distancia_existente;
      var incremento_y = distancia_y * (distancia_existente + fuerza_repulsiva) / distancia_existente;
       
      coordenada_x_final = this._x + incremento_x;
      coordenada_y_final = this._y + incremento_y;
       
   }
   
   var incremento_x = (coordenada_x_final - this._x) * .25;
   var incremento_y = (coordenada_y_final - this._y) * .25;
   
   this._x = this._x + incremento_x;
   this._y = this._y + incremento_y;
   
};

Cuando me topo con un código así voy analizando línea por línea y cambiando algunos nombres de variables hasta entender que hace en cada momento, pero una parte de este me ha podido.

Citar

Explicación y duda

   1. Primero calculamos la distancia entre el mouse y el objeto en el eje X, posteriormente hacemos lo mismo en el eje Y.

   2. A continuación calculamos la distancia real entre los dos puntos mediante el teorema de Pitágoras usando los dos datos anteriores.

   3. Abrimos el condicional. Si la distancia entre el mouse y el objeto es menor a lo establecido:

            Fijamos la cantidad de píxels que se debe alejar nuestro objeto con operaciones que no logro comprender.

            Fijamos la posición final del objeto tras el desplazamiento. No comprendo la finalidad, ya hacemos esto al final del código.

   4. Volvemos a fijar el incremento para alejar nuestro objeto. ¿Por qué? Si se ejecutara el condicional tendríamos repetida la declaración de las variables "incremento_x" e "incremento_y".

   5. Finalmente le sumamos a la posición inicial la distancia que se debe alejar el objeto para los dos ejes de coordenadas.


No logro comprender practicamente todas las líneas que se ejecutan dentro y después del "if" ¿Alguien me las puede explicar? Por si las moscas cuelgo el código tal cual lo saqué de internet (AVISO: De la manera siguiente no ejecuta lo deseado):

Código:
//---Valor que debe alejarse y valor al que permite acercarse 
 
var alejarse:Number = 50;
var cerca:Number = 50;
 
var newX:Number = this.bola._x;
var newY:Number = this.bola._y;
 
//---Funcion de movimiento
this.bola.onEnterFrame = function():Void {
   
   var difX:Number = this._x - _root._xmouse;
   var difY:Number = this._y - _root._ymouse;
   
   var hipot:Number = Math.sqrt(difX * difX + difY * difY);
   
   if(hipot < cerca){
       
      var incX:Number = difX * (hipot + alejarse) / hipot;
      var incY:Number = difY * (hipot + alejarse) / hipot;
       
      newX = this._x + incX;
      newY = this._y + incY;
       
   }
   
   var X:Number = (newX - this._x) * .25;
   var Y:Number = (newY - this._y) * .25;
   
   this._x += X;
   this._y += Y;
   
};

Espero que me podáis ayudar, llevo toda la mañana dandole al coco con esta historia. Gracias de antemano por la ayuda, cualquier mínima pista será bien recibida.


En línea

ignorantev1.1


Desconectado Desconectado

Mensajes: 617


/\ Así acabo cuando quiero programar...


Ver Perfil WWW
Re: ActionScript: Duda con fragmento de código (¡Matemáticas!)
« Respuesta #1 en: 20 Enero 2011, 19:04 pm »

Citar
Fijamos la cantidad de píxels que se debe alejar nuestro objeto con operaciones que no logro comprender.
:huh:
(supongamos:)
difX = 10
hipot = 2
alejarse =  5

          difX x (hipot + alejarse)    10 x (2 + 5)    10 x 7     70
incX = --------------------------- =  ------------- = ------- =  --- = 35
                      hipot                            2              2          2

Citar
Fijamos la posición final del objeto tras el desplazamiento. No comprendo la finalidad, ya hacemos esto al final del código.

Es que en realidad no hace eso. La posicion final del objeto solo se fija al final del codigo, lo que realmente se modifica es la variable newX.

Citar
   4. Volvemos a fijar el incremento para alejar nuestro objeto. ¿Por qué? Si se ejecutara el condicional tendríamos repetida la declaración de las variables "incremento_x" e "incremento_y".
Buen punto!  :xD mejor declaralas al inicio del codigo.

Usa las funciones GeSHi: ;)
Código
  1.  
  2. //---Valor que debe alejarse y valor al que permite acercarse
  3.  
  4. var alejarse:Number = 50;
  5. var cerca:Number = 50;
  6.  
  7. var newX:Number = this.bola._x;
  8. var newY:Number = this.bola._y;
  9.  
  10. var incX:Number;
  11. var incY:Number;
  12.  
  13. //---Funcion de movimiento
  14. this.bola.onEnterFrame = function():Void {
  15.  
  16.   var difX:Number = this._x - _root._xmouse;
  17.   var difY:Number = this._y - _root._ymouse;
  18.  
  19.   var hipot:Number = Math.sqrt(difX * difX + difY * difY);
  20.  
  21.   if(hipot < cerca){
  22.  
  23.      incX:Number = difX * (hipot + alejarse) / hipot;
  24.      incY:Number = difY * (hipot + alejarse) / hipot;
  25.  
  26.      newX = this._x + incX;
  27.      newY = this._y + incY;
  28.  
  29.   }
  30.  
  31.   incX = (newX - this._x) * .25;
  32.   incY = (newY - this._y) * .25;
  33.  
  34.   this._x += incX;
  35.   this._y += incY;
  36.  
  37. };
  38.  

Modifique poquito el codigo espero y te sirva... :rolleyes:


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines