|
![]() |
||
Calcula distancia entre cidades
|
||
. Nós temos 754.120 usuários, convidamos você fazer parte de nossa comunidade também! Se ainda não encontrou o que procura use nossa pesquisa. Esperamos que aprecie nosso trabalho.
![]() |
|
|
Opções do Tópico |
|
|
#1 (permalink) |
|
Membro Senior
|
Olá pessoal, blz??
Preciso desenvolver um sistema que calcula distancia entre cidades como tem no link abaixo: http://www.dnit.gov.br/rodovias/distancias/distancias.asp Mais nao sei nem por onde começar, pq preciso fazer em .txt pq o servidor nao suporta .mdb Qual seria a lógica do calculo??? Pq se alguem tiver um exemplo ae que possa me ajudar agradeceria. []s, Adilson
__________________
================================= Shopmedia Corporative Internet & System http://www.shopmedia.com.br ================================= |
|
|
|
|
|
#2 (permalink) |
|
Novo Membro
|
Fica dificil dizer qual a lógica foi utilizada, as vezes não foi nem lógica, e sim repetitivos comandos do tipo:
Se campo a = Americana E Se Campo b = São Paulo Imprima 133km Para você fazer isso, você pode achar no Mapa Rodoviário, uma tabela com distâncias entre as principais cidades brasileiras. Bem, de todo jeito da pra você fazer uma lógica sim, por exemplo, criar uma matriz e inserir as cidades nela, e então calcular a distância entre os pontos da matriz. Vou explicar melhor. Pense que você tem uma tabela e a tabela tem vários pontos, que por sua vez são cidades. Para você achar a distância da cidade, você teria apenas que calcular a distância entre dois pontos da tabela(no caso a matriz). Se você disser a linguagem de programação que irá usar, talvez eu possa te ajudar mais, até dando um exemplo(eu sei programar em C). Mas de todo jeito aí fica a lógica, se não entender, poste outra mensagem |
|
|
|
|
|
#3 (permalink) |
|
Membro Senior
|
E ae blz??
Até entendi o que vc quiz dizer, mais acontece que teremos varias cidades de Origem e varias de Destino, e por isso que estou me complicando... .pq se tivessemos somente uma de Origem poderia ser a Matriz... e para ver a distancia das demais era facil.. .faria gravar no txt assim: Sao Paulo;Santos;80 Porque na hora de ver a distancia ja teriamos na tela: Sao Paulo até Santos = 80 km por ex.... Mais aí que o bicho pega.... pq teremos varias cidades que irao ateh Santos.. Bom... terei que fazer em .asp e usar .txt para armazenar dados, pq o bendito servidor que está hospedado nao pode utilizar .mdb. Abraços e obrigado! Adilson
__________________
================================= Shopmedia Corporative Internet & System http://www.shopmedia.com.br ================================= |
|
|
|
|
|
#4 (permalink) |
|
Tô em todas
|
Mas você não vai ter todas as distâncias entre as cidades? Se tiver, é só armazenar isso no txt. Se for para calcular a distância através da posição x e y de cada ponto, é só utilizar formula para distância entre dois pontos.
__________________
|Dell Inspiron 6400|Intel Core 2 Duo T7200 (2GHz) |2GB DDR-2 RAM|120GB HD (5.400)|15.4" Wide True Life (1280x800)|Bluetooth integrado, bateria 9 células e mais umas coisinhas |Folding@Home Member! |
|
|
|
|
|
#5 (permalink) |
|
Membro Senior
Registrado em: Sep 2003
Mensagens: 306
Reputação: 18
![]() |
Faz um struct com nome da cidade e suas posições.
Aí faz um array com todas as cidades e suas posições usando o struct. Um switch pra ver qual cidade foi selecionada, onde caso seja a segunda cidade a cidade antes selecionada seja pulada e pronto, você vai ter quais são as cidades, aí é só fazer um triângulo de pitágoras e partir pro abraço :P Você pode até ter ao invés de um switch um for ou qualquer coisa assim, talvez tenham métodos melhores pra correlacionar os nomes das cidades mas esse acho que resolve ![]() Resumindo vc tem algo assim: cidades[0].nome = "cidade A"; cidades[0].x = 10; cidades[0].y = 20; cidades[1].nome = "cidade B"; cidades[1].x = 20; cidades[1].y = 30; cidades[2].nome = "cidade C"; cidades[2].x = 30; cidades[2].y = 40; int cidade[2]; int i; for(i = 0; i < 2; i++) switch(pega valor que foi entrado pelo user e retorne tudo minusculo) case "cidade a": cidade[i] = 0; break; case "cidade b": cidade[i] = 1; break; case "cidade c": cidade[i] = 2; break; default: ação pra cidade errada break; if (cidade[1] == cidade[2]) codigo pra dizer que as cidades saum iguais calcula distancia, algo como: (cidades[cidade[1]].x)^2 + (cidades[cidade[1]].y)^2 - ((cidades[cidade[2]].x)^2 + (cidades[cidade[2]].y)^2) O código aí acima tá longe de ser algo correto, só rascunho mesmo, se eu fosse fazer a forma que me veio à mente foi essa, devem existir outras formas melhores mas tá aí uma que imaginei ![]() |
|
|
|
|
|
#6 (permalink) |
|
Tô em todas
|
Só corrigindo, a fórmula pra calcular a distância entre dois pontos é [(x1-x2)^2+(y1-y2)^2]^1/2
__________________
|Dell Inspiron 6400|Intel Core 2 Duo T7200 (2GHz) |2GB DDR-2 RAM|120GB HD (5.400)|15.4" Wide True Life (1280x800)|Bluetooth integrado, bateria 9 células e mais umas coisinhas |Folding@Home Member! |
|
|
|
|
|
#7 (permalink) | |
|
Highlander
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.724
Reputação: 778
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Citação:
Eu sugiro o seguinte: essas distâncias são rodoviárias, certo? Cadastre as rodovias, e as localidades por onde elas passam... No modelo que eu pensei, vc vai cadastrar os trechos de rodovia. Cada trecho vai ter uma localidade de início e uma de fim. Vai ter também a distância entre essas localidades, e as coordenadas geográficas dessas localidades. Por fim, cadastre uma lista dos próximos trechos para onde vc pode ir a partir desse trecho. O que são essas localidades? São cidades e pontos de interseção entre as estradas. Um detalhe: cada trecho deve ser cadastrado 2x, uma para cada direção. Por fim, crie um índice invertido, com as cidades, a posição geográfica delas, e a rodovia mais próxima. Assim, você tem um ponto de origem e um ponto de destino, e as suas posições geográficas, e as rodovias onde vc deve iniciar e terminar. Assim, você só precisa percorrer, na sua base de rodovias, o trecho entre o início e o fim, de forma que vc tenha uma coordenada geográfica atual, e a cada trecho, vc procure chegar cada vez mais perto da coordenada geográfica de destino. Aí vc simplesmente acumula a distância até o destino. Acho que a maior vantagem desse método é que seria possível indicar, além da distância, o caminho a ser seguido, incluindo os pontos de referência. Esse tipo de algoritmo que eu descrevi é chamado de "Algoritmo Guloso", e é apenas um dos conhecidos pra resolver esse tipo de problema, há outros mais eficientes ou mais rápidos.
__________________
Visite Quepolis (link de indicação) | "chmod 777 nunca ajudou ninguém" (c) 2002-2010 JQueiroz/FGdH
CCNP: √ ² CCSI: □ | Conheça o Novo Bebuns ![]() |
|
|
|
|
|
|
#8 (permalink) |
|
Tô em todas
|
Mil por mil? Não seria mil por três (cidade, x e y)?
jqueiroz, mas pelo que entendi da sua idéia vc vai fazer o cadastro da posição geográfica das cidades do mesmo jeito, ou seja, é igual a idéia do Matheus, só que ainda inclui mais alguns dados.
__________________
|Dell Inspiron 6400|Intel Core 2 Duo T7200 (2GHz) |2GB DDR-2 RAM|120GB HD (5.400)|15.4" Wide True Life (1280x800)|Bluetooth integrado, bateria 9 células e mais umas coisinhas |Folding@Home Member! |
|
|
|
|
|
#9 (permalink) | ||
|
Membro Senior
Registrado em: Sep 2003
Mensagens: 306
Reputação: 18
![]() |
Citação:
![]() Citação:
|
||
|
|
|
|
|
#10 (permalink) |
|
Novo Membro
|
Não sei não jqueiroz, essa sua lógica ficaria menor do que a da struct talvez, porém ficaria muito complicada. Depende muito do número de cidades que ele vai colocar. No site que ele mostrou são paenas algumas. De todo jeito, qualquer coia que ele fizer abrangendo todas as cidades vai ocupar muito espaço. Spy, vc sabe quantas cidades você irá colocar?
|
|
|
|
|
|
#11 (permalink) |
|
Membro Senior
|
E ae pessoal, blz???
Serão aproximadamente 50 cidades.... nao teremos tanta assim, pq eh uma empresa pequena que percorre um certo trecho proximo a cidade dela. Será praticamente como tem neste site: http://www.dnit.gov.br/rodovias/distancias/distancias.asp []s, e obrigado pela força galera. Adilson
__________________
================================= Shopmedia Corporative Internet & System http://www.shopmedia.com.br ================================= |
|
|
|
|
|
#12 (permalink) | ||
|
Highlander
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.724
Reputação: 778
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Citação:
No meu exemplo, não haveria um array... seriam listas encadeadas. O mais próximo de um array seria a lista invertida, das cidades p/ as localidades de início e fim, mas mesmo assim seria um array N x 1 (um vetor). Citação:
E ainda há a questão de como armazenar isso... ou vc pretende fornecer os valores no código? Lembre-se de que nem sempre o que funciona bem em memória funciona bem em disco... veja só o caso dos algoritmos de sort (bubble x quick): em memória, o quick sort dá um banho, mas em disco o buble é mais rápido...
__________________
Visite Quepolis (link de indicação) | "chmod 777 nunca ajudou ninguém" (c) 2002-2010 JQueiroz/FGdH
CCNP: √ ² CCSI: □ | Conheça o Novo Bebuns ![]() |
||
|
|
|
|
|
#13 (permalink) |
|
Novo Membro
|
1 - Eu acho que o melhor seria você fazer uma matriz e inserir as cidades na matriz
2 - O que são esses sort, buble...? |
|
|
|
|
|
#14 (permalink) | |
|
Highlander
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.724
Reputação: 778
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Citação:
Já no "Quick Sort" você divide a tabela em duas partes; pega o elemento do meio, e arruma de forma que todos os elementos antes dele sejam menores que ele, e todos os elementos depois dele sejam maiores que ele. Depois pega cada uma das duas partes, e repete o processo, recursivamente.
__________________
Visite Quepolis (link de indicação) | "chmod 777 nunca ajudou ninguém" (c) 2002-2010 JQueiroz/FGdH
CCNP: √ ² CCSI: □ | Conheça o Novo Bebuns ![]() |
|
|
|
|
![]() |
| Opções do Tópico | |
|
|