Autor Beitrag
sirrius2k
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 29.12.08 18:48 
Hallo Leute,

bin sozusagen absoluter Neuling im Programmiergeschäft... Nun soll ich an der FH in Info ein Programm schreiben, dass mir durch Fourieranalyse eine Rechteckspannung nähert...von der Funktion her ist das bis jetzt kein Problem ich krieg auch die Werte recht schön, nur muss ich das ganze jetzt zeichnen und dazu brauche ich ein Array (hoffe ich zumindest...)

Zu meiner eigentlichen Frage:

Gibt es eine Möglichkeit, ein Array zu skalieren? Ich möchte z.B. ein Array mit 100 Werten erstellen. Der erste Wert soll 0.01 sein und der letzte sagen wir 0.02. nur möchte ich jetzt nicht die 100 werte dazwischen von hand eingeben. Versteht ihr, was ich meine?

MfG, sirrius2k
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 29.12.08 18:57 
Hallo und :welcome: ;-)

Meinst du so etwas?
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
  double start = 0.01;
  double end = 0.02;
  double[] a = new double[100];
  for (int i = 0; i < a.Length; i++)
    a[i] = start + i * (end - start) / a.Length;
// EDIT:
stimmt, korrigiert ;-)


Zuletzt bearbeitet von jaenicke am Mo 29.12.08 19:13, insgesamt 1-mal bearbeitet
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 29.12.08 19:12 
@jaenicke: Fast, start musst du noch dazuaddieren.

_________________
>λ=
sirrius2k Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 29.12.08 19:34 
Titel: Dankeschön!
Jup, so in etwa hab ich das ganze jetzt auch gelöst.
Nur hab ich jetz noch ein Problem...

Wenn ich die einzelnen Punkte verbinden will, hab ich das Problem, dass mir die Anweisung p0.X = meinarray [1] den Fehler ausgibt, dass ich das ganze nicht in double angeben darf... nach int will ich aber nicht konvertieren, weil ich die Nachkommastellen schon dabeihaben möchte... gibt es noch ne andere Methode, das ganze zu Zeichnen oder hab ich da keine Chance?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 29.12.08 19:39 
Du musst den Wertebereich auf deine Zeichenfläche umrechnen. Beispiel: Deine Zeichenfläche ist 400 Pixel hoch, deine Werte liegen zwischen 0.1 und 0.2, dann sollen diese ja nicht alle auf einer Pixellinie gezeichnet werden, sondern 0.1 soll bei Pixel 1 liegen und 0.2 bei Pixel 400 (bzw. umgekehrt). ;-)

Du musst also ausrechnen wo der entsprechende Wert in der Zeichenfläche liegt.
sirrius2k Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 30.12.08 00:27 
Ok, danke schon mal dafür!

Könntest du das noch etwas genauer ausführen? Hab ca. 100 x- und 100 y-Werte die automatisch mit einer for-schleife erzeugt werden und die ich dann in 2 verschiedenen arrays abspeichere... das x-Array habe ich modifiziert (also die Werte mit 10000 multipliziert) und bekomme dann Werte von 0 bis 200.
Nach der Modifikation (Multiplikation mit 100) bekomme ich für das y-Array Werte von ca. -130 bis + 130.
Nun weiß ich nicht genau, wie ich die Sache skalieren soll, bzw. wie ich die Geschichte in Pixel umrechne (mit welchem Befehl, usw.

Danke nochmal für die Hilfestellungen bisher!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 30.12.08 00:59 
user profile iconsirrius2k hat folgendes geschrieben Zum zitierten Posting springen:
Nun weiß ich nicht genau, wie ich die Sache skalieren soll, bzw. wie ich die Geschichte in Pixel umrechne (mit welchem Befehl, usw.
Es gibt keinen Befehl dafür, das ist reine Mathematik. ;-)

Du hast zwei Bereiche.
Bei der Darstellung ist Pixel 1 in y-Richtung ist ganz oben, Pixel 300 ganz unten.
Bei den Werten ist oben bei Pixel 1 der Wert 130, bei Pixel 300 der Wert -130.

Jetzt willst du den Wert 30 darstellen. 30 ist vom unteren Rand prozentual gesehen entfernt:
(30 - -130) / (130 - -130) = 160 / 260 = 0.615 (61,5%)
61,5% von den 300 Pixeln sind
0.615 * 300 = 184,6

Gezeichnet werden muss also 185 Pixel von unten entfernt.

Die Formel insgesamt:
300 - (30 - -130) / (130 - -130) * 300
ImageHeight - (y-Wert - yMin) / (yMax - yMin) * ImageHeight

Ich hoffe ich habe mich jetzt nicht vertan, aber die Idee ist hoffentlich klar geworden.