/************************************************************************************ * 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;i