All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opentrafficsim.road.gtu.lane.VehicleModel Maven / Gradle / Ivy

The newest version!
package org.opentrafficsim.road.gtu.lane;

import org.djunits.value.vdouble.scalar.Acceleration;
import org.djunits.value.vdouble.scalar.Mass;

/**
 * Interface for vehicle models.
 * 

* Copyright (c) 2013-2024 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved.
* BSD-style license. See OpenTrafficSim License. *

* @author Alexander Verbraeck * @author Peter Knoppers * @author Wouter Schakel */ public interface VehicleModel { /** No bounds. */ VehicleModel NONE = new VehicleModel() { @Override public Acceleration boundAcceleration(final Acceleration acceleration, final LaneBasedGtu gtu) { return acceleration; } /** {@inheritDoc} */ @Override public String toString() { return "VehicleModel [None]"; } }; /** Acceleration bounded by GTU min and max acceleration. */ VehicleModel MINMAX = new VehicleModel() { @Override public Acceleration boundAcceleration(final Acceleration acceleration, final LaneBasedGtu gtu) { return acceleration.si > gtu.getMaximumDeceleration().si ? (acceleration.si < gtu.getMaximumAcceleration().si ? acceleration : gtu.getMaximumAcceleration()) : gtu.getMaximumDeceleration(); } /** {@inheritDoc} */ @Override public String toString() { return "VehicleModel [MinMax]"; } }; /** * Returns a bounded acceleration. * @param acceleration Acceleration; intended acceleration * @param gtu LaneBasedGtu; gtu * @return Acceleration; possible acceleration */ Acceleration boundAcceleration(Acceleration acceleration, LaneBasedGtu gtu); /** * GTU mass. * @return GTU mass */ default Mass getMass() { return null; } /** * Moment of inertia about z-axis and center point of gravity. * @return moment of inertia about z-axis */ default double getMomentOfInertiaAboutZ() { return 0; } /** * Defines (fixed) mass and moment of inertia about z-axis. Acceleration is limited using {@code VehicleModel.MINMAX}. *

* Copyright (c) 2013-2024 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. *
* BSD-style license. See OpenTrafficSim License. *

* @author Alexander Verbraeck * @author Peter Knoppers * @author Wouter Schakel */ class MassBased implements VehicleModel { /** Mass. */ private final Mass mass; /** Moment of inertia about z-axis. */ private final double momentOfInertiaAboutZ; /** * @param mass Mass; mass * @param momentOfInertiaAboutZ double; moment of inertia about z-axis */ public MassBased(final Mass mass, final double momentOfInertiaAboutZ) { this.mass = mass; this.momentOfInertiaAboutZ = momentOfInertiaAboutZ; } /** {@inheritDoc} */ @Override public Acceleration boundAcceleration(final Acceleration acceleration, final LaneBasedGtu gtu) { return MINMAX.boundAcceleration(acceleration, gtu); } /** {@inheritDoc} */ @Override public Mass getMass() { return this.mass; } /** {@inheritDoc} */ @Override public double getMomentOfInertiaAboutZ() { return this.momentOfInertiaAboutZ; } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy