Машина (Car)

Класс Car является базовым классом для всех машин в Библиотеке Дорожного движения. Он реализует движение, торможение, ускорение, перестроение на другую полосу и обнаружение столкновений. Машина в библиотеке является пассивной заявкой. Обычно машины создаются объектом CarSource, после чего они следуют по маршруту, задаваемому объектом CarMoveTo, при этом их движением управляет водитель - объект, реализующий интерфейс Driver. При создании машины объектом CarSource используется заданный по умолчанию водитель класса StandardDriver. Вы можете задать и своего собственного водителя, а также управлять машиной с помощью функций класса Car и объекта RoadNetwork.

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

Функции

Color getColor() - Возвращает цвет заданной по умолчанию фигуры анимации машины.

void setColor( Color color ) - Задает новый цвет для заданной по умолчанию фигуры анимации машины.
     Параметр: color - новый цвет

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

void setLength( double length ) - Задает длину машины.
     Параметр: length - новая длина, в метрах

double getWidth() - Возвращает ширину машины, в метрах.

void setWidth( double width ) - Задает ширину машины.
     Параметр: width - новая ширина, в метрах

double getDefaultAcceleration() - Возвращает заданное по умолчанию ускорение машины, в м/с2. Оно применяется, когда Вы вызываете метод accelerateTo( newspeed ) без второго аргумента, и новое значение скорости больше текущего. Ускорение по умолчанию всегда > 0.

void setDefaultAcceleration(double acc) - Задает новое ускорение машины по умолчанию, в м/с2. Это ускорение применяется, когда Вы вызываете метод accelerateTo( newspeed ) без второго аргумента, и новое значение скорости больше текущего. Значение должно быть > 0.
     Параметр: acc - новое ускорение по умолчанию для машины, в м/с2 

double getDefaultDeceleration() - Возвращает значение торможения машины по умолчанию, в м/с2. Оно применяется, когда Вы вызываете метод accelerateTo( newspeed ) без второго аргумента, и новое значение скорости меньше текущего. Это значение всегда < 0. 

void setDefaultDeceleration( double dec ) - Задает значение торможения машины по умолчанию, в м/с2. Оно применяется, когда Вы вызываете метод accelerateTo( newspeed ) без второго аргумента, и новое значение скорости меньше текущего. Задаваемое значение должно быть < 0.
     Параметр: dec - новое значение торможения по умолчанию для машины, в м/с2 

Driver getDriver() - Возвращает управляющего машиной водителя, если такой есть, иначе - null.

RoadNetwork getRoadNetwork() - Возвращает дорожную сеть (активный объект типа RoadNetwork), в которой зарегистрирована машина, если такая есть, иначе - null.

Road getRoad( boolean front ) - Возвращает дорогу, на которой находится заданный торец машины, если такой нет - то возвращает null.
     Параметр: front - если true, то передний торец машины, если нет - то задний

Lane getLane( boolean front ) - Возвращает дорожную полосу, на которой находится заданный торец машины, если такой нет - то возвращает null.
     Параметр: front - если true, то передний торец машины, если нет - то задний

double getOffset( boolean front ) - Возвращает смещение от начала дороги/полосы (в метрах), на котором находится заданный торец машины. Если машина не находится в дорожной сети, то функция возвращает 0 для заднего торца и длину машины для переднего.
     Параметр: front - если true, то передний торец машины, если нет - то задний

double getSpeedLimit() -  Возвращает ограничение скорости (в м/с) для дороги, на которой находится передний торец машины, или 0, если машина не находится на дороге.

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

double getMaxDistance()-  Возвращает максимальное расстояние до находящейся спереди машины с учетом текущей скорости машины. Если текущее расстояние больше максимального, то водитель может подъехать ближе.

boolean isMoving() -  Проверяет, движется ли машина в текущий момент времени (т.е. ее скорость или ускорение не равны нулю). Возвращает true, если машина движется, и false - если нет.

double getSpeed() -  Возвращает текущую скорость машины, в м/с.

void setSpeed( double newspeed ) -  Мгновенно меняет скорость машины на заданную. Отменяет любое проводимое в текущий момент ускорение или торможение. Новое значение скорости должно быть >=0.
     Параметр: newspeed - новое значение скорости, в м/с.

void stop() -  Немедленно останавливает машину (задает ее скорость равной 0).

boolean isAccelerating() -  Проверяет, ускоряется ли или тормозит машина в текущий момент времени. Возвращает true, если машина ускоряется или тормозит, и false - если нет.

double getAcceleration() -  Возвращает текущее ускорение/торможение машины,  в м/с2. Возвращает 0, если машина движется с постоянной скоростью.

double getTargetSpeed() -  Возвращает скорость, которая будет у машины после завершения текущего ускорения/торможения. Если машина движется с постоянной скоростью, то функция вернет эту скорость.

void accelerateTo( double targetspeed ) -  Начинает ускорение/торможение до заданной скорости. При этом используется заданное по умолчанию значение ускорения/торможения. Значение новой скорости должно быть >= 0.
     Параметр: targetspeed - скорость после ускорения/торможения, в м/с

void accelerateTo( double targetspeed, double acc ) -  Начинает изменение текущей скорости до заданной с заданным ускорением/ торможением. Если новая скорость больше текущей, то значение параметра acc должно быть > 0, иначе < 0.
     Параметры: acc - ускорение/торможение, в м/с2
                        targetspeed - скорость после ускорения/торможения, в м/с

boolean isSwitching() -  Проверяет, производит ли машина перестроение на другую полосу. Возвращает true, если машина перестраивается на другую полосу, иначе - false

void switchLanes( boolean right ) -  Начинает перестроение на другую полосу. При этом используется заданная по умолчанию для дорожной сети длительность перестроения.
     Параметр: right - если true, то машина будет перестраиваться в полосу справа, иначе - в полосу слева.

void switchLanes( boolean right, double duration ) -  Начинает перестроение на другую полосу. Длительность перестроения задается параметром.
     Параметры: right - если true, то машина будет перестраиваться в полосу справа, иначе - в полосу слева.
                        duration - время перестроения, в секундах.

double switchRemainingTime() -  Возвращает время, оставшееся до завершения перестроения. Если в данный момент времени машина не перестраивается, то функция вернет 0.

void updateCarsInFront() -  Проверяет ситуацию на дороге перед машиной, передавая обновленную информацию водителю с помощью метода  updateCarsInFront().

double timeToCrash() -  Возвращает время (в секундах), оставшееся до столкновения этой машины с другой машиной, едущей впереди, если не будет предпринято никаких мер. Если вероятность столкновения отсутствует, функция вернет значение "бесконечность" (+infinity)

Car carToCrashInto() -  Возвращает машину, в которую врежется данная машинва, если не будет предпринято никаких мер (или null).

boolean needSwitch( boolean right ) -  Проверяет, должна ли машина перестроиться на другую полосу для того, чтобы продолжить движение по своему пути. Возвращает true, если да, и false - если нет. 
     Параметр: right - если true, то проверяет необходимость перестроения направо, иначе - необходимость перестроения налево

double distanceToSwitch() -  Возвращает расстояние, остающееся до точки, где машина должна перестроиться на другую полосу для того, чтобы продолжить движение по своему пути. Функция учитывает только ближайшее перестроение. Если с учетом последней информации о потенциальном перестроении машина находится на нужной полосе, то функция возвращает "бесконечность" (+infinity).

double getX( boolean front ) -  Возвращает Х-координату (в пикселях) заданного торца машины относительно группы фигур сети дорог. Если машина не находится в сети, то возвращает 0.
     Параметр: front - если true, то передний торец машины, если нет - то задний

double getY( boolean front ) -  Возвращает Y-координату (в пикселях) заданного торца машины относительно группы фигур сети дорог. Если машина не находится в сети, то возвращает 0.
     Параметр: front - если true, то передний торец машины, если нет - то задний

double getZ( boolean front ) -  Возвращает Z-координату (в пикселях) заданного торца машины относительно группы фигур сети дорог. Если машина не находится в сети, то возвращает 0.
     Параметр: front - если true, то передний торец машины, если нет - то задний

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

void highlight( boolean yes ) - Выделяет / снимает выделение с машины на анимации. Вокруг выделенной машины рисуется красный круг.
     Параметр: yes - если true, то выделить машину, иначе - снять выделение

boolean isHighlighted() - Проверяет, выделена ли машина на анимации в текущий момент. Возвращает true, если машина выделена, иначе - false