View Javadoc
1   package org.opentrafficsim.road.gtu.lane;
2   
3   import org.djunits.value.vdouble.scalar.Acceleration;
4   import org.djunits.value.vdouble.scalar.Mass;
5   
6   /**
7    * Interface for vehicle models.
8    * <p>
9    * Copyright (c) 2013-2019 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
10   * BSD-style license. See <a href="http://opentrafficsim.org/node/13">OpenTrafficSim License</a>.
11   * <p>
12   * @version $Revision$, $LastChangedDate$, by $Author$, initial version 22 mei 2018 <br>
13   * @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a>
14   * @author <a href="http://www.tudelft.nl/pknoppers">Peter Knoppers</a>
15   * @author <a href="http://www.transport.citg.tudelft.nl">Wouter Schakel</a>
16   */
17  public interface VehicleModel
18  {
19  
20      /** No bounds. */
21      VehicleModel NONE = new VehicleModel()
22      {
23          @Override
24          public Acceleration boundAcceleration(final Acceleration acceleration, final LaneBasedGTU gtu)
25          {
26              return acceleration;
27          }
28  
29          /** {@inheritDoc} */
30          @Override
31          public String toString()
32          {
33              return "VehicleModel [None]";
34          }
35      };
36  
37      /** Acceleration bounded by GTU min and max acceleration. */
38      VehicleModel MINMAX = new VehicleModel()
39      {
40          @Override
41          public Acceleration boundAcceleration(final Acceleration acceleration, final LaneBasedGTU gtu)
42          {
43              return acceleration.si > gtu.getMaximumDeceleration().si
44                      ? (acceleration.si < gtu.getMaximumAcceleration().si ? acceleration : gtu.getMaximumAcceleration())
45                      : gtu.getMaximumDeceleration();
46          }
47  
48          /** {@inheritDoc} */
49          @Override
50          public String toString()
51          {
52              return "VehicleModel [MinMax]";
53          }
54      };
55  
56      /**
57       * Returns a bounded acceleration.
58       * @param acceleration Acceleration; intended acceleration
59       * @param gtu LaneBasedGTU; gtu
60       * @return Acceleration; possible acceleration
61       */
62      Acceleration boundAcceleration(Acceleration acceleration, LaneBasedGTU gtu);
63  
64      /**
65       * GTU mass.
66       * @return GTU mass
67       */
68      default Mass getMass()
69      {
70          return null;
71      }
72  
73      /**
74       * Moment of inertia about z-axis and center point of gravity.
75       * @return moment of inertia about z-axis
76       */
77      default double getMomentOfInertiaAboutZ()
78      {
79          return 0;
80      }
81  
82      /**
83       * Defines (fixed) mass and moment of inertia about z-axis.
84       * <p>
85       * Copyright (c) 2013-2018 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved.
86       * <br>
87       * BSD-style license. See <a href="http://opentrafficsim.org/node/13">OpenTrafficSim License</a>.
88       * <p>
89       * @version $Revision$, $LastChangedDate$, by $Author$, initial version 8 jan. 2019 <br>
90       * @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a>
91       * @author <a href="http://www.tudelft.nl/pknoppers">Peter Knoppers</a>
92       * @author <a href="http://www.transport.citg.tudelft.nl">Wouter Schakel</a>
93       */
94      class MassBased implements VehicleModel
95      {
96          /** Mass. */
97          private final Mass mass;
98  
99          /** Moment of inertia about z-axis. */
100         private final double momentOfInertiaAboutZ;
101 
102         /**
103          * @param mass Mass; mass
104          * @param momentOfInertiaAboutZ double; moment of inertia about z-axis
105          */
106         public MassBased(final Mass mass, final double momentOfInertiaAboutZ)
107         {
108             this.mass = mass;
109             this.momentOfInertiaAboutZ = momentOfInertiaAboutZ;
110         }
111 
112         /** {@inheritDoc} */
113         @Override
114         public Acceleration boundAcceleration(final Acceleration acceleration, final LaneBasedGTU gtu)
115         {
116             return MINMAX.boundAcceleration(acceleration, gtu);
117         }
118 
119         /** {@inheritDoc} */
120         @Override
121         public Mass getMass()
122         {
123             return this.mass;
124         }
125 
126         /** {@inheritDoc} */
127         @Override
128         public double getMomentOfInertiaAboutZ()
129         {
130             return this.momentOfInertiaAboutZ;
131         }
132     }
133 
134 }