Class TriangleWavePositionIterator

  • All Implemented Interfaces:
    java.util.Iterator

    public class TriangleWavePositionIterator
    extends java.lang.Object
    implements java.util.Iterator
    Iterator that computes the positions required to draw a triangle wave along a line specified by control positions. The generated wave looks like this:
               /\             /\         <--- Amplitude
              /  \           /  \
     ________/    \_________/    \_____
     ^            ^
     | Wave length|
     
    • Constructor Summary

      Constructors 
      Constructor Description
      TriangleWavePositionIterator​(java.lang.Iterable<? extends Position> positions, double waveLength, double amplitude, Globe globe)
      Create a new iterator to compute the positions of a triangle wave.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected Position computeNext()
      Compute the next position along the line, and transition the state machine to the next state (if appropriate).
      boolean hasNext()
      Position next()
      void remove()
      Not supported.
      • Methods inherited from class java.lang.Object

        clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • Methods inherited from interface java.util.Iterator

        forEachRemaining
    • Field Detail

      • STATE_LINE

        protected static final int STATE_LINE
        Drawing connecting line between waves.
        See Also:
        Constant Field Values
      • STATE_WAVE_START

        protected static final int STATE_WAVE_START
        About to draw wave.
        See Also:
        Constant Field Values
      • STATE_TOOTH_PEAK

        protected static final int STATE_TOOTH_PEAK
        At peak of wave.
        See Also:
        Constant Field Values
      • state

        protected int state
        Current state of the state machine.
      • positions

        protected java.util.Iterator<? extends Position> positions
        Control positions.
      • globe

        protected Globe globe
        Globe used to compute geographic positions.
      • amplitude

        protected double amplitude
        Amplitude of the wave, in meters.
      • halfWaveLength

        protected Angle halfWaveLength
        Wavelength, as a geographic angle.
      • thisPosition

        protected Position thisPosition
        Current position.
      • nextControlPosition

        protected Position nextControlPosition
        Position of the next control point.
      • firstPosition

        protected Position firstPosition
        First position along the line.
      • waveEndPosition

        protected Position waveEndPosition
        End position for the current wave.
      • thisStep

        protected double thisStep
        Distance (in meters) to the next wave start or end.
    • Constructor Detail

      • TriangleWavePositionIterator

        public TriangleWavePositionIterator​(java.lang.Iterable<? extends Position> positions,
                                            double waveLength,
                                            double amplitude,
                                            Globe globe)
        Create a new iterator to compute the positions of a triangle wave.
        Parameters:
        positions - Control positions for the triangle wave line.
        waveLength - Distance (in meters) between waves.
        amplitude - Amplitude (in meters) of the wave. This is the distance from the base line to the tip of each triangular wave.
        globe - Globe used to compute geographic positions.
    • Method Detail

      • hasNext

        public boolean hasNext()
        Specified by:
        hasNext in interface java.util.Iterator
      • next

        public Position next()
        Specified by:
        next in interface java.util.Iterator
      • computeNext

        protected Position computeNext()
        Compute the next position along the line, and transition the state machine to the next state (if appropriate).

        If the current state is STATE_LINE, this method returns either the next control point (if it is less than waveLength meters from the current position, or a position waveLength meters along the control line. The state machine will transition to STATE_WAVE_START only if the returned position is a full wavelength from the current position.

        If the current state is STATE_WAVE_START, this method returns a position waveLength meters from the current position along the control line, and transitions to state STATE_WAVE_PEAK.

        Returns:
        next position along the line.
      • remove

        public void remove()
        Not supported.
        Specified by:
        remove in interface java.util.Iterator