Sinus wird nicht korrekt berechnet?
Hallo ich ein Problem mit der Phasenverschiebung wenn diese bei GenerateSignal als 0 oder kleiner als 10 übergeben wird ist der Graph ein Gerade allerdings wenn die Phase als Wert wie zum Beispiel 200 übergeben wird ist der Graph wieder normal als ob die Phase die Amplitude beeinflusst ich kann aber nicht herausfinden woran es liegt? Mein Code dieser erbt zwar von einer Klasse allerdings ist das unwichtig sowie das Main-Window unwichtig ist weil es kommen wirklich richtige Werte (Habe auch schon ChatGPT dazu gezogen wie man am Code sehen kann.):using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Controls; using System.Windows.Navigation; using System.Windows.Shapes; using System.Windows; using System.Windows.Media; namespace Generator { public class Sinus : Signal { public Sinus(int sampleRate) : base(sampleRate) { } public double[] GenerateSignal(double amplitude, double frequency, double phase, int time) { int totalSamples = this.SampleRate * time; double[] points = new double[totalSamples]; // Phase als Verschiebung der x-Achse: Keine Umrechnung nötig, da Phase schon als verschobene Zeit in Bogenmaß funktioniert. for (int i = 0; i < totalSamples; ++i) { double t = (double)i / this.SampleRate; // Zeit in Sekunden points[i] = amplitude * Math.Sin(2 * Math.PI * frequency * t + phase); // Phase wirkt sich nur auf die Verschiebung aus } return points; } public override void Draw(Canvas canvas, double[] points) { // Erstelle die Polyline Polyline geometryFigure = new Polyline() { Name = "myPolyline", Stroke = Brushes.Black, // Linie sichtbar machen StrokeThickness = 1, // Linienstärke Fill = Brushes.Transparent }; // Berechne den Mittelpunkt des Canvas double canvasCenterY = canvas.ActualHeight / 2; // Berechne die Amplitude der Sinuskurve double amplitude = points.Max(); // Die maximale Amplitude der Sinusfunktion double minAmplitude = points.Min(); // Der minimalste Wert der Sinuskurve double amplitudeRange = amplitude - minAmplitude; // Gesamtbereich der Amplitude // Berechne den Offset, um den Mittelpunkt der Sinuskurve auf den Mittelpunkt des Canvas zu verschieben double offsetY = canvasCenterY; // Erstelle die PointCollection mit den verschobenen Punkten PointCollection pointCollection = new PointCollection(); for (int i = 0; i < points.Length; ++i) { // Verschiebe den Punkt so, dass der Mittelpunkt der Sinuskurve in die Mitte des Canvas verschoben wird double x = i -500; // Skalierung und Verschiebung double y = points[i] + canvas.ActualHeight / 1.98; // Punkte zur PointCollection hinzufügen pointCollection.Add(new Point(x, y)); } // Setze die Points für die Polyline geometryFigure.Points = pointCollection; // Füge die Polyline zum Canvas hinzu canvas.Children.Add(geometryFigure); } } }