Полоса (Lane)

Класс Lane задает дорожную полосу. Каждой полосе известны предыдущая и следующая за ней полоса, а также полосы, от которых она ответвляется и которые она образует при слиянии с другими полосами. Полоса содержит информацию обо всех автомобилях, находящихся на ней, как полностью, так и частично. Автомобиль регистрируется на текущей полосе не только когда он находится на ней, но и тогда, когда он выполняет перестроение на эту полосу или когда движется по полосе, от которой ответвляется данная полоса, или по полосе, которую она образует при слиянии с другими полосами.

Класс Lane предлагает следующий программный интерфейс:

Функции

Road getRoad() - Возвращает дорогу, которой принадлежит текущая полоса.

int getIndex() -  Возвращает индекс полосы на дороге (0 - самая левая полоса)

Lane getParallelLane( boolean right ) -  Возвращает параллельную полосу справа или слева, при этом, если таковой нет, то возвращаемым значением будет null.
     Параметр: right - если true, то возвращается правая соседняя полоса, в противном случае - левая.

String getName() -  Возвращает имя полосы (имя дороги, за которым следует индекс полосы в квадратных скобках).

double getLength() -  Возвращает длину полосы в метрах.

Lane[] nextLanes() -  Возвращает массив полос, которые следуют за текущей полосой (их количество может быть равно 0, 1 и т.д.)

Lane[] previousLanes() -  Возвращает массив полос, которые предшествуют текущей полосе (их количество может быть 0, 1 и т.д.).

boolean isEmpty() - Проверяет, находятся ли на текущей полосе автомобили (по крайней мере, частично). Возвращает true, если таковых нет; false - в противном случае.

int nCars() -   Возвращает число автомобилей, которые, по крайней мере, частично, находятся на полосе. Следует заметить, что один автомобиль может находиться на нескольких полосах одновременно, в таком случае, например, сумма всех автомобилей на всех полосах дороги, посчитанная с помощью метода  nCars(), будет неточна: автомобили, перестраивающиеся в момент подсчета, будут посчитаны дважды.

Car getFirstCar() -  Возвращает первый автомобиль на полосе, если таковых нет, то возвращается null. Первым является автомобиль, находящийся ближе всех к началу полосы. При этом задний торец автомобиля может находиться на другой (предыдущей) полосе.

Car getLastCar() -  Возвращает последний автомобиль на полосе, если таковых нет, то возвращается null. Таковым является автомобиль, находящийся ближе всех к концу полосы. При этом передняя часть автомобиля может находиться на другой (следующей) полосе.

Car getCarInFrontOf( Car car ) - Возвращает автомобиль, находящийся перед автомобилем, который был передан в качестве параметра. Если такого нет, то возвращается null. В процессе поиска автомобиля, функция не проверяет автомобили за пределами текущей полосы.
     Параметр: car - заданный автомобиль.

Car getCarInFrontOf( double offset ) - Возвращает первый автомобиль на полосе, задний торец которого находится ближе к концу полосы. Поиск начинается не от начала полосы, а с точки смещения offset. Если таковых нет, то возвращается null.
     Параметр: offset - смещение от начала полосы

Car getCarBehind( Car car ) - Возвращает автомобиль на полосе, находящийся позади того, который был передан в качестве параметра. Если такового нет, то возвращается null. В процессе поиска автомобиля функция не выходит за границы текущей полосы.
     Параметр: car - автомобиль, от которого будет производиться поиск

Car getCarBehind( double offset ) - Возвращает первый автомобиль на полосе, передний торец которого находится ближе к началу полосы. Поиск начинается не от начала полосы, а с точки смещения offset. Если такого автомобиля нет, то возвращается null.
     Параметр: offset - смещение от начала полосы

Car getCarAt( double offset ) - Возвращает автомобиль, который пересекает линию, отстоящую от начала полосы на заданное смещение offset. Если такового нет, то возвращается null.
     Параметр: offset - смещение от начала полосы

boolean noCarsWithinInterval( double offsetstart, double offsetend ) -   Проверяет наличие автомобилей на заданном отрезке пути на данной полосе, а также на полосах, от которых она ответвляется и которые она образует при слиянии с другими полосами на заданном отрезке. Возвращает true, если таковых нет, в противном случае возвращает false.
     Параметры: offsetstart - смещение от начала полосы, задающее начало отрезка
            offsetend - смещение от начала полосы, задающее конец отрезка

ArrayList<Car> carsWithinInterval( double offsetstart, double offsetend, ArrayList<Car> carswithin ) - Проверяет присутствие автомобилей на заданном отрезке пути на текущей полосе, а также на полосах, от которых она ответвляется и которые она образует при слиянии с другими полосами на заданном отрезке. Найденные автомобили возвращаются в массиве carswithin, который может быть передан в качестве параметра. Если соответствующий параметр равен null, то массив создается автоматически. Массив carswithin очищается перед тем, как в него будет записываться результат. Одни и те же автомобили повторно в массив не добавляются.
     Параметры: offsetstart - смещение от начала полосы, задающее начало отрезка
            offsetend - смещение от начала полосы, задающее конец отрезка
            carswithin - массив ArrayList, предназначенный для хранения результатов, может быть равен null

ArrayList<Car> carsWithinIntervalOnThisLaneOnly( double offsetstart, double offsetend, ArrayList<Car> carswithin ) - Проверяет начличие автомобилей на заданном отрезке пути на текущей полосе. Найденные автомобили возвращаются в массиве carswithin, который может быть передан в качестве параметра. Если соответствующий параметр равен null, массив создается автоматически. Следует заметить, что массив carswithin очищается перед тем, как в него будет записываться результат.
     Параметры: offsetstart - смещение от начала полосы, задающее начало отрезка
            offsetend - смещение от начала полосы, задающее конец отрезка
            carswithin - массив ArrayList, предназначенный для хранения результатов, может быть равен null

double offsetToX( double offset ) -  Возвращает Х-координату (в пикселях) точки заданного смещения от начала полосы, относительно группы сети дорог.

double offsetToY( double offset ) -  Возвращает Y-координату (в пикселях) точки заданного смещения от начала полосы, относительно группы сети дорог.

double offsetToZ( double offset ) -  Возвращает Z-координату (в пикселях) точки заданного смещения от начала полосы, относительно группы сети дорог

double offsetToAngle( double offset ) - Возвращает угол поворота машины в плоскости (x,y) в точке смещения offset от начала полосы, в радианах