View Javadoc
1   package org.opentrafficsim.draw.graphs;
2   
3   import org.djunits.value.vdouble.scalar.Acceleration;
4   import org.djunits.value.vdouble.scalar.Length;
5   import org.djunits.value.vdouble.scalar.Speed;
6   import org.opentrafficsim.base.parameters.ParameterException;
7   import org.opentrafficsim.base.parameters.ParameterSet;
8   import org.opentrafficsim.base.parameters.Parameters;
9   import org.opentrafficsim.core.gtu.GtuType;
10  import org.opentrafficsim.draw.graphs.FixedCarFollowing.FixedCarFollowingModel;
11  import org.opentrafficsim.road.gtu.lane.perception.PerceptionIterable;
12  import org.opentrafficsim.road.gtu.lane.perception.object.PerceivedObject;
13  import org.opentrafficsim.road.gtu.lane.tactical.following.CarFollowingModel;
14  import org.opentrafficsim.road.gtu.lane.tactical.following.CarFollowingModelFactory;
15  import org.opentrafficsim.road.network.speed.SpeedLimitInfo;
16  
17  /**
18   * Very simple car-following model factory only for testing. Copy from road for use in ContourPlotTest. Should probably test
19   * contour plot with much more mocking.
20   * <p>
21   * Copyright (c) 2024-2024 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
22   * BSD-style license. See <a href="https://opentrafficsim.org/docs/license.html">OpenTrafficSim License</a>.
23   * </p>
24   * @author <a href="https://github.com/wjschakel">Wouter Schakel</a>
25   */
26  public class FixedCarFollowing implements CarFollowingModelFactory<FixedCarFollowingModel>
27  {
28      /** Fixed acceleration. */
29      private final Acceleration acceleration;
30  
31      /** Fixed desired speed. */
32      private final Speed desiredSpeed;
33  
34      /** Fixed desired headway. */
35      private final Length desiredHeadway;
36  
37      /**
38       * Constructor.
39       */
40      public FixedCarFollowing()
41      {
42          this(Acceleration.ZERO, Speed.ONE, Length.ONE);
43      }
44  
45      /**
46       * Constructor.
47       * @param acceleration fixed acceleration
48       */
49      public FixedCarFollowing(final Acceleration acceleration)
50      {
51          this(acceleration, Speed.ONE, Length.ONE);
52      }
53  
54      /**
55       * Constructor.
56       * @param acceleration fixed acceleration
57       * @param desiredSpeed fixed desired speed
58       * @param desiredHeadway fixed desired headway
59       */
60      public FixedCarFollowing(final Acceleration acceleration, final Speed desiredSpeed, final Length desiredHeadway)
61      {
62          this.acceleration = acceleration;
63          this.desiredHeadway = desiredHeadway;
64          this.desiredSpeed = desiredSpeed;
65      }
66  
67      @Override
68      public Parameters getParameters(final GtuType gtuType) throws ParameterException
69      {
70          return new ParameterSet();
71      }
72  
73      @Override
74      public FixedCarFollowingModel get()
75      {
76          return new FixedCarFollowingModel();
77      }
78  
79      /**
80       * Fixed car-following model.
81       */
82      public class FixedCarFollowingModel implements CarFollowingModel
83      {
84  
85          /**
86           * Constructor.
87           */
88          public FixedCarFollowingModel()
89          {
90              //
91          }
92  
93          @Override
94          public Length desiredHeadway(final Parameters parameters, final Speed speed) throws ParameterException
95          {
96              return FixedCarFollowing.this.desiredHeadway;
97          }
98  
99          @Override
100         public Speed desiredSpeed(final Parameters parameters, final SpeedLimitInfo speedInfo) throws ParameterException
101         {
102             return FixedCarFollowing.this.desiredSpeed;
103         }
104 
105         @Override
106         public Acceleration followingAcceleration(final Parameters parameters, final Speed speed,
107                 final SpeedLimitInfo speedLimitInfo, final PerceptionIterable<? extends PerceivedObject> leaders)
108                 throws ParameterException
109         {
110             return FixedCarFollowing.this.acceleration;
111         }
112 
113         @Override
114         public String getName()
115         {
116             return "FixedAcceleration";
117         }
118 
119         @Override
120         public String getLongName()
121         {
122             return "FixedAcceleration";
123         }
124 
125     }
126 }