Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Distancia entre coordenadas...

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Programación en General
Mensaje Mar May 15, 2007 8:57 am
monoswim
Vive para Perl en Español
Vive para Perl en Español
Registrado: 18 Nov 2003
Mensajes: 720
Ubicación: Buenos Aires
Distancia entre coordenadas... Responder citando

Supongamos que tengo un plano en donde se pueden seleccionar coordenadas del tipo X e Y, como ser x=100 y=50

Como podría calcular la distancia entre 2 coordenadas ?

Hay algún módulo que lo calcule y yo pueda definir que es una coordenada...O tengo que hacerlo manualmente calculando la suma de los cuadrados y eso...

Saludos
Mensaje Mar May 15, 2007 2:08 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
Responder citando

Hmmm, entre dos puntos simples:


Hay otra forma más fácil pero no la recuerdo Sad
Mensaje Mar May 15, 2007 4:26 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
Responder citando

¿Pero son puntos geográficos o cartesianos?
Mensaje Mie May 16, 2007 7:36 am
monoswim
Vive para Perl en Español
Vive para Perl en Español
Registrado: 18 Nov 2003
Mensajes: 720
Ubicación: Buenos Aires
Responder citando

cartesianos, hasta ahora la única que conozco es la miasma que puso creating, la de la suma de cuadrados...

Quiero ver si hay algo ya hecho que me facilite un poco la vida jeje estoy investigando para no codificar luego de más...

Saludos
Mensaje Mie May 16, 2007 8:54 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
Responder citando

Se podría hacer algo con trigonometría, pero casi te daría lo mismo en coste de cálculo.

Si el contexto donde te mueves es pequeño (es más o menos reducido la distancia máxima) podrías calcular las distancias precalculando los cuadrados de la suma de diferencias, y de esa manera te ahorras un sqrt(). Incluso yo he visto para videojuegos precalcular distancias basadas en la diferencia de coordenadas en las dos dimensiones.

En módulos, tienes unos cuántos que te realizan esta tarea. Por ejemplo, Cad::Calc tienes la función dist2d() para el cálculo de esta distancia. Según el código, es la de siempre: raíz de la suma de cuadrados de las diferencias.
Mensaje Mie May 16, 2007 4:11 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
Responder citando

¿Los números son muy grandes?

Si no es así no es tan dificil de programar...

Perl:

sub ditancias {
  my ($a, $b, $c, $d) = @_;
  my $resultado = (( (($a-$c)**2) + (($b-$d)**2)) ** (1/2) );
  return $resultado;
}


Cita:
Quiero ver si hay algo ya hecho que me facilite un poco la vida jeje estoy investigando para no codificar luego de más...


Aunque viendo lo que explorer pone... ya está hecho Smile
Mensaje Jue May 17, 2007 10:54 am
monoswim
Vive para Perl en Español
Vive para Perl en Español
Registrado: 18 Nov 2003
Mensajes: 720
Ubicación: Buenos Aires
Responder citando

Muchas gracias amigos, me fueron de mucha ayuda !!! como siempre !!! Wink

Saludos
PD: Explorer, el link que colocas da un NOT FOUND dentro del mismo cpan...Ya lo había visto en otro link...
PD: La URL bien es esta http://search.cpan.org/~ewilhelm/CAD-Calc-0.26/lib/CAD/Calc.pm
Mensaje Jue May 17, 2007 4:28 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
Responder citando

Ya me he dado cuenta... parece ser que el motor de búsqueda en CPAN ha cambiado...
Mensaje Vie May 18, 2007 4:58 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
Responder citando

Pues no... parece que es una limitación de CPAN. Con otros módulos sí que funciona el método de llamarlos con perldoc?. Cosa curiosa...
Mensaje Lun May 21, 2007 1:03 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
Responder citando

Duda de funcionalidad...

¿Qué es mejor, usar sqrt(número) o número elevado a la 1/2?

Los resultados son los mismos, pero... ¿Realmente hay alguna diferencia?
Mensaje Sab May 26, 2007 7:57 am
eliben
Perlero Nuevo
Perlero Nuevo
Registrado: 13 May 2007
Mensajes: 4
Ubicación: Israel
Responder citando

Es muy sencillo activar un pequeño Benchmark:

Perl:
use strict;
use warnings;
use Benchmark ":all";
$|++;


my @arr = (5, 4, 3.14151926, 999786, 5.178591e37, 14e-33);


cmpthese(1000000, {
    'sqrt'   => sub {my $s = 0; $s += sqrt($_)  foreach(@arr);},
    '**1/2 ' => sub {my $s = 0; $s += $_ ** 0.5 foreach(@arr);}
});


Resultados:
Código:
           Rate **1/2    sqrt
**1/2  140964/s     --   -15%
sqrt   165344/s    17%     --
Mensaje Sab May 26, 2007 9:19 am
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
Responder citando

Bueno, ya que lo dices... Smile

Rsultados (Linux 2.6.17-11-generic, AMD 32-bit)

Código:
           Rate **1/2    sqrt
**1/2  117647/s     --   -24%
sqrt   155763/s    32%     --


Que raro que sqrt sea mas lento.
Mensaje Dom May 27, 2007 12:21 pm
eliben
Perlero Nuevo
Perlero Nuevo
Registrado: 13 May 2007
Mensajes: 4
Ubicación: Israel
Responder citando

sqrt es mas rápido Smile
Publicar nuevo tema   Responder al tema    Foros de discusión -> Programación en General Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group