Lissajous-Figuren
-
Hallo
In Physik haben wir den Auftrag bekommen, Lissajous-Figuren mit irgend einem Programm etc. darzustellen. Ich hab mich für php entschieden und bin praktisch fertig.
Dazu habe ich noch eine HTML-Seite gemacht mit Eingabeformular und so:
http://sandmaster.sa.ohost.de/lissa/main.html
Ansonsten kann man auch den direkten Link zum generierten Bild nehmen. Z.B:
http://sandmaster.sa.ohost.de/lissa/test1.php?freqx=3&freqy=2&lx=1&ly=1&genauig=20000&phasy=135
Jetzt müsste nach der Aufgabe her:
http://sandmaster.sa.ohost.de/lissa/lissajous_versch.figuren.pdf
Die Figur mit dem Frequenzverhältnis w2/w1 und der Phasenverschiebung von y 3*pi/4
Jedoch steht sie jetzt auf dem kopf...
Die Formeln die ich angewendet habe:
Zeitfüllen:$array[$x][0] = $array[$x-1][0]+360/$genauigkeit
dh Array[x][0] ist die Zeitachse
X-Achse:$array[$x][1] =$ampx*sin($freqx*M_PI/180*$array[$x][0]+$phasx*M_PI/180);
Y-Achse:
$array[$x][2] = $ampy*sin($freqy*M_PI/180*$array[$x][0]+$phasy*M_PI/180);
Einzelne Punkte ins Bild setzen:
imagesetpixel($img, $array[$x][1]*256+256, $array[$x][2]*256+256, $black)
Das Bild ist dann 512*512 Pixel gross
Freue Mich drauf wenn jemand den Fehler entdeckt. es könnte auch am umwandeln von Grad in die andere Einheit sein^^ (*M_PI/180)Gruss Sandmaster
-
Bei der Lage von Bildpunkten wird häufig von der linken oberen Ecke ausgegangen (die y-Achse zeigt nach unten), wenn du von der linken unteren Ecke ausgehst, mußt du deine Koordinaten entsprechend umrechnen:
imagesetpixel($img, $array[$x][1]*256+256, -$array[$x][2]*256+256, $black)
-
So danke vielmal!
jetzt kommt noch ein Problem mit der formel:
Bei
http://sandmaster.sa.ohost.de/lissa/test1.php?freqx=2&freqy=1&lx=1&ly=1&genauig=20000&phasy=45
kommt ja ein 'C', welches aber bei 0° phasenverschiebung sein sollte.
stattdessen sollte eine '8' kommen
Ich habe immer noch den verdacht, dass die Umwandlung von °in pi falsch ist
-
So ich habe mal weiter analysiert und bin auf volgendes gekommen, um auf die Figuren aus dem pdf zu kommen:
Freq(w2/w1) Startphasy Endphasy Schritt 1:1 0 180 45 1:2 225 45 45 1:3 180 360 45 2:3 270 90 45 3:4 22.5 202.5 45
Und drumm bräuchte ich jetzt hilfe bei der Formel
Y-Achse$array[$x][1] =$ampx*sin($freqx*M_PI/180*$array[$x][0]+$phasx*M_PI/180);
X-Achse
$array[$x][2] = $ampy*sin($freqy*M_PI/180*$array[$x][0]+$phasy*M_PI/180);
wie gesagt es kann an *pi/180 liegen
Mfg Sandmaster
-
volgendes schriibt mer mit f
-
Hi,
dazu darf ich ein C64 demo vorstellen, das ich im Sommer programmiert habe und das ebensolche Lissajous Figuren zeichnet -
die Parameter lassen sich mit dem Joystick ändern.http://pouet.net/prod.php?which=31764
ist zwar kein C++, sondern Assembler, aber php ist ja auch net C++
Achja, anschauen lässt sich das demo z.B. mit VICe: http://www.viceteam.org/
-
Nice site!