public static Wave operator +(Wave wave1, Wave wave2) { if (wave1.frequency != wave2.frequency) { throw new ArgumentException("The frequencies of 'wave1' and 'wave2' don't match."); } double basePhase = wave1.phase; double phaseDifference = wave2.phase - wave1.phase; double frequency = Items.Equal(wave1.frequency, wave2.frequency); double amplitude = Scalars.SquareRoot ( wave1.amplitude.Square() + 2 * wave1.amplitude * wave2.amplitude * Scalars.PSine(phaseDifference + 0.25) + wave2.amplitude.Square() ); double phase = basePhase + Scalars.ArcTangent ( wave2.amplitude * Scalars.PSine(phaseDifference), wave1.amplitude + wave2.amplitude * Scalars.PSine(phaseDifference + 0.25) ) / (2 * Math.PI); return(new Wave(frequency, amplitude, phase)); }
public double GetValue(double time) { return(amplitude * Scalars.PSine(frequency * time + phase)); }