Hey,
ich versuche momentan Transversalwellen grafisch darzustellen. Das scheint bei größeren Wellenlängen kein Problem zu sein, jedoch verhält sich die Welle bei Wellenlängen < ca 4 extrem merkwürdig. Die Amplitude wird nicht wirklich eingehalten, generell ist das Wellenbild verzerrt. Das Problem ist schwer zu beschreiben, aber extrem einfach zu sehen, deshalb werd ich einfach mal das Projekt anhängen, dann kann es jeder selbst sehen. Einfach debuggen und beim der Trackbar für die Wellenlänge den Regler verschieben. Zusätzlich hänge ich noch die Klassenbibliothek an, mit der ich eigentlich programmiere. Die Forms-Anwendung ist nur ein Testprogramm.
An die, die sich die Projektmappe nicht runterladen können/wollen stelle ich die wichtigsten Infos hier zusammen:
Zusätzlich hänge ich noch ein Bild an, wie es aussehen sollte, und wie es teilweise aussieht. Bild 1 ist das "normale" Bild.
Edit: Rote und blaue Welle sind identisch, die gelb/grüne ist die Interferenz der beiden Wellen.
ich versuche momentan Transversalwellen grafisch darzustellen. Das scheint bei größeren Wellenlängen kein Problem zu sein, jedoch verhält sich die Welle bei Wellenlängen < ca 4 extrem merkwürdig. Die Amplitude wird nicht wirklich eingehalten, generell ist das Wellenbild verzerrt. Das Problem ist schwer zu beschreiben, aber extrem einfach zu sehen, deshalb werd ich einfach mal das Projekt anhängen, dann kann es jeder selbst sehen. Einfach debuggen und beim der Trackbar für die Wellenlänge den Regler verschieben. Zusätzlich hänge ich noch die Klassenbibliothek an, mit der ich eigentlich programmiere. Die Forms-Anwendung ist nur ein Testprogramm.
An die, die sich die Projektmappe nicht runterladen können/wollen stelle ich die wichtigsten Infos hier zusammen:
C#-Quellcode
- //Welle updaten (Position der Oszillatoren:
- public void Update()
- {
- if(Direction == WaveDirection.LeftToRight)
- {
- for (var i = 0; i < Oscillators.Count; i++)
- Oscillators[i] = new PointF(Oscillators[i].X, (float)(Amplitude * Math.Sin((double)(2 * Math.PI * ((Watch.ElapsedMilliseconds * 0.001f / Period) - (Oscillators[i].X / WaveLength))))));
- }
- else
- {
- for (var i = 0; i < Oscillators.Count; i++)
- Oscillators[i] = new PointF(Oscillators[i].X, (float)(Amplitude * Math.Sin((double)(2 * Math.PI * ((Watch.ElapsedMilliseconds * 0.001f / Period) + (Oscillators[i].X / WaveLength))))));
- }
- }
C#-Quellcode
- //Welle zeichnen (Surface = Bitmap auf die gezeichnet wird, Offsets sind die Verschiebungen in X/Y-Richtung)
- public void DrawOscillators(SizeF oscillatorsize, Brush brush)
- {
- float distancefactor = (Surface.Width - OffsetX) / Oscillators.Count;
- for (var i = 0; i < Oscillators.Count; i++)
- _device.FillEllipse(brush, new RectangleF(new PointF(OffsetX + Oscillators[i].X * distancefactor , OffsetY + Oscillators[i].Y), oscillatorsize));
- public void DrawCurve(Pen pen)
- {
- float distancefactor = (Surface.Width - OffsetX) / Oscillators.Count;
- PointF[] temp = Oscillators.ToArray();
- for (var i = 0; i < Oscillators.Count; i++)
- temp[i] = new PointF(OffsetX + temp[i].X * distancefactor /** 12.5f*/, OffsetY + temp[i].Y * distancefactor);
- _device.DrawCurve(pen, temp);
- }
- }
Zusätzlich hänge ich noch ein Bild an, wie es aussehen sollte, und wie es teilweise aussieht. Bild 1 ist das "normale" Bild.
Edit: Rote und blaue Welle sind identisch, die gelb/grüne ist die Interferenz der beiden Wellen.