User Tools

Site Tools


prpl:signalgenerator

<- PRPL reference <- Math

SignalGenerator

ArgumentsResultNotation
float float float bool int float [float float float bool int- float]

Description

Computes the value for a given signal waveform and pushes it to the stack.

A function to derive the y - coordinate for a given x - coordinate on a graph line following one of the indicated wave patterns. Useful to animate an object or to produce a pattern over time. For instance, could be used to oscillating the brightness of light source or beacon or to vary the strength of an emitter over time.

 Arguments and type in order:
   - Integer.the X coordinate in the waveform(Eg.time)
   - Float.Frequency of the waveform
   - Float.Phase Shift of the waveform
   - Bool.invert the waveform
   - Integer.Signal type(0 to 6 in types, below)
 Signal types:
   * 0 = NONE
   * 1 = SINE
   * 2 = SQUARE
   * 3 = TRIANGLE
   * 4 = SAW - TOOTH
   * 5 = RANDOM
   * 6 = CONSTANT

Visual of 4 periods of each waveform as if they were graphed

 === Notes ===
 == Phase Shift ==
 The phase difference, or phase shift as it is also called of a Sinusoidal Waveform, is the 
 angle Φ(Greek letter Phi), in degrees or radians that the waveform has shifted from a certain reference 
 point along the horizontal zero axis.In other words phase shift is the lateral difference between two or more 
 waveforms along a common axis and sinusoidal waveforms of the same frequency can have a phase difference.
 The phase difference, Φ of an alternating waveform can vary from between 0 to its maximum time period, 
 T of the waveform during one complete cycle and this can be anywhere along the horizontal axis between, 
 Φ = 0 to 2π(radians) or Φ = 0 to 360o depending upon the angular units used.

Examples

# starting at coords of the core
# generate a long sine wave of particles once
once
   false ->invert
   0 ->phaseShift 
   .02 ->frequency 
   50 ->length
   # frequency * length will be the number of periods of the waveform
   # amplitude and widthMulti need to be greater than 4 so particles don't spawn on top of each other
   12 ->amplitude # how tall the waveform will be, from 0 in pixels
   4 ->widthMulti # how wide the waveform will be, 1 being standard, 4 being fours times as wide
   1 ->signalType #sine
 
   do(<-length 0)
      SignalGenerator(I <-frequency <-phaseShift <-invert <-signalType) ->sigValue
      CurrentPixelCoords ->y ->x
      <-x I <-widthMulti mul add ->px
      <-y <-sigValue <-amplitude mul add ->py
      <-px <-py 0 0 1 1 CreateParticle
   loop
endonce
prpl/signalgenerator.txt · Last modified: 2020/04/26 16:40 by bluebolt