starting wave shape
Optional
opt_simList: SimListSimList to use (optional)
Private
avgnumber of samples for averaging stability
Private
block_moveable block, connected to left side of string
Private
deltatime step size
Private
deltaspatial grid size
Private
density_density of string per unit length
Private
lastlast time we printed delta(t)
Private
nowcurrent simulation time
Private
potentialpotential energy offset
Private
sequence_sequence number indicates when the data array has changed.
Private
stab_for averaging stability value
Private
startstarting position for the block
Private
timeindex into times_ array
Private
times_for checking on delta(t) = avg time between updates
Private
w1_data array
Private
w2_data array
Private
w3_data array
Private
wtells which array of w1, w2, w3 is most recent
Private
w_current data array
Adds the given Observer to this Subject's list of Observers, so that the Observer
will be notified of changes in this Subject. An Observer may call Subject.addObserver
during its observe
method.
the Observer to add
Adds the Parameter to the list of this Subject's available Parameters.
the Parameter to add
if a Parameter with the same name already exists.
Advances the simulation state by the time step given by getTimeStep.
Notifies all Observers that this Subject has changed by calling observe on each Observer.
An Observer may call addObserver or removeObserver during its observe
method.
a SubjectEvent with information relating to the change
Notifies all Observers that the Parameter with the given name has changed by calling observe on each Observer.
the language-independent or English name of the Parameter that has changed
if there is no Parameter with the given name
Called at the end of a mouse drag operation, performs whatever action is
appropriate. Only called if startDrag returned true
.
the SimObject being dragged, or null
if no SimObject was found
the location of the mouse in
simulation coordinates of the SimView where simObject
was found, or in the
focus view
if simObject
is null
.
distance from the initial object position to the mouse location at start of drag.
Protected
getReturns whether broadcasting is enabled for this Subject. See setBroadcast.
whether broadcasting is enabled for this Subject
Returns the current EnergyInfo for this system.
an EnergyInfo object representing the current energy of this system.
Returns the ParameterBoolean with the given name.
the language-independent or English name of the ParameterBoolean
the ParameterBoolean with the given name
if there is no ParameterBoolean with the given name
Returns the ParameterNumber with the given name.
the language-independent or English name of the ParameterNumber
the ParameterNumber with the given name
if there is no ParameterNumber with the given name
Returns the ParameterString with the given name.
the language-independent or English name of the ParameterString
the ParameterString with the given name
if there is no ParameterString with the given name
Sets the given MutableVector to the position of a point on the string
index of point on the string, from 0 to getNumPoints
the MutableVector which will be set to the position
Returns initial shape of string
initial shape of string
Called when a key is pressed or released, performs whatever action is appropriate for that event.
the KeyboardEvent that happened
true
means this is a key-down event; false
means a key-up event
the modifier keys down during event
Called at each movement during a mouse drag, performs whatever action is
appropriate. Only called if startDrag returned true
.
The SimObject being moved is passed in, along with the current mouse position, in
simulation coordinates, and an offset calculated at the start of the drag.
Setting the SimObject position to (x - offsetX, y - offsetY)
will move the SimObject
smoothly along with the mouse movement.
the SimObject being dragged, or null
if no SimObject was found
the location of the mouse in
simulation coordinates of the SimView where simObject
was found, or in the
focus view
if simObject
is null
.
distance from the initial object position (from DisplayObject.getPosition) to the mouse location at start of drag.
Removes the Observer from this Subject's list of Observers. An Observer may
call removeObserver
during its observe
method.
the Observer to detach from list of Observers
Removes the Parameter from the list of this Subject's available Parameters.
the Parameter to remove
Sets the Simulation back to its initial conditions, see saveInitialState, and calls modifyObjects. Broadcasts event named 'RESET'.
Saves the current variables and time as the initial state, so that this initial state can be restored with reset. Broadcasts event named 'INITIAL_STATE_SAVED'.
Protected
setSets whether this Subject will broadcast events, typically used to temporarily disable broadcasting. Intended to be used in situations where a subclass overrides a method that broadcasts an event. This allows the subclass to prevent the superclass broadcasting that event, so that the subclass can broadcast the event when the method is completed.
whether this Subject should broadcast events
the previous value
Set initial shape of string
initial shape of string
Called at the start of a mouse drag. The nearest dragable SimObject is passed in,
along with mouse position in simulation coordinates. If no dragable SimObject was
found, null
is passed for the first argument. If the EventHandler does not recognize
the SimObject then it should return false
.
the SimObject that is nearest to the mouse drag coordinates,
or null
if no SimObject was found
the location of the mouse in
simulation coordinates of the SimView where simObject
was found, or in the
focus view
if simObject
is null
.
distance from the initial object position (from DisplayObject.getPosition) to the mouse location at start of drag
location of 'drag point' on the
SimObject in body coordinates of the SimObject; this is where for example a spring
will be attached on the SimObject when dragging; or null
when no SimObject
was found
the modifier keys down during event
true
if the EventHandler will handle dragging the SimObject
Returns a minimal string representation of this object, usually giving just identity information like the class name and name of the object.
For an object whose main purpose is to represent another Printable object, it is
recommended to include the result of calling toStringShort
on that other object.
For example, calling toStringShort()
on a DisplayShape might return something like
this:
DisplayShape{polygon:Polygon{'chain3'}}
a minimal string representation of this object.
Generated using TypeDoc
Simulation of a string under tension which can have waves in 2D. This is an unusual simulation from others in myPhysicsLab in that it uses a partial differential equation (PDE) model.
Algorithm
Based on Algorithm 12.4, 'Wave Equation Finite-Difference' from Numerical Analysis, 6th Ed. by Burden & Faires.
Three Data Arrays
The three data arrays,
w1, w2, w3
represent the current, past, and next string state. Each entry in an array is the displacement of the string at that point.The role of representing the current, past, or next state rotates among the three arrays, changing with step forward in time.
Suppose that
w1
= past,w2
= current, andw3
= next. We can get space derivatives by looking at neighboring points withinw2
. We can get time derivatives by looking at the difference between a point inw1
andw2
. The PDE for the string then gives us the change based on those derivatives, and we can figure outw3
.Stability Condition
The stability condition is:
TO DO Provide a VarsList for graphing. We could provide variables corresponding to one or more discrete points on the string, giving the position (displacement), velocity, accel at that point.