Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
 public double GetValue(double time)
 {
     return(amplitude * Scalars.PSine(frequency * time + phase));
 }