Zurück zum Menü 5
5.2.8 Drehender Quader mit Profan

Erstellt am 05.12.2011



Zu meiner aktiven Schulzeit, so Ende der 1970ger, Anfang der 1980ger Jahre wurden wir Schüler mit den damaligen verfügbaren Homecomputern auch mit der folgenden Aufgabe bedacht:

"Lasse einen Quader auf dem Bildschirm drehen"

und später:

"Dieser Quader darf nicht ruckeln und muss möglichst 'glatt' durchlaufen !"

Zunächst muss man sich also Gedanken machen, wie ein Quader perspektivisch aussieht. Dazu habe ich einmal folgendes Foto gemacht:


Wenn wir diesen Quader nun auf der Tischplatte drehen lassen würden, so ergäben sich zwei Ellipsen, auf denen die Ecken des Quaders entlang laufen. Ich habe das einmal mit einer Fotomontage visualisiert:


Wenn wir das Programm entsprechend auslegen, so brauchen wir nur 8 Ecken auf zwei Ellipsen rotieren zu lassen. Diese Eckpunkte verbinden wir dann mit geraden Linien und fertig ist der drehende Quader.

Mein zugrunde liegender Quellcode ist sehr simpel:

 

Window 200,200-450,500
windowtitle "strippenstrolch.des drehender Quader"
Mcls 400,500

proc drehen

declare x!, xpos%, ypos%, Zeit%

x!=0


while x!<= 2*@pi()
x! = x! + 0.01

Mcls 400,500

startpaint -1

line 200+(150 * @sin(x!)),150+(100 * @Cos(x!)),200+(150 * @sin(x!)),250+(100 * @Cos(x!))
line 200+(150 * @sin(x!+@pi())),150+(100 * @Cos(x!+@pi())),200+(150 * @sin(x!+@pi())),250+(100 * @Cos(x!+@pi()))
line 200+(150 * @sin(x!+0.5*@pi())),150+(100 * @Cos(x!+0.5*@pi())),200+(150 * @sin(x!+0.5*@pi())),250+(100 * @Cos(x!+0.5*@pi()))
line 200+(150 * @sin(x!-0.5*@pi())),150+(100 * @Cos(x!-0.5*@pi())),200+(150 * @sin(x!-0.5*@pi())),250+(100 * @Cos(x!-0.5*@pi()))

line 200+(150 * @sin(x!)),150+(100 * @Cos(x!)),200+(150 * @sin(x!+0.5*@pi())),150+(100 * @Cos(x!+0.5*@pi()))
line 200+(150 * @sin(x!)),150+(100 * @Cos(x!)),200+(150 * @sin(x!-0.5*@pi())),150+(100 * @Cos(x!-0.5*@pi()))
line 200+(150 * @sin(x!+@pi())),150+(100 * @Cos(x!+@pi())),200+(150 * @sin(x!-0.5*@pi())),150+(100 * @Cos(x!-0.5*@pi()))
line 200+(150 * @sin(x!+@pi())),150+(100 * @Cos(x!+@pi())),200+(150 * @sin(x!+0.5*@pi())),150+(100 * @Cos(x!+0.5*@pi()))

line 200+(150 * @sin(x!)),250+(100 * @Cos(x!)),200+(150 * @sin(x!+0.5*@pi())),250+(100 * @Cos(x!+0.5*@pi()))
line 200+(150 * @sin(x!)),250+(100 * @Cos(x!)),200+(150 * @sin(x!-0.5*@pi())),250+(100 * @Cos(x!-0.5*@pi()))
line 200+(150 * @sin(x!+@pi())),250+(100 * @Cos(x!+@pi())),200+(150 * @sin(x!-0.5*@pi())),250+(100 * @Cos(x!-0.5*@pi()))
line 200+(150 * @sin(x!+@pi())),250+(100 * @Cos(x!+@pi())),200+(150 * @sin(x!+0.5*@pi())),250+(100 * @Cos(x!+0.5*@pi()))

endpaint

zeit%=0
while Zeit%<1000
inc Zeit%
endwhile



MCopyBmp 0,0-400,500 > 0,0,0

endwhile

endproc



Do:
drehen
goto "Do"

waitkey
end

Der Trick, den man benötigt, um die Ruckelfreiheit zu bekommen, ist folgender:

Ich rendere den Quader in jeder neuen Position auf den Memory-Screen. Zuvor wird dieser Memory-Screen gelöscht. Nach dem Rendern wird der Memory-Screen einfach in das Hauptfenster kopiert. Somit sieht man nicht, wie der Quader mit den Einzellinien aufgebaut wird.

Hier schließlich die beiden Downloads dazu:




Ich wünsche frohes Programmieren unter Profan,





Nach oben            Zurück zum Menü 5