| Mensaje |
Autor |
Publicado: Vie Jul 06, 2007 1:14 am |
Citar |
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 )
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 
1 Tutoriales
22 Tips
|
|
Volver arriba |
 |
Publicado: Lun Jul 09, 2007 2:37 am |
Citar |
| 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 |
 |
Publicado: Mar Jul 10, 2007 8:31 pm |
Citar |
hey saben como lograr hacer acelerar un MovieClic si saben en vieenme el tutorial a lowlanmx3000@hotmail.com |
|
|
lowland_blog
Invitado
|
|
Volver arriba |
 |
Publicado: Mie Jul 11, 2007 4:05 pm |
Citar |
|
jessica_blog
Invitado
|
|
Volver arriba |
 |
Publicado: Mie Jul 11, 2007 5:20 pm |
Citar |
| eeeehhh....Disculpen mi ignorancia, eso esta basado en un lenguaje de programacion en especial? |
|
|
Arturo_X

clabLevel: 13 
|
| MP |
|
|
Volver arriba |
 |
Publicado: Mie Jul 11, 2007 8:05 pm |
Citar |
| Arturo_X escribió: eeeehhh....Disculpen mi ignorancia, eso esta basado en un lenguaje de programacion en especial?
ActionScript  |
|
|
penHolder

clabLevel: 1741
| mdz |
19 Tips
|
|
Volver arriba |
 |
Publicado: Vie Jul 13, 2007 3:10 pm |
Citar |
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 
1 Tutoriales
22 Tips
|
|
Volver arriba |
 |
Publicado: Mie Ago 22, 2007 10:17 pm |
Citar |
| 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 |
 |
Publicado: Vie Ago 24, 2007 2:02 am |
Citar |
|
ana karen romero saldivar
Invitado
|
|
Volver arriba |
 |
Publicado: Jue Oct 25, 2007 4:27 pm |
Citar |
| quería saber una pagina donde te den las soluciones de las raices |
|
|
xica loka_blog
Invitado
|
|
Volver arriba |
 |
Publicado: Dom Nov 11, 2007 5:15 pm |
Citar |
si puede ser podrian poner ejercicios de algoritmo para hacer de las raices cuadradas
xau!!!!!!!!!!!! gracias!!!!!!!!! |
|
|
nena mona wapa_blog
Invitado
|
|
Volver arriba |
 |
Publicado: Dom Nov 11, 2007 5:20 pm |
Citar |
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 |
 |
Publicado: Mar Nov 27, 2007 3:29 pm |
Citar |
| yo creo k deberian poner ejemplos de fraccionessssssssssssssssss |
|
|
la_lokiktaaaaaaaaaaa_blog
Invitado
|
|
Volver arriba |
 |
Publicado: Mar Dic 04, 2007 5:45 pm |
Citar |
| pero deben poner mas ejemplos y cosas de esas y mas raizes sin hacer |
|
|
carolina_blog
Invitado
|
|
Volver arriba |
 |
Publicado: Mar Dic 11, 2007 6:55 pm |
Citar |
| x favor podriais poner raices cdrds para q ls agms en internet |
|
|
elena_blog
Invitado
|
|
Volver arriba |
 |
Publicado: Jue Ene 24, 2008 8:03 pm |
Citar |
| quisiera hacer una raiz cuadrada simple |
|
|
roberta gomes_blog
Invitado
|
|
Volver arriba |
 |
Publicado: Mie Ene 30, 2008 11:03 pm |
Citar |
| 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 |
 |
Publicado: Dom Feb 24, 2008 7:08 pm |
Citar |
| odios no me gustan las matematicas chau |
|
|
gaby_blog
Invitado
|
|
Volver arriba |
 |
Publicado: Vie May 16, 2008 11:46 pm |
Citar |
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 |
 |
 |