Documente Academic
Documente Profesional
Documente Cultură
1
SIMULADOR DE TRFICO VEHICULAR MOTOR DE FLUJO
DIRECTORES
CHRISTIAN ARIAS IRAGURI
INGENIERO DE SISTEMAS
2
NOTA DE ACEPTACIN
-------------------------------------------------------------
-------------------------------------------------------------
-------------------------------------------------------------
--------------------------------------------------
Presidente del Jurado
--------------------------------------------------
Jurado
--------------------------------------------------
Jurado
3
A mis padres por su
apoyo incondicional en
este proceso de mi vida.
A mis hermanos por estar
siempre en los momentos
importantes.
A todos mis profesores
que me brindaron da a
da sus conocimientos.
A mi novia por estar
siempre a mi lado.
A Dios por brindarme la
oportunidad de estar
donde estoy.
A todos mil gracias.
4
A mis padres por su
apoyo incondicional.
A mis profesores que nos
brindaron sus
conocimientos en la
materia.
A mis amistades por estar
presente en todo
momento y brindarme
todo su apoyo.
A Dios por darme la
oportunidad de vivir esta
experiencia.
A mis compaeros y
amigos que hicieron de mi
paso estudiantil una
memorable experiencia.
5
AGRADECIMIENTOS
6
ABSTRACTO
ABSTRACT
The project was born of the need to improve mobility through greater
vehicle flow presented in strategic points of the city, raised as a common
problem that is lived every day in the streets, aims to develop a tool that
allows you to view a simulation through a component called "Simulator
micro Motor", aiming to generate data on the behaviour of traffic based
on a logic model providing an interface for a display system is eventually
connected.
7
TABLA DE CONTENIDO
8
TABLA DE IMAGENES
9
1 RESUMEN
1
. Micro Simulador: es un modelo por lo general discreto que describe el comportamiento del flujo del
trfico vehicular de manera individual y detallada, mostrandolo en una escala ms pequea para un mejor
anlisis.
10
2 INTRODUCCIN
11
pruebas que se logren ajustar al modelo resultante que ser utilizado
para alimentar la entrada de flujo vehicular a la simulacin.
3 OBJETIVO GENERAL
12
4 DEFINICIN DEL PROBLEMA
13
5 REFERENTE TERICO
2
http://enciclopedia.us.es/index.php/Teor%25C3%25ADa_de_grafos
14
5.2 REDES DE TRANSPORTE
15
Cola estocstica: una cola que no puede ser descrita sin hacer intervenir
las probabilidades. Es un modelo ms realista que el anterior. En un da
lluvioso, por ejemplo, es ms probable que aumenten las colas de gente
en las paradas de taxis y que disminuyan en la entrada al zoo.
Las teoras matemticas que tratan el problema general de las colas se les han
resistido durante aos las colas formadas por el trfico de vehculos. Su
caracterstica aleatoria, dinmica de retenciones y aceleraciones no ha
acabado por ajustarse a ningn modelo conocido, por lo que se han requerido
de nuevos planteamientos, con sus correspondientes tcnicas matemticas. El
ms conocido es el modelo llamado autmata celular, conocido por ser un
sistema dinmico capaz de modelar sistemas naturales como por ejemplo, una
coleccin de objetos que logran interactuar unos con otros.
3
http://www.enriquegracian.com/articulos/teoria-de-colas
16
proporcionado resultados interesantes en el estudio del trfico, ya que los
vehculos, se dedican a formar colas...
4
http://es.wikipedia.org/wiki/Simulador
17
5.7 MODELO VISTA CONTROL
Modelo
Vista Control
Ilustracin 2 Modelo-Control-Vista
5
http://www.comusoft.com/modelo-vista-controlador-definicion-y-caracteristicas
18
2. Define las reglas de negocio (la funcionalidad del sistema). Un
ejemplo de regla puede ser: Si la mercanca pedida no est en el
almacn, consultar el tiempo de entrega estndar del proveedor.
19
3. Pueden dar el servicio de Actualizacin (), para que sea invocado
por el controlador o por el modelo (cuando es un modelo activo
que informa de los cambios en los datos producidos por otros
agentes)...
6 PLANTEAMIENTO ESTADSTICO6
6
http://www.inviertaencolombia.com.co/images/Perfil%20Automotriz_2012.pdf
20
6.1 PROBLEMA REFERENTE A LA INFRAESTRUCTURA DEL
PAS7
7
http://www.infraestructura.org.co/historial/noticia9_052807.php
21
matriculan unos 38 mil vehculos en la ciudad, lo que eleva el parque actual de
carros particulares a 300 mil, lo mismo que unas 250 mil motocicletas. Adems,
el 59 por ciento de los cruces semaforizados presentan un estado de
saturacin que los tiene a punto de colapsar.
22
El mercado de vehculos en Colombia est compuesto por una participacin de
produccin nacional del 43% y el 57% restante es importado principalmente por
Corea del Sur, Mxico, India, Japn, Ecuador, China y Estados Unidos.
23
Ilustracin 4 Consumo aparente de Vehculos en Colombia
24
Una verdadera pregunta no es "Cmo cunta capacidad es necesaria para
manejar la demanda? " sino ms bien, "Cuntos vehculos o personas pueden
entrar en reas congestionadas en plazos de tiempo designado?'
7.1 Caractersticas
Administrar el sistema fsico. Los inventarios fsicos del sistema son siempre
elementos necesarios. Estos incluyen dispositivos de control de trfico,
accesorios de iluminacin y carreteras. Estos inventarios ayudan a evaluar los
elementos que deban ser reemplazados o reparados y en qu horario previsto.
8
Roger P. Roess, Elena S. Prassas, William R. McShane, TRAFFIC ENGINEERING. Pearson
Prentice Hall
25
fundamental para la comprensin en demanda de viajes, Relaciones bsicas o
parmetros de calibracin. Medidas fundamentales, como percepcin reaccin
de tiempo, avances y espacio en autopistas y otras instalaciones de flujo
ininterrumpido, relaciones y otros parmetros claves debe ser adecuadamente
cuantificados y calibrados.
8 TECNOLOGAS MODERNAS
9 TIPOS DE ESTUDIOS
Los conteos de trfico son los ms bsicos estos estudios se dan en principal
medida a la demanda; prcticamente todos los aspectos de Ingeniera de
trfico requieren volumen como entrada, incluyendo la planificacin de la
carretera y diseo, las decisiones en el control y operaciones.
26
9.2 Estudios de velocidad
Las caractersticas de velocidad son fuertemente relacionadas con cuestiones
de seguridad y se necesitan para evaluar la viabilidad de la normativa vigente
de la velocidad o establecer otras nuevas de forma racional.
27
10 ESTADO DEL ARTE
Dentro del entorno de simulacin de trfico existen varios tipos, Que fueron
objeto de estudio, para el anlisis objetivo al tema planteado con respecto a
nuestro aplicativo. Se dan a conocer los ms utilizados e implementados a nivel
de simuladores.
TransModeler10
..Es un potente y verstil paquete de simulacin, aplicable a una amplia gama
de tareas de planeamiento y modelamiento de trfico. Este puede simular toda
clase de redes de viales, desde autopistas hasta calles de los centros de las
ciudades, y puede analizar redes multimodales de reas extensas con gran
detalle y fidelidad..Construido por ( caliper TransModeler Traffic Simulation
Software).
9
http://sumo.sourceforge.net/
10
http://www.caliper.com/transmodeler/descripcion.htm
28
TEC-INTRAF11
11
http://www.grupointech.com/tec-intraf/
29
AIMSUN12: Simulador de trnsito vehicular
Ilustracin 6 Aimsun
12
http://www.einphos.com.ve/portal/index.php?option=com_content&view=article&id=56&Itemid=68
30
de enrutamiento exclusivo entre otros.. construido por (Einphos, CA -
2009 RIF J-31272969-4).
Para poder llevar a cabo la realizacin del simulador, y el control del mismo, fue
necesario, entender diferentes modelos de trfico vehicular, Roger P. Roess
(Traffic Engineering, 2004, Cap 5)13 sostuvo que Los modelos matemticos
que comnmente son utilizados en el fenmeno del flujo vehicular, han llevado
a que este punto sea requisito importante cuando hablamos de la teora del
control matemtico. Existen varios tipos de modelos que han ayudado a
construir este trabajo, y se separan en tres ramas, modelos Macroscpicos,
Modelos mesoscpicos y modelos microscpicos.
11 Modelos Macroscpicos
12 Modelos Mesoscpico
13 Modelos Microscpicos
13
Roger P. Roess, Elena S. Prassas, William R. McShane, TRAFFIC ENGINEERING. Pearson
Prentice Hall
14
http://es.wikipedia.org/wiki/Tr%C3%A1nsito_vehicular
31
atmicas que interactan unas con otras (en este caso cada vehculo
individual). Son modelos por lo general discretos..
32
Fase de construccin: arquitectura y elaboracin de los diferentes
modelos que actan en la aplicacin.
33
16 ACTORES DEL SISTEMA
Listado de actores
34
17 MATRIZ DE REQUERIMIENTOS
35
17.1 LISTA DE REQUERIMIENTOS
36
o Por medio de la cantidad de vehculos introducidos en el sistema,
se debe identificar el espaciamiento promedio entre cada uno de
ellos.
37
17.2 FORMATO DE MATRIZ DE REQUERIMIENTOS
Proceso.
El sistema debe permitir al usuario la creacin, modificacin eliminacin y almacenamiento de datos.
Datos
Cdigo, Nombre, Apellido, Login, password y tipo de usuario.
38
ID Descripcin Requerimiento ID Req. Prioridad Fecha Casos de Uso relacionados
Req. Padre (DD-MMM-
YYYY)
3 Configuraciones en el 1-Media 08-10-2012 Casos de Uso
Sistema
Proceso.
El sistema por medio de la simulacin debe permitir crear, modificar, eliminar y almacenar los datos pertinentes.
Datos
Id, simulacin, Tipo de vehculos, Usuarios.
Proceso.
El sistema debe permitir crear, modificar, eliminar y almacenar los datos de usuarios.
39
ID Descripcin Requerimiento ID Req. Prioridad Fecha Casos de Uso relacionados
Req. Padre (DD-MMM-
YYYY)
5 Asignar Puntos de 1-Alta 08-10-2012 Casos de Uso
partida de un vehculo.
Proceso.
.
El sistema debe permitir la asignacin de una serie de puntos de partida destinados con el tem Edificio donde saldrn
los vehculos que van a interactuar en la simulacin.
El sistema debe permitir la asignacin de una serie de puntos de llegada destinados con el tem Edificio donde saldrn
los vehculos que van a interactuar en la simulacin.
40
ID Descripcin Requerimiento ID Req. Prioridad Fecha Casos de Uso relacionados
Req. Padre (DD-MMM-
YYYY)
7 Identificacin de tipo de 1-Alta 08-10-2012 Casos de Uso
vehculo.
Proceso.
El sistema debe permitir al usuario asignar un tipo de vehculo que ser transitado en la simulacin, con el fin de observar
las diferentes escenas que se presentan en el flujo vehicular.
Proceso.
El sistema debe generar en la simulacin un nmero de vehculos que se desplazaran por las diferentes calles con unos
parmetros establecidos asignados por un usuario, este proceso se har al azar.
41
ID Descripcin Requerimiento ID Req. Prioridad Fecha Casos de Uso relacionados
Req. Padre (DD-MMM-
YYYY)
9 Establecer nivel de 1-Alta 08-10-2012 Casos de Uso
detalle de la simulacin.
Proceso.
De acuerdo a la simulacin este proceso se encarga de establecer segn el nivel de detalle la forma con la cual ser
vista la aplicacin por medio de unas configuraciones en el sistema.
42
ID Descripcin Requerimiento ID Req. Prioridad Fecha Casos de Uso relacionados
Req. Padre (DD-MMM-
YYYY)
11 Evaluar tiempo de 1-Alta 08-10-2012 Casos de Uso
semaforizacin.
Proceso.
El sistema debe generar en la simulacin el tiempo de cambio de semforo, de acuerdo al trfico vehicular que se
presente en el momento, por medio de la configuracin del sistema el usuario puede modificar los tiempos de cambio.
43
ID Descripcin Requerimiento ID Req. Prioridad Fecha Casos de Uso relacionados
Req. Padre (DD-MMM-
YYYY)
13 Generar nivel de trfico 1-Alta 08-10-2012 Casos de Uso
Proceso.
El sistema debe generar de acuerdo a las especificaciones dadas por el usuario el nivel de trfico que hay en la ciudad
teniendo en cuenta las horas pico y el trfico normal.
44
18 CASOS DE USO DEL SISTEMA
45
46
18.2 MODELO ENTIDAD RELACIN
47
19 Persistencia de datos
48
19.1 PRINCIPALES GENERALIDADES DE LA SIMULACIN
Vehculo
ruta
semforo
calle
Edificio
49
El objeto ruta, ser un grafo dirigido y actuar como parmetro en la
asignacin de la ruta que deber seguir un determinado vehculo. Cada cruce
de calle ser un vrtice del grafo y cada calle comprender dos aristas dirigidas
en sentido contrario, para modelar una doble va. Las calles con una sola va,
constarn solamente de una arista dirigida en el grafo. La ruta en s ser
generada aleatoriamente mediante cualquiera de los algoritmos conocidos para
el recorrido de grafos. Un objeto ruta tendr como atributo un tiempo Total
Promedio que guardar el tiempo total promedio de recorrido para una ruta en
particular.
El objeto calle ser uno de los componentes que formarn la ruta por donde se
desplazar el objeto vehculo. Tendr como atributos un cruce inicial, un cruce
final y un largo, parmetro que ayudar en el clculo del tiempo Total Promedio
de una ruta. Uno de sus atributos ser tambin el nmero de accidentes
ocurridos en su trayectoria, as como el nmero de vehculos que por ella
pasan. Una calle ser una arista dirigida dentro del grafo que modela el mapa
de calles.
50
cualquier lugar que se le indique. Estos parmetros de partida y llegada sern
introducidos por el usuario.
Ejecutar simulacin.
Detener simulacin.
51
Pausar simulacin.
Generar ruta.
Permitir colisiones.
52
Velocidad promedio de los vehculos en una calle determinada o por
ruta.
Nmero de vehculos promedio que pasan por una determinada calle.
Nmero de vehculos promedio en el circuito para un lapso determinado.
53
Obstruir un carril.
Crear mapas.
Eliminar mapas.
Crear cruces.
Modificar cruces.
Eliminar cruces.
Crear calle.
Modificar calle.
Eliminar calle.
54
Crear semforo.
Crear edificio.
Modificar edificio.
Eliminar edificio.
Bloquear calle.
55
COMPORTAMIENTO EN LA SIMULACIN
56
Detener carro en algn punto del camino.
57
22 LISTADO DE CASOS DE USO
1 Crear Mapas.
4 Eliminar mapa.
7 Crear Cruces.
10 Eliminar Cruces.
13 Crear Calle.
16 Eliminar Calle.
19 Crear Semforo.
22 Eliminar Semforo.
58
23 Consultar todos los Semforo.
25 Crear Edificio.
28 Eliminar Edificio.
31 Crear Simulacin.
34 Eliminar Simulacin.
59
46 Eliminar Parmetros de Configuracin Vial.
60
68 Consultar Configuracin Edificio por Cdigo.
61
23 ANLISIS DEL CDIGO MOTOR DE FLUJO
Actores.
Dialogos.
Digrafos Grafos Dirigidos.
Guis.
Panel Digrafo.
Pojos.
Utilidades.
o Cola.
o Lista.
o Nodo.
Mapping.
package Actors;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.util.ArrayList;
import Utilitary.DibujaFiguras;
62
private double z0; //posicin y inicial
private double vz0; //velocidad y inicial;
private double x;// posicin x;
private double x0; //posicion x inicial;
private double vx0; //velocidad x inicial ;
private double velocidadInicial;
private double tiempo;
private boolean puedoMoverme = true; //indica si el vehiculo puede moverse
private double aceleracion=0;
public ArrayList<Point> ListaPuntos=new ArrayList<Point>();
public int indice=0;
private double[] vectorDirector;
private boolean simular=false; //indica si se corre la simulacion
private boolean trazarRuta=false; //indica si se habilita el trazado de una ruta
private Point punto1, punto2;
public Vehiculo(){
ListaPuntos.get(i+1).x,ListaPuntos.get(i+1).y);
}
if(ListaPuntos!=null){
g.fillOval(((int) x)-4, ((int) z)-4, 8, 8);}
}
//g.setColor(Color.DARK_GRAY);
//g.fillRect(0, 0, 1000, 1000);
//g.setColor(Color.RED);
//g.fillOval(ListaPuntos.get(indice).x,ListaPuntos.get(indice).y, 15, 15);
//g.setColor(Color.BLUE);
//g.fillOval(ListaPuntos.get(indice+1).x,ListaPuntos.get(indice+1).y, 15, 15);
63
g.setColor(Color.ORANGE);
g.drawLine(punto1.x,punto1.y,punto2.x,punto2.y);
punto1=punto2;// el punto1 es ahora el punto2 final que se ha trazado
punto2=null; //punto2 se habilita para asignarle unas nuevas
coordenadas
}
//g.drawLine(0, 300, 400, 300);
int direccionX=ListaPuntos.get(indice+1).x-ListaPuntos.get(indice).x;
//JOptionPane.showMessageDialog(null, "Vx = "+direccionX);
int direccionY=ListaPuntos.get(indice+1).y-ListaPuntos.get(indice).y;
//JOptionPane.showMessageDialog(null, "Vy = "+direccionY);
double norma=Math.sqrt(Math.pow(direccionX,2)+Math.pow(direccionY,
2));
//JOptionPane.showMessageDialog(null, "norma = "+norma);
double[] vectorDir = new double[2];
vectorDir[0]=direccionX/norma;
vectorDir[1]=direccionY/norma;
return vectorDir;
64
vz0 = velocidadInicial * vectorDirector[1];
//JOptionPane.showMessageDialog(null,"Vy> = "+vectorDirector[1]+"Vz0
= "+vz0);
vx0 = velocidadInicial * vectorDirector[0];
//JOptionPane.showMessageDialog(null," Vx> = "+vectorDirector[0]+"Vxo
= "+vx0);
if(ListaPuntos.get(indice).y<ListaPuntos.get(indice+1).y){
while (z < ListaPuntos.get(indice+1).y) {
try {
update();
Thread.sleep(60);
//JOptionPane.showMessageDialog(null, "Posicion Y
= "+z);
//JOptionPane.showMessageDialog(null, "Posicion X
= "+x);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
//Reinicia las varibles y activa el movimiento
puedoMoverme = true;
65
indice++;
//JOptionPane.showMessageDialog(null,"nuevo indice = "+indice);
if((indice+1)<ListaPuntos.size()+1){
iniciarVariables();
z=ListaPuntos.get(indice).y;
moverse();
}
}
else{
// la linea esta inclinada hacia arriba. En este caso el valor Y del
punto inicial
// es mayor que el valor Y del punto final
//JOptionPane.showMessageDialog(null, "Posicion Y
= "+z);
//JOptionPane.showMessageDialog(null, "Posicion X
= "+x);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
//Reinicia las varibles y activa el movimiento
puedoMoverme = true;
indice++;
if((indice+1)<ListaPuntos.size()+1){
iniciarVariables();
z=ListaPuntos.get(indice).y;
moverse();
}
}
}
66
// actualiza las posiciones X y Y de la particula para cada intervalo de tiempo,
para
// cada repaint()
//JOptionPane.showMessageDialog(null,"HOLA");
velocidadInicial = 60;
//JOptionPane.showMessageDialog(null, "Velocidad = "+velocidadInicial);
//angulo = Integer.valueOf(textFieldAngulo.getText());
iniciarVariables();
//VehiculoDAO vehiculoDAO = new VehiculoDAO();
//vehiculoDAO.guardaVehiculo(this);
moverse();
@Override
public void transladar(int tx, int ty) {
// TODO Auto-generated method stub
}
}
67
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import Actors.HibernateUtil;
import POJOS.Callelogica;
try
{
iniciaOperacion();
id = (String) sesion.save(calle);
sesion.getTransaction().commit();
//tx.commit();
} catch (HibernateException he)
{
manejaExcepcion(he);
throw he;
} finally
{
sesion.close();
}
return id;
}
68
sesion.getTransaction().commit();
//tx.commit();
} catch (HibernateException he)
{
manejaExcepcion(he);
throw he;
} finally
{
sesion.close();
}
}
69
return calle;
}
try
{
iniciaOperacion();
listaCalles = sesion.createQuery("from CalleLogica").list();
} finally
{
sesion.close();
}
return listaCalles;
}
70
Clase De Diagrafo
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.io.Serializable;
import java.util.Vector;
import javax.swing.JOptionPane;
import Actors.Cruce;
import Actors.Semaforos;
import Utilitary.CirculoDibujable;
import Utilitary.DibujaFiguras;
/**
*
* @author ADMIN
*/
public class Digrafo implements Serializable, DibujaFiguras
{
/**
*
*/
private static final long serialVersionUID = 1L;
public Vector vertices;
public Vector cruces;
public Vector semaforos;
public ListaArcos[] ListAdyaciencia;
public boolean ponderado;
71
{
vertices=new Vector(numMaxVertice);
cruces=new Vector(numMaxVertice);
semaforos=new Vector();
ListAdyaciencia=new ListaArcos[300];// arcos como maximo
ponderado=false;
}
72
{
vert=(CirculoDibujable)vertices.get (nVert);
vert.setCentro (centro);
vertices.set (nVert,vert);
}
return true;
}
73
{
vert=(CirculoDibujable)vertices.get (i);
if(vert.puntoEstaEnRegion (punto)==true)
{
pos=i;
}
i++;
}
return pos;
}
74
for(int i=0;i<vertices.size();i++)
{
ListAdyaciencia[i].eliminarArcoConHijo (i,nVert);// eliminamos los vert de
la lista
}
for(int i=nVert;i<vertices.size()-1;i++)
{
ListAdyaciencia[i]=ListAdyaciencia[i+1];// eliminamos la lista de hijos
}
ListAdyaciencia[vertices.size()-1]=null;//
for(int i=0;i<vertices.size()-1;i++)
{
ListAdyaciencia[i].actualizarIndices(nVert);//reduce en una unidad cada
//indice mayor al eliminado
}
/* eliminar el vertice*/
vertices.remove (nVert); // eliminar el vertice
return true;
}
/**
* Operaciones con Arcos
* */
75
return null;
else
return new Arco(ListAdyaciencia[padre].getDato(pos));
}
public String arcosACadena()
{
String cad="{ ";
for(int i=0;i<vertices.size();i++)
{
if(ListAdyaciencia[i].esVacia()==false)
{
cad+=ListAdyaciencia[i].toString();
cad+=" \n";
}
}
cad+=" }";
return cad;
}
76
private boolean puntoEstaArco(Arco ar, Point punto)
{
double m=0.0;
boolean hecho=false;
Point v1=null,v2=null;
CirculoDibujable vert=null;
vert=(CirculoDibujable)(vertices.get (ar.getPadre ()));
v1=vert.getCentro ();
vert=(CirculoDibujable)(vertices.get (ar.getHijo()));
v2=vert.getCentro ();//obtengo los puntos
int pos=-1,i=0;
double b=0,y0=0,x0=0;
boolean ladox=false,ladoy=false;
if((v2.x-v1.x)==0)
m=punto.y-v2.y;
else m=(double)((v2.y-v1.y)/((v2.x-v1.x)*1.0));// calculo la pendiente
b=(double)(v2.y-m*v2.x);
if((punto.x>v1.x && punto.x<v2.x)||(punto.x>v2.x && punto.x<v1.x))
{
y0=m*punto.x+b;
if(Math.abs(y0-punto.y)<5)
ladox=true;
}
if((punto.y>v1.y && punto.y<v2.y)||(punto.y>v2.y && punto.y<v1.y))
{
x0=(punto.y-b)/(m*1.0);
if(Math.abs(x0-punto.x)<5)
ladoy=true;
}
if(ladox || ladoy) hecho=true;
return hecho;
}
ponderado=true;
}
77
public int getPeso(int padre,int hijo)
{
return ListAdyaciencia[padre].getPesoArco(padre,hijo);
}
punto1=((CirculoDibujable)vertices.get(ar.getPadre())).getCentro();
punto2=((CirculoDibujable)vertices.get(ar.getHijo())).getCentro();
radio=((CirculoDibujable)vertices.get(ar.getHijo())).getRadio();
ty=-(punto1.y-punto2.y)*1.0;//la coordenadas de la ventana es al revez
tx=(punto1.x-punto2.x)*1.0;
ang=Math.atan (ty/tx);
if(tx<0)
78
{// si tx es negativo aumentar 180 grados
ang+=Math.PI;
}
Graphics2D g2D=(Graphics2D)g;
// g2D.setStroke (new BasicStroke(1.2f));// grosor de la linea
g.setColor (colorArc);
g.drawLine (punto1.x,punto1.y,punto.x,punto.y);
g.drawLine (p1.x,p1.y,punto.x,punto.y);
g.drawLine (p2.x,p2.y,punto.x,punto.y);
// g2D.setStroke (new BasicStroke(1.0f));// grosor de la linea
if(ponderado==true)
{
g2D.setPaint (new Color(0,0,0,250));
g2D.drawString (String.valueOf (ar.getPeso
()),(punto1.x+punto2.x)/2.0f,(punto1.y+punto2.y)/2.0f);
}
}
79
for(int i=0;i<vertices.size();i++)
{// recorro todos los padres
if(ListAdyaciencia[i]!=null)
{
for(int j=0;j<ListAdyaciencia[i].getNumElem();j++)
dibujarArcos(g);
for(int i=0;i<vertices.size ();i++)
{
vert=(CirculoDibujable)(vertices.get(i));
cad=String.valueOf (i);
vert.setNombre (cad);
//vert.setColor(colorVert);
vert.dibujar (g);
// vert.rotular (g,i);
}
for(int i=0;i<cruces.size();i++)
{
cruce=(CirculoDibujable)(cruces.get(i));
cruce.setColor(Color.BLUE);
cruce.dibujar(g);
}
for(int i=0;i<semaforos.size();i++)
{
sema=(CirculoDibujable)(semaforos.get(i));
80
sema.setColor(Color.BLUE);
sema.dibujar(g);
}
/**
* Operacionescon digrafo
**/
public String getProfundidad(Digrafo recProf)
{
Vector solEnIndices=new Vector();
recProf.vertices=this.copiarVertices ();
recProf.ListAdyaciencia=
RecorridoDigrafo.getRecorrido
(this,RecorridoDigrafo.REC_PROFUNDIDAD,solEnIndices);
recProf.ponderado=this.ponderado;
String cad="Recorrido:"+solEnIndices.toString();
return cad;
}
81
if(nOrigen<0|| nOrigen>=vertices.size())
{
JOptionPane.showMessageDialog(null,"Vertice no pertenece","Error",0);
return null;
}
dijkstra.vertices=this.copiarVertices ();
dijkstra.ListAdyaciencia=RecMinimo.getDijkstra(this,nOrigen);
dijkstra.ponderado=this.ponderado;
cad="Desde el vertice "+nOrigen+" hasta todos los demas";
return cad;
}
if(nDestino<0|| nDestino>=vertices.size())
{
JOptionPane.showMessageDialog(null,"Vertice no pertenece","Error",0);
return null;
}
minimo.vertices=this.copiarVertices ();
minimo.ListAdyaciencia=RecMinimo.getCaminoCorto(this,nOrigen,nDestino);
minimo.ponderado=this.ponderado;
if(minimo.ListAdyaciencia==null)
cad="No se encontro un camino";
82
else cad="ESTE es el camino mas corto desde "+nOrigen+" hasta
"+nDestino+this.desplegarAdyacencia(minimo);
return cad;
}
}
return cad;
}
if(this.ponderado==false)
{
83
JOptionPane.showMessageDialog(null,"El Grafo no es
ponderado","Error",0);
return null;
}
else
{
grafo.vertices=this.copiarVertices ();
grafo.ListAdyaciencia=RecMinimo.getCaminoCorto(this,nOrigen,nDestino);
grafo.ponderado=this.ponderado;
}
String cad="";
Vector<Integer> verticesRuta=new Vector<Integer>();
//grafo.vertices=this.copiarVertices();
for(int i=0;i<grafo.vertices.size();i++)
{
for (int j=0;j<grafo.ListAdyaciencia[i].getNumElem();j++)
{
Arco arc=grafo.ListAdyaciencia[i].getDato(j);
verticesRuta.add(arc.getPadre());
cad+=""+arc.getPadre()+"-";
}
if(verticesRuta.isEmpty()){
return null;
}else{
//verticesRuta.add((CirculoDibujable)vertices.get(nDestino));
//JOptionPane.showMessageDialog(null, "La ruta de vertices mas
corta es = "+cad);
}
}
return verticesRuta;
}
if(sem==null){//JOptionPane.showMessageDialog(null,"es null en
el metodo");
84
}
return semaforos.add(sem);
// TODO Auto-generated method stub
85
public String cruceOrigen, cruceDestino,codigoCalle,
calleNombre,calleObser;
public int NodoInicio,NotoFin,CalleCapacidad, Longitud;
/**
* Launch the application.
*/
/*public static void main(String[] args) {
try {
DialogUpdateCalle dialog = new DialogUpdateCalle();
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}*/
/**
* Create the dialog.
*/
public DialogUpdateCalle(JFrame parent, String title, boolean modal) {
super(parent, title, modal);
setBounds(100, 100, 450, 350);
getContentPane().setLayout(new BorderLayout());
contentPanel.setBorder(new TitledBorder(new TitledBorder(new
LineBorder(new Color(184, 207, 229)), "Informacin de Cruce",
TitledBorder.LEFT, TitledBorder.TOP, null, new Color(0, 0, 255)), "Informacion
de Cruce", TitledBorder.LEFT, TitledBorder.TOP, null, Color.BLACK));
getContentPane().add(contentPanel, BorderLayout.CENTER);
contentPanel.setLayout(new GridLayout(1, 2, 0, 0));
{
JPanel panel = new JPanel();
panel.setBorder(UIManager.getBorder("DesktopIcon.border"));
contentPanel.add(panel);
GridBagLayout gbl_panel = new GridBagLayout();
gbl_panel.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0};
86
gbl_panel.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0};
gbl_panel.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0,
1.0, 1.0, Double.MIN_VALUE};
gbl_panel.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
panel.setLayout(gbl_panel);
{
JLabel LongCalle = new JLabel("Longitud :");
GridBagConstraints gbc_LongCalle = new
GridBagConstraints();
gbc_LongCalle.anchor = GridBagConstraints.EAST;
gbc_LongCalle.insets = new Insets(0, 0, 5, 5);
gbc_LongCalle.gridx = 3;
gbc_LongCalle.gridy = 2;
panel.add(LongCalle, gbc_LongCalle);
}
{
LongitudCalle = new JTextField();
GridBagConstraints gbc_LongitudCalle = new
GridBagConstraints();
gbc_LongitudCalle.insets = new Insets(0, 0, 5, 5);
gbc_LongitudCalle.fill =
GridBagConstraints.HORIZONTAL;
gbc_LongitudCalle.gridx = 4;
gbc_LongitudCalle.gridy = 2;
panel.add(LongitudCalle, gbc_LongitudCalle);
LongitudCalle.setColumns(10);
}
{
JLabel lblCodigoDeMapa = new JLabel("Cruce
Origen :");
lblCodigoDeMapa.setHorizontalAlignment(SwingConstants.RIGHT);
GridBagConstraints gbc_lblCodigoDeMapa = new
GridBagConstraints();
gbc_lblCodigoDeMapa.insets = new Insets(0, 0, 5,
5);
gbc_lblCodigoDeMapa.gridx = 3;
gbc_lblCodigoDeMapa.gridy = 3;
panel.add(lblCodigoDeMapa,
gbc_lblCodigoDeMapa);
}
{
CruceOrigen = new JTextField();
87
GridBagConstraints gbc_CruceOrigen = new
GridBagConstraints();
gbc_CruceOrigen.insets = new Insets(0, 0, 5, 5);
gbc_CruceOrigen.fill =
GridBagConstraints.HORIZONTAL;
gbc_CruceOrigen.gridx = 4;
gbc_CruceOrigen.gridy = 3;
panel.add(CruceOrigen, gbc_CruceOrigen);
CruceOrigen.setColumns(10);
}
{
JLabel lblCodigoCruce = new JLabel("Cruce Destino
:");
GridBagConstraints gbc_lblCodigoCruce = new
GridBagConstraints();
gbc_lblCodigoCruce.anchor =
GridBagConstraints.EAST;
gbc_lblCodigoCruce.insets = new Insets(0, 0, 5, 5);
gbc_lblCodigoCruce.gridx = 3;
gbc_lblCodigoCruce.gridy = 4;
panel.add(lblCodigoCruce, gbc_lblCodigoCruce);
}
{
CruceDestino = new JTextField();
GridBagConstraints gbc_CruceDestino = new
GridBagConstraints();
gbc_CruceDestino.insets = new Insets(0, 0, 5, 5);
gbc_CruceDestino.fill =
GridBagConstraints.HORIZONTAL;
gbc_CruceDestino.gridx = 4;
gbc_CruceDestino.gridy = 4;
panel.add(CruceDestino, gbc_CruceDestino);
CruceDestino.setColumns(10);
}
{
JLabel lblNombre = new JLabel("Codigo Calle :");
GridBagConstraints gbc_lblNombre = new
GridBagConstraints();
gbc_lblNombre.anchor = GridBagConstraints.EAST;
gbc_lblNombre.insets = new Insets(0, 0, 5, 5);
gbc_lblNombre.gridx = 3;
gbc_lblNombre.gridy = 5;
panel.add(lblNombre, gbc_lblNombre);
}
{
88
CodigoCalle = new JTextField();
GridBagConstraints gbc_CodigoCalle = new
GridBagConstraints();
gbc_CodigoCalle.insets = new Insets(0, 0, 5, 5);
gbc_CodigoCalle.fill =
GridBagConstraints.HORIZONTAL;
gbc_CodigoCalle.gridx = 4;
gbc_CodigoCalle.gridy = 5;
panel.add(CodigoCalle, gbc_CodigoCalle);
CodigoCalle.setColumns(10);
}
{
JLabel lblCapacidadMaxima = new JLabel("Nombre
:");
GridBagConstraints gbc_lblCapacidadMaxima = new
GridBagConstraints();
gbc_lblCapacidadMaxima.anchor =
GridBagConstraints.EAST;
gbc_lblCapacidadMaxima.insets = new Insets(0, 0,
5, 5);
gbc_lblCapacidadMaxima.gridx = 3;
gbc_lblCapacidadMaxima.gridy = 6;
panel.add(lblCapacidadMaxima,
gbc_lblCapacidadMaxima);
}
{
Nombre = new JTextField();
GridBagConstraints gbc_Nombre = new
GridBagConstraints();
gbc_Nombre.anchor = GridBagConstraints.NORTH;
gbc_Nombre.insets = new Insets(0, 0, 5, 5);
gbc_Nombre.fill =
GridBagConstraints.HORIZONTAL;
gbc_Nombre.gridx = 4;
gbc_Nombre.gridy = 6;
panel.add(Nombre, gbc_Nombre);
Nombre.setColumns(10);
}
{
JLabel lblNoDeCarriles = new JLabel("Capacidad :");
GridBagConstraints gbc_lblNoDeCarriles = new
GridBagConstraints();
gbc_lblNoDeCarriles.anchor =
GridBagConstraints.EAST;
gbc_lblNoDeCarriles.insets = new Insets(0, 0, 5, 5);
89
gbc_lblNoDeCarriles.gridx = 3;
gbc_lblNoDeCarriles.gridy = 7;
panel.add(lblNoDeCarriles, gbc_lblNoDeCarriles);
}
{
Capacidad = new JTextField();
GridBagConstraints gbc_Capacidad = new
GridBagConstraints();
gbc_Capacidad.insets = new Insets(0, 0, 5, 5);
gbc_Capacidad.fill =
GridBagConstraints.HORIZONTAL;
gbc_Capacidad.gridx = 4;
gbc_Capacidad.gridy = 7;
panel.add(Capacidad, gbc_Capacidad);
Capacidad.setColumns(10);
}
{
JLabel lblObservaciones = new
JLabel("Observaciones :");
GridBagConstraints gbc_lblObservaciones = new
GridBagConstraints();
gbc_lblObservaciones.anchor =
GridBagConstraints.EAST;
gbc_lblObservaciones.insets = new Insets(0, 0, 5, 5);
gbc_lblObservaciones.gridx = 3;
gbc_lblObservaciones.gridy = 8;
panel.add(lblObservaciones, gbc_lblObservaciones);
}
{
Observaciones = new JTextField();
GridBagConstraints gbc_Observaciones = new
GridBagConstraints();
gbc_Observaciones.insets = new Insets(0, 0, 5, 5);
gbc_Observaciones.fill =
GridBagConstraints.HORIZONTAL;
gbc_Observaciones.gridx = 4;
gbc_Observaciones.gridy = 8;
panel.add(Observaciones, gbc_Observaciones);
Observaciones.setColumns(10);
}
{
JLabel lblNodoInicial = new JLabel("Nodo Inicial :");
GridBagConstraints gbc_lblNodoInicial = new
GridBagConstraints();
90
gbc_lblNodoInicial.anchor =
GridBagConstraints.EAST;
gbc_lblNodoInicial.insets = new Insets(0, 0, 5, 5);
gbc_lblNodoInicial.gridx = 3;
gbc_lblNodoInicial.gridy = 9;
panel.add(lblNodoInicial, gbc_lblNodoInicial);
}
{
NodoInicial = new JTextField();
GridBagConstraints gbc_NodoInicial = new
GridBagConstraints();
gbc_NodoInicial.insets = new Insets(0, 0, 5, 5);
gbc_NodoInicial.fill =
GridBagConstraints.HORIZONTAL;
gbc_NodoInicial.gridx = 4;
gbc_NodoInicial.gridy = 9;
panel.add(NodoInicial, gbc_NodoInicial);
NodoInicial.setColumns(10);
}
{
JLabel lblNodoFinal = new JLabel("Nodo Final :");
GridBagConstraints gbc_lblNodoFinal = new
GridBagConstraints();
gbc_lblNodoFinal.anchor =
GridBagConstraints.EAST;
gbc_lblNodoFinal.insets = new Insets(0, 0, 5, 5);
gbc_lblNodoFinal.gridx = 3;
gbc_lblNodoFinal.gridy = 10;
panel.add(lblNodoFinal, gbc_lblNodoFinal);
}
{
NodoFinal = new JTextField();
GridBagConstraints gbc_NodoFinal = new
GridBagConstraints();
gbc_NodoFinal.insets = new Insets(0, 0, 5, 5);
gbc_NodoFinal.fill =
GridBagConstraints.HORIZONTAL;
gbc_NodoFinal.gridx = 4;
gbc_NodoFinal.gridy = 10;
panel.add(NodoFinal, gbc_NodoFinal);
NodoFinal.setColumns(10);
}
}
{
JPanel buttonPane = new JPanel();
91
buttonPane.setLayout(new
FlowLayout(FlowLayout.RIGHT));
getContentPane().add(buttonPane, BorderLayout.SOUTH);
{
okButton = new JButton("OK");
//okButton.setAction(action);
//okButton.setActionCommand("OK");
//okButton.addActionListener(this);
buttonPane.add(okButton);
//getRootPane().setDefaultButton(okButton);
}
{
cancelButton = new JButton("Cancel");
//cancelButton.setActionCommand("Cancel");
//cancelButton.addActionListener(this);
buttonPane.add(cancelButton);
}
}
}
}
}
92
private VentPrincipal ventana;
splashScreen.setVisible(false);
splashScreen=null;
hilo=null;
}
splashScreen.setLocation(screenRect.width/4+30, screenRect.height/4);
splashScreen.setLayout(new BorderLayout());
splashScreen.add(splashLabel,BorderLayout.CENTER);
splashScreen.add(progreso,BorderLayout.SOUTH);
splashScreen.pack();
}
93
public void progreso()
{
progreso.setValue(++pos);
if(pos==101)
{
tiempo.stop();
}
}
Pojos: son las clases de persistencia que contienen los getter y los
setter, capaces de capturar la asignacin de los atributos principales.
Permitiendo una comunicacin con la base de datos. Las clases
manejadas son; Callelogica, callesemaforo,configuracin vial entre otras.
94
Clase mapa
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
/**
* Mapa generated by hbm2java
*/
@Entity
@Table(name = "mapa", catalog = "tesis10")
public class Mapa implements java.io.Serializable {
public Mapa() {
}
@Id
95
@Column(name = "mapa_Codigo", unique = true, nullable = false,
length = 20)
public String getMapaCodigo() {
return this.mapaCodigo;
}
@Column(name = "mapa_Largo")
public Integer getMapaLargo() {
return this.mapaLargo;
}
@Column(name = "mapa_Ancho")
public Integer getMapaAncho() {
return this.mapaAncho;
}
96
@OneToMany(fetch = FetchType.LAZY, mappedBy = "mapa")
public Set getCrucelogicas() {
return this.crucelogicas;
}
Clase Cola
97
Hibernate reveng
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate
Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-
reverse-engineering-3.0.dtd" >
<hibernate-reverse-engineering>
<table-filter match-catalog="tesis10" match-name="callelogica"/>
<table-filter match-catalog="tesis10" match-name="callesemaforo"/>
<table-filter match-catalog="tesis10" match-name="configuaracionvial"/>
<table-filter match-catalog="tesis10" match-name="configuracionedificio"/>
<table-filter match-catalog="tesis10" match-name="configuracionsemaforial"/>
<table-filter match-catalog="tesis10" match-name="crucelogica"/>
<table-filter match-catalog="tesis10" match-name="edificio"/>
<table-filter match-catalog="tesis10" match-name="mapa"/>
<table-filter match-catalog="tesis10" match-name="parametrocedificio"/>
<table-filter match-catalog="tesis10" match-name="parametrocsemaforial"/>
<table-filter match-catalog="tesis10" match-name="parametrocvial"/>
<table-filter match-catalog="tesis10" match-name="semaforo"/>
<table-filter match-catalog="tesis10" match-name="simulacion"/>
<table-filter match-catalog="tesis10" match-name="tipvehiculo"/>
<table-filter match-catalog="tesis10" match-name="vehiculocalle"/>
<table name="CruceLogica" catalog="TESIS10">
<column name="cruce_Codigo"/>
<column name="mapa_Codigo"/>
<column name="cruce_Name"/>
<column name="cruce_Capacidad"/>
<column name="cruce_NumCarriles"/>
<column name="cruce_Estado"/>
</table>
</hibernate-reverse-engineering>
import java.awt.Point;
98
public class PositionHelper {
/**
* Calcula la distancia que se debe recorrer en el eje Y para estar a la
izquierda del punto sx,sy en
* Relacin a la lnea que forma con dx,dy a una distancia distance
* @param sx
* @param sy
* @param dx
* @param dy
* @param distance
* @return
*/
public static int getSourceDistanceLeftYPoint (int sx, int sy, int dx, int dy,
double distance) {
int x=dx-sx;
System.out.println ("x:"+x);
int y=dy-sy;
System.out.println("y:"+y);
double h=Math.sqrt(x*x+y*y);
System.out.println ("h:"+h);
int y2=(int) Math.round(distance*(x/h));
y2*=-1;
return y2;
}
x1 5
y1 7
x2 2
y2 3
distancias 3,162
d = (x1 x2) + (y1 y2)
d = (5 2) + (7 3)
d=5
x= distancias*(5-2/d)
x= (3,162*(3/5))
99
x= 2
t=y*(-1)
t=2*(-1)
t= -2
z=y2+t
z=3+ (-2)
z=1
100
public static int getSourceDistanceLeftXPoint(int sx,int sy,int dx,int dy,double
distance){
int x=dx-sx;
System.out.println("x:"+x);
int y=dy-sy;
System.out.println("y:"+y);
double h=Math.sqrt(x*x+y*y);
System.out.println("h:"+h);
int x2=(int) Math.round(distance*(y/h));
System.out.println("x2:"+x2);
return x2;
}
x1 5
y1 7
x2 2
y2 3
distancias 3,162
y= distancias*(7-3/d)
y= (3,162*(4/5))
y= 3
101
Este es el tringulo que debe formar
z= getSourceLeftXPoint t *(-1)
102
z=t*(-1)
z=-2*(-1)
z=2
z= getSourceLeftXPoint y *(-1)
z=y*(-1)
z=-3
103
int x2=getSourceDistanceRightXPoint(sx, sy, dx, dy, distance);
return sx+x2;
}
S= getSourceDistanceRightXPoint z +x2
S= -3 +2
S= -1
x1 5
y1 7
x2 2
y2 3
distancias 3,162
104
Este es el tringulo que debe formar
105
return p;
}
C= py-pendiente*px
C= 6-4*3
C= -6
/**
* Calcula la coordenada x del punto donde es cortada la lnea formada
* Por los puntos s (sx, sy) y d (dx, dy) por la lnea perpendicular
* Que pasa por el punto p (px, py)
* @param sx
* @param sy
* @param dx
* @param dy
* @param px
* @param py
* @return
*/
public static double getX(int sx,int sy,int dx,int dy, int px,int py){
double p=getPendiente(sx, sy, dx, dy);
double pp=-1/p;
double b=getConstant(sx, sy, p);
double bp=getConstant(px, py, pp);
double nx=(bp-b)/(p-pp);
return nx;
}
/**
* Calcula la coordenada x del punto donde es cortada la lnea formada
* Por los puntos s (sx, sy) y d (dx, dy) por la lnea perpendicular
* Que pasa por el punto p (px, py)
* @param sx
* @param sy
* @param dx
* @param dy
106
* @param px
* @param py
* @return
*/
public static double getY(int sx,int sy,int dx,int dy, int px,int py){
double p=getPendiente(sx, sy, dx, dy);
double pp=-1/p;
double b=getConstant(sx, sy, p);
double bp=getConstant(px, py, pp);
double nx=(bp-b)/(p-pp);
double ny=nx*p+b;
return ny;
}
}
if(pp==Double.POSITIVE_INFINITY){
return new Point((int)reference.getX(),(int)source.getY());
}
double b=getConstant((int)source.getX(), (int)source.getY(), p);
double bp=getConstant((int)reference.getX(),(int)reference.getY(),
pp);
double nx=(bp-b)/(p-pp);
double ny=nx*p+b;
Point point=new Point();
point.setLocation(nx, ny);
return point;
}
public static double getY(int sx,int sy,int dx,int dy, int distance){
double p=getPendiente(sx, sy, dx, dy);
double ang=Math.atan(p);
double dely=Math.abs(distance*Math.sin(ang));
double ny;
if(sy>dy){
ny=sy-dely;
107
}else{
ny=sy+dely;
}
return ny;
}
public static double getX(int sx,int sy,int dx,int dy, int distance){
double p=getPendiente(sx, sy, dx, dy);
double b=getConstant(sx, sy, p);
double ang=Math.atan(p);
double dely=Math.abs(distance*Math.sin(ang));
double ny;
if(sy>dy){
ny=sy-dely;
}else{
ny=sy+dely;
}
double nx=(ny-b)/p;
return nx;
}
/**
* Retorna el punto sobre la recta partiendo de source dirigindose a target
* y avanzando distance
* @param sx
* @param sy
* @param dx
* @param dy
* @param distance
* @return
*/
public static Point getNextPoint(Point source,Point target, int distance){
double p=getPendiente(source, target);
if (p==Double.POSITIVE_INFINITY){
return new Point(source.x,source.y+distance);
}
if (p==Double.NEGATIVE_INFINITY){
return new Point(source.x,source.y-distance);
}
if (source.y==target.y){
if (source.x<target.x){
return new Point(source.x+distance,source.y);
}else{
return new Point(source.x-distance,source.y);
}
}
108
double ang=Math.atan(p);
double b=getConstant(source, p);
double dely=Math.abs(distance*Math.sin(ang));
double ny;
if(source.getY()>target.getY()){
ny=source.getY()-dely;
}else{
ny=source.getY()+dely;
}
double nx=(ny-b)/p;
Point ret=new Point();
ret.setLocation(nx, ny);
return ret;
}
public static void main(String[] args) {
/*System.out.println(getSourceLeftYPoint(5, 5, 11, 7, 3.162));
System.out.println(getSourceLeftYPoint(5, 5, 11, 3, 3.162));
System.out.println(getSourceLeftXPoint(20, 20, 24, 17, 10));
System.out.println(getSourceLeftYPoint(20, 20, 24, 17, 10));
System.out.println(getSourceLeftXPoint(20, 20, 16, 17, 10));
System.out.println(getSourceLeftYPoint(20, 20, 16, 17, 10));
System.out.println(getSourceLeftXPoint(20, 20, 24, 23, 10));
System.out.println(getSourceLeftYPoint(20, 20, 24, 23, 10));
System.out.println(getSourceLeftXPoint(20, 20, 16, 23, 10));
System.out.println(getSourceLeftYPoint(20, 20, 16, 23, 10));
*/
double x=getX(12, 9, 4, 17, 5,10);
double y=getY(12, 9, 4, 17, 5,10);
System.out.println(x);
System.out.println(y);
109
24 RESULTADOS DE LA SIMULACIN
110
Ilustracin 8 "Escenario Completo Aplicativo"
111
A continuacin se muestra en ejecucin la simulacin final con todos los
parmetros asignados
112
25 TRABAJO DE CAMPO
113
un semforo cambia su estado a verde hay ocasiones en que los
semforos restantes aun no cambian a rojo, no se tiene un control
exacto por el ancho de la calle. Provocando dificultades de movilidad.
114
CRUCE CALLE 5 CON CARRERA 56
115
Observaciones
116
Tamao de la calle.
Calzada principal de la autopista sur oriental, este sector es conocido por ser
una zona muy comercial y al mismo tiempo transitado de manera intensiva,
esto ocasiona gran congestin vehicular provocada en muchas ocasiones por
el corto tiempo de cambios de estado en la semaforizacin.
Este sitio crtico de la ciudad presenta un problema comn que se vive a diario
en algunas calles, y es el ancho del cruce principal, ocasionando accidentes
por el paso de vehculos lentos al pasar el semforo.
117
AUTOPISTA SUR ORIENTAL CON CALLE66 ESTADOS DE SEMAFOROS
TIEMPOS
De Rojo a Verde
A) 1 59 seg
B) 1 35 seg
C) 2 44 seg
D) 1 19 seg
De Verde a Rojo
A) 24 seg
B) 42 seg
C) 27 seg
D) 1 28 seg
118
Segn el estudio realizado a los estados de semaforizacin, en ste sector de
la ciudad se puede observar que los tiempos no son continuos, teniendo en
cuenta que son manipulados en diferentes horas crticas por parte del
organismo de transito. Aunque este proceso es intervenido por el factor
humano, se puede apreciar que los tiempos en estado verde, son demasiado
cortos para el flujo de entrada vehicular que all se presenta, ocasionando con
esto embotellamiento y largas colas, provocando trfico en la va.
119
Ilustracin 17 "Estados De Semaforizacin Carrera 66 con Calle 9"
TIEMPOS
De Rojo a Verde
A) 46 seg
B) 1 18 seg
De Verde a Rojo
A) 1 11 seg
B) 35 seg
120
26 RECOLECCIN DE INFORMACIN
27 FLUJO DE ENTRADA
121
operacin de forma manual, almacenando los datos en una tabla para
llevar un mejor control y anlisis de la simulacin.
28 TRABAJOS FUTUROS
122
1) Mapas o diagramas de sitios estratgicos de la ciudad para ayudar a
solucionar los problemas comunes, obteniendo informacin de
manera visual detallada.
123
29 TECNOLOGAS APLICADAS DEL PROYECTO
15
http://es.wikipedia.org/wiki/Java_EE
16
http://www.osmosislatina.com/java/ejb.htm
124
(Enterprise Java Bean) Container" parte de un java application
server.
La JPA fue originada a partir del trabajo del JSR 220 Expert
Group. Ha sido incluida en el estndar EJB3..
17
http://es.wikipedia.org/wiki/Java_Persistence_API
18
http://www.clickmatica.com/?page_id=348
19
http://tuforo.org/icefaces-y-icemobile-ee-listos-para-websphere-app-server-websphere-portal-y-
rational/
125
ICEfaces es ms que un componente de la librera JSF Ajax, es
un framework J2EE Ajax para desarrollar y el desplegar
aplicaciones empresariales ricas (AER). Con ICEfaces, los
desarrolladores empresariales Java pueden desarrollar fcilmente
aplicaciones empresariales ricas en Java, no JavaScript..
20
http://www.orasite.com/administracion-de-oracle/conceptos-basicos-oracle-10g-introduccion
126
MySQL21: ..El sistema de base de datos operacional MySQL es
hoy en da uno de los ms importantes en lo que hace al diseo y
programacin de base de datos de tipo relacional. Cuenta con
millones de aplicaciones y aparece en el mundo informtico como
una de las ms utilizadas por usuarios del medio. El programa
MySQL se usa como servidor a travs del cual pueden conectarse
mltiples usuarios y utilizarlo al mismo tiempo..
21
http://www.definicionabc.com/tecnologia/mysql.php
127
GLOSARIO DE TRMINOS
Trmino Descripcin
128
Semforo22 Un semforo es una estructura diseada para
sincronizar dos o ms threads o procesos, de
modo que su ejecucin se realice de forma
ordenada y sin conflictos entre ellos..
22
http://www.rastersoft.com/OS2/CURSO/SEMAFORO.HTM
129
CONCLUSIONES
130
BIBLIOGRAFIA
131