Cristalab

Aproximar raíces cuadradas para lograr un mejor rendimiento

   Foros de discusión -> Tips, ¡Envía tus trucos aquí!
Mensaje Autor
Mensaje Publicado: Vie Jul 06, 2007 1:14 am     Citar   firefox 
A veces, especialmente en los videojuegos, necesitamos calcular distancias (por lo que necesitamos raíces cuadradas). La distancia al objetivo, al suelo, la distancia de penetración (para corregirla), etc...

El problema es que a veces, sea por el motivo que sea, terminamos acumulando raíces, ralentizando el programa inútilmente.

Como solución es muy útil aproximar las raíces, en este caso, propongo una forma bastante simple (hay varias):

Código :

raizNewton = function (numero:Number, iteraciones:Number, valorInicial:Number):Number {
   for (var i = 0; i < iteraciones; i++) {
      valorInicial = (valorInicial + numero / valorInicial) / 2;
   }
   return valorInicial;
};
(El nombre se lo puse en honor a quien la propuso)

¿Cómo funciona? No es demasiado complicado, geométricamente equivale a crear un cuadrado de área igual al número al que le queremos calcular la raíz y "hacerlo más cuadrado". Es decir, aumentamos el lado más grande y agrandamos el más chico hasta que sean iguales. En ese momento sus lados van a ser iguales a la raíz cuadrada del número deseado (por algo se llama raíz cuadrada Guiño )

Igualmente, un problema del algoritmo es que requiere que el valor inicial sea similar a la raíz.

Para ejemplificarlo, muestro distintos valores que va devolviendo la función:

Código :


trace (Math.sqrt(32)); //Output: 5.65685424949238
//
trace (raizNewton(32, 1, 3)); //Output: 6.83333333333333
trace (raizNewton(32, 2, 3)); //Output: 5.75813008130081
//
trace (raizNewton(32, 1, 4)); //Output: 6
trace (raizNewton(32, 2, 4)); //Output: 5.66666666666667
//
trace (raizNewton(32, 1, 5)); //Output: 5.7
trace (raizNewton(32, 2, 5)); //Output: 5.65701754385965
//
trace (raizNewton(32, 1, 6)); //Output: 5.66666666666667
trace (raizNewton(32, 2, 6)); //Output: 5.65686274509804
//
trace (raizNewton(32, 4, 6)); //Output: 5.65685424949238


Noten que con una buena aproximación inicial (6) y 2 iteraciones, se consiguen 4 decimales correctos (con 1 iteración conseguimos 2). Mucho más de lo necesario. Finalmente, con sólo 4 iteraciones conseguimos un valor tan bueno como el de la función Math.sqrt();

Ahora bien, la utilidad de esto es que podemos decidir cuánta precisión pretendemos, en prácticamente todos los casos, aproximar con 1 o 2 decimales es suficientemente bueno (es más, hasta excesivamente bueno), y si, además, empleamos el último valor de la raíz como aproximación inicial, fotograma a fotograma va a ser más preciso. Mi consejo es no usar más de 1 o 2 iteraciones si podemos prescindir de la precisión en uno que otro fotograma (aunque podemos calcular la raíz inicialmente para tener un buen valor inicial).

Ésto resulta especialmente útil, ya que usando 1 o 2 iteraciones puede llegar a ser de 2 a 3 veces más rápido emplear este algoritmo que la función nativa (depende mucho del tamaño del número)

Por último, aclaro que es bastante fácil hacer ésto a mano (hasta mentalmente, dependiendo del valor) y que es un buen modo de calcular una raíz cuadrada si no se tiene una calculadora cerca.

HernanRivas


clabLevel: 2528 Genero:Masculino

1 Tutoriales
22 Tips

MP Email         
Volver arriba
Mensaje Publicado: Lun Jul 09, 2007 2:37 am     Citar   firefox 
Excelente... o lo he podido ver en detalle, pero siempre aplaudiré el uso de la matemática en el actionscript! =D

EverST_blog
Invitado






        
Volver arriba
Mensaje Publicado: Mar Jul 10, 2007 8:31 pm     Citar   msie 
hey saben como lograr hacer acelerar un MovieClic
si saben en vieenme el tutorial a
lowlanmx3000@hotmail.com

lowland_blog
Invitado






        
Volver arriba
Mensaje Publicado: Mie Jul 11, 2007 4:05 pm     Citar   msie 
no entiendo

jessica_blog
Invitado






        
Volver arriba
Mensaje Publicado: Mie Jul 11, 2007 5:20 pm     Citar   firefox 
eeeehhh....Disculpen mi ignorancia, eso esta basado en un lenguaje de programacion en especial?

Arturo_X


clabLevel: 13 Genero:Masculino



MP       MSN Messenger  
Volver arriba
Mensaje Publicado: Mie Jul 11, 2007 8:05 pm     Citar   firefox 

Arturo_X escribió:

eeeehhh....Disculpen mi ignorancia, eso esta basado en un lenguaje de programacion en especial?


ActionScript U_U

penHolder


clabLevel: 1741
| mdz |

19 Tips

MP Web     Google Talk    
Volver arriba
Mensaje Publicado: Vie Jul 13, 2007 3:10 pm     Citar   firefox 
Ahh, me olvidé de un detalle. En caso de que usen el código con una iteración, es mejor (para obtener una mayor velocidad de ejecución) quitar el for.

Incluso (aunque esto no lo pude corroborar), creo que con 2 iteraciones también conviene escribir el código sin usar el for.


Por último, jessica, el código es bastante simple. Lo que hago es esto:

Supongamos que quiero la raíz cuadrada de 64 (es 8, podés comprobarlo con una calculadora)

Lo que hago es construir un rectángulo de área 64, digamos 64x1
Ahora, busco hacerlo más cuadrado, divido el largo más grande por 2 y el más chico lo multiplico por 2; me queda un rectángulo de 32x2 (cuya área es también 64)
Lo hago de nuevo: 16x4 (otra vez, el área es 64)
Lo hago otra vez: 8x8 (el área sigue siendo 64)

En éste momento me doy cuenta de que ambos lados son idénticos, por lo que dejo de hacer cuentas y concluyo que la raíz cuadrada de 64 es 8.

En caso de querer sacar la raíz cúbica, hacemos algo similar, pero con un prisma rectangular que transformamos en cubo.

Fue Newton el que propuso éste método y también fue él el que escribió esta fórmula de manera recursiva (como una sucesión).
 _________________
Hernán Rivas Acosta -hernanrivasacosta@gmail.com-

Gracias a Duke Uthyr Ian Hölder por el avatar los avatares.

HernanRivas


clabLevel: 2528 Genero:Masculino

1 Tutoriales
22 Tips

MP Email         
Volver arriba
Mensaje Publicado: Mie Ago 22, 2007 10:17 pm     Citar   msie 
solo quiero saber como se pueden resolber las raises cuadradas pero apenas estoy enpensandolkas apraticar asi que quisiera enpesar desde el principio se podiamos ablar por mi correo oxelnain@hotmail.com si no estoy conetado en ese en adios_mivida_1@hotmail.com

vl (dj)_blog
Invitado






        
Volver arriba
Mensaje Publicado: Vie Ago 24, 2007 2:02 am     Citar   msie 
esta super padre

ana karen romero saldivar
Invitado






        
Volver arriba
Mensaje Publicado: Jue Oct 25, 2007 4:27 pm     Citar   msie 
quería saber una pagina donde te den las soluciones de las raices

xica loka_blog
Invitado






        
Volver arriba
Mensaje Publicado: Dom Nov 11, 2007 5:15 pm     Citar   msie 
si puede ser podrian poner ejercicios de algoritmo para hacer de las raices cuadradas

xau!!!!!!!!!!!!
gracias!!!!!!!!!

nena mona wapa_blog
Invitado






        
Volver arriba
Mensaje Publicado: Dom Nov 11, 2007 5:20 pm     Citar   msie 
podria poner el algoritmo de las raices cuadradas para hacer ejercicios
porke ami me encanta hacer es super divertido y tambien poner las explicaciones
(porke esta pagina me la recomendo un profesor de mi instituto)
(y cuando me lo deijo creo k se decepcono mucho)

nena maona wapa
Invitado






        
Volver arriba
Mensaje Publicado: Mar Nov 27, 2007 3:29 pm     Citar   msie 
yo creo k deberian poner ejemplos de fraccionessssssssssssssssss

la_lokiktaaaaaaaaaaa_blog
Invitado






        
Volver arriba
Mensaje Publicado: Mar Dic 04, 2007 5:45 pm     Citar   msie 
pero deben poner mas ejemplos y cosas de esas y mas raizes sin hacer

carolina_blog
Invitado






        
Volver arriba
Mensaje Publicado: Mar Dic 11, 2007 6:55 pm     Citar   msie 
x favor podriais poner raices cdrds para q ls agms en internet

elena_blog
Invitado






        
Volver arriba
Mensaje Publicado: Jue Ene 24, 2008 8:03 pm     Citar   msie 
quisiera hacer una raiz cuadrada simple

roberta gomes_blog
Invitado






        
Volver arriba
Mensaje Publicado: Mie Ene 30, 2008 11:03 pm     Citar   msie 
plss k alguen me ponga una tabla de las putas raices cuadradas esas, k ya ni tengo ganas de pensar..[podridas las matematicas..!!]

mi_blog
Invitado






        
Volver arriba
Mensaje Publicado: Dom Feb 24, 2008 7:08 pm     Citar   firefox 
odios no me gustan las matematicas chau

gaby_blog
Invitado






        
Volver arriba
Mensaje Publicado: Vie May 16, 2008 11:46 pm     Citar   msie 
hola como estan que bueno que utilicenesta paginay fui el primer lugar a nivel estatal de queretaro en la olimpiadas de matematicas...
soy genial no y si no me creen envienme un correo mggr_931219@hotmail.com
bye,bye

MARYLU-blog
Invitado






        
Volver arriba
Responder al tema    Foros de discusión -> Tips, ¡Envía tus trucos aquí! Todas las horas son GMT
Página 1 de 1

Respuesta Rapida
Nick: 

  Citar el ultimo mensaje
Adjuntar tu firma

Mostrar mensajes de anteriores:
  

 


Cristalab BloodBerry Style © 2006 Cristalab
Powered by phpBB © 2001, 2002 phpBB Group