/************************************************************************************
* Copyright (C) 2008 by Politehnica University of Bucharest and Rutgers University
* All rights reserved.
* Refer to LICENSE for terms and conditions of use.
***********************************************************************************/
package vnsim.vehicular.simulator.intersections;
import java.util.ArrayList;
//import vnsim.core.CarInfo;
import vnsim.map.object.*;
import vnsim.vehicular.simulator.*;
public abstract class Intersection implements java.io.Serializable {
/** serialVersionUID
*/
private static final long serialVersionUID = -5883719321862303634L;
public ArrayList segments; //ordered by priority (first 2 have priority)
public abstract void addCrossingSegment(DirectedRoadSegment drs);
//seg1=segment on which a vehicle is
//seg2=segment on which a vehicle intends to go
public abstract boolean mustStop(RouteSegment seg1, RouteSegment seg2);
public abstract boolean havePriority(RouteSegment seg1, RouteSegment seg2);
public abstract double getMaximumSpeed(RouteSegment seg1, RouteSegment seg2);
public abstract double getInfluenceDistance(RouteSegment seg1, RouteSegment seg2);
public abstract double getInfluenceDistanceLaneChange(RouteSegment seg1, RouteSegment seg2);
public abstract ArrayList yieldFor(RouteSegment seg1,
RouteSegment seg2);
public abstract boolean hasTrafficLights();
protected boolean isOrder(int i, int j, int k) {
//i,j,k = indices in "segments"
//return true if segments i,j,k are in this order, in a sorting by the angle,
//counter-clock-wise
if (i>=segments.size()||j>=segments.size()||k>=segments.size()){
return false;
}
double angle1=segments.get(i).angle;
double angle2=segments.get(j).angle;
double angle3=segments.get(k).angle;
if(angle1angle2 || angle3angle2 && angle3 getDesiredLanes(RouteSegment src, RouteSegment dst) {
//should return a sorted vector!
int i=-1, j=-1;
ArrayList ret=new ArrayList ();
for(i=0;i3) {
//at least 4 segments
//is there another road between src and dst (counter-clockwise) ?
boolean isThere1=false;
for(int k=0;k