Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Urgente!!! es a contrareloj!!!

Estas en el tema de Urgente!!! es a contrareloj!!! en el foro de Visual Basic clásico en Foros del Web. Necesitaria por favor que me dieran una mano en como pensar la solucion a mi problema!!! Para una remiseria tengo que desarrollar una herramienta de ...
  #1 (permalink)  
Antiguo 29/11/2007, 04:54
Avatar de piojoman  
Fecha de Ingreso: enero-2005
Ubicación: Argentina
Mensajes: 224
Antigüedad: 19 años, 3 meses
Puntos: 3
Urgente!!! es a contrareloj!!!

Necesitaria por favor que me dieran una mano en como pensar la solucion a mi problema!!!
Para una remiseria tengo que desarrollar una herramienta de la cual calcula distancias entre calles, las cuales se ingresan a manos tanto nombres como altura. Lo que no se es como podria plasmar las calles de un mapa de una ciudad en una base de datos para despues usarla para calcular dist entre dos direcciones!!!
Alguno tiene alguna idea!!!!
  #2 (permalink)  
Antiguo 29/11/2007, 11:52
Avatar de Kruzado  
Fecha de Ingreso: marzo-2007
Mensajes: 307
Antigüedad: 17 años, 1 mes
Puntos: 17
Re: Urgente!!! es a contrareloj!!!

por ejemplo....

entre dos calles hay 100 metros
en el mapa entre esas 2 calles hay 2000 pixeles o twips (que es la medida de las fotos por aca)

entonces 1 metro equivale a 20 twips.... entonces si la distancia entre dos puntos de tu mapa es por ejemplo 50000 twips.... entonces la distancia en metros es 2500 metros, se entiende?

distancia= totaltwips/twipspormetro
  #3 (permalink)  
Antiguo 30/11/2007, 06:56
Avatar de Kelpie  
Fecha de Ingreso: febrero-2002
Ubicación: NorthSpain
Mensajes: 609
Antigüedad: 22 años, 2 meses
Puntos: 8
Re: Urgente!!! es a contrareloj!!!

En una aproximación muy sencilla al problema debes ver las calles en este sentido:

Empiezan en un punto; Ejemplo (x1,y1)
Acaban en un punto; Ejemplo (x2,y2)
Tienen cruces con otras calles; Ejemplo (calleA,x3,y3)
Si la calle no es recta, cada tramo será una subcalle (tratada como calle)
Una calle curva se toma como varios tramos rectos
El final de una calle, salvo que muera, será un cruce

Necesitas guardar, para empezar, en cinco tablas:

calles_principales: (para las grandes calles)
id_calle_verdadera
nombre

calles: (para las calles rectas y los pedazos)
id_calle
nombre
xIni
yIni
xFin
yFin

cruces:
id_propietaria
id_que_cruza
xCruce
yCruca

uniones: (para saber los pedazos de las calles)
id_calle_verdadera
id_calle

casas: (Para guardar los números de los portales)
id_calle
numero
xPortal
yPortal


Para ir del punto I al punto D...
El punto actual es el origen
El siguiente cruce en la dirección correcta es el destino parcial

Calculas si debes ir sumando o restando la X y la Y (para saber por donde tirar)
Recorres los puntos de la calle Origen de la tabla cruces
En cada cruce compruebas si te va a cercar o a alejar del destino final. El cruce actual pasa a ser tu origen y el siguiente tu destino parcial.
Si te va a alejar tomas la calle que cruza como actual, en cuyo caso la calle actual cambia
En cada cruce el punto actual cambia
Si llegas a una calle muerta regresas al anterior cruce y tomas una decisión diferente


Teniendo las coordenadas de los puntos "reales", poniendo el punto cero fuera de la ciudad podrás calcular la distancia sumando los tramos que vas haciendo. Un tramo va desde un origen (O) a un destino parcial (D) [Es la longitud de un segmento, la raiz cuadrada de la suma de los cuadrados de las diferencias de coordenadas.
__________________
Kelpie
  #4 (permalink)  
Antiguo 30/11/2007, 15:21
Avatar de piojoman  
Fecha de Ingreso: enero-2005
Ubicación: Argentina
Mensajes: 224
Antigüedad: 19 años, 3 meses
Puntos: 3
Re: Urgente!!! es a contrareloj!!!

ok muchas gracias por las respuesta, teniendo en cuanta las sugerencias veo que resuelvo, los nuevos problemas y las nuevas condiciones!!!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:29.