Grafik und Computeranimation
Computergrafiken üben eine gewisse Faszination aus. Lesen Sie selbst, wie die fantastischen Bilder entstehen.
Computergrafik gewinnt in letzter Zeit immer mehr an Bedeutung. Was früher als Spielerei für Computerfreaks galt, entwickelte sich immer mehr zu einem zukunftsträchtigen Markt. Dafür gibt es natürlich viele Gründe:
Einer davon ist die Entwicklung auf dem Hardware-Sektor, die vieles möglich macht, von dem man vor einigen Jahren nur träumen konnte. Außerdem hat sich die Erkenntnis durchgesetzt, daß eine Grafik oft mehr sagt, als tausend Worte.
Die ersten Grafikprogramme dienten hauptsächlich zur Darstellung von Rechenergebnissen in Diagrammen. Damit konnten lange Zahlenkolonnen, zum Beispiel Umsatzstatistiken in übersichtlicher Form dargestellt werden. Erst später entpuppte sich Computergrafik als ein Hilfsmittel, das der Datenverarbeitung ganz neue Anwendungsbereiche erschloß. Mit bloßem Rechnen und Darstellen der Ergebnisse haben moderne Grafikanwendungen meist nichts mehr zu tun.
CAD-Werkzeug für den Entwickler
Ein Bereich, der durch Computergrafik geradezu revolutioniert wurde, ist der Maschinenbau. Technische Zeichner übertrugen früher die Zeichnung des Ingenieurs in einen genauen Bau- und Konstruktionsplan, nach dem dann ein Prototyp gefertigt wurde. Ganz anders die Realität heute. Der Entwickler entwirft das Bauteil in einem interaktiven Vorgang am Bildschirm. Er kann solange ändern und probieren, bis das Ergebnis seinen Vorstellungen entspricht. Solche Arbeitsplätze werden CAD-Systeme genannt. Das steht für »Computer Aided Design«, zu deutsch computerunterstützter Entwurf. Als Resultat kann sich der Ingenieur den fertigen Bauplan auf einem Plotter ausgeben lassen. Noch effektiver wird der Prozeß, wenn die Daten des CAD-Systems gleich von einer Fertigungsmaschine übernommen werden, die das Stück herstellt. In diesem Fall spricht man von CAD/CAM, wobei CAM die Abkürzung für »Computer Aided Manufacturing« computerunterstützte Fertigung darstellt. Durch die Effektivität von CAD/CAM haben sich große Veränderungen in den Entwicklungsbüros der Maschinenindustrie ergeben. Die Ingenieure sind weniger mit Routinearbeiten befaßt, da diese vom Computer erledigt werden.
Auch in der Elektronikindustrie sind ähnliche Tendenzen zu beobachten. Der Entwurf von Schaltungen und Chips erfolgt ebenfalls mit CAD-Programmen. Die Bauelemente werden auf dem Bildschirm verdrahtet, das Programm macht dann ein fertiges Platinenlayout oder eine fertige Chip-Maske daraus, die direkt in die Produktion gehen kann. Simulationsprogramme erlauben es auch, den Schaltkreis gleich zu testen, eventuelle Fehler können also bereits behoben werden, bevor die Schaltung überhaupt existiert. Etwas überspitzt wird sogar behauptet, ein Chip, der in der Simulation funktioniert, sei schon so gut wie gebaut.
Computergrafik für Künstler
Während diese Entwicklung eher unbemerkt vonstatten geht, ist der wachsende Einsatz von Grafik-Computern in Werbung und Video, Kino und Fernsehen nicht zuübersehen (Bild 1, 2). Jeder kennt ja wohl die ARD-Eins, und die Produzenten von Video-Clips setzen immer mehr auf optische Effekte aus dem Computer. Auch Künstler interessieren sich für die neuen Möglichkeiten. So war Andy Warhol an der offiziellen Präsentation des grafikstarken Amiga beteiligt. Er demonstrierte, wie echte Bilder, die per Videokamera und Digitalisierer dem Amiga eingegeben wurden, auf dem Bildschirm bearbeitet und verfremdet werden können.


Um Computergrafik darzustellen oder sogar zu animieren, muß ein sehr großer Aufwand bei Hard- und Software betrieben werden. Grafik-Workstations, so nennt man grafische Computer-Arbeitsplätze, arbeiten zumeist mit einer Auflösung von mehr als 1000 x 800 Bildschirmpunkten. Außerdem verfügen professionelle Systeme über eine Palette von über 16 Millionen Farbtönen, mehr als das menschliche Auge überhaupt unterscheiden kann. Allerdings können nicht alle Farben gleichzeitig auf dem Bildschirm erscheinen. Die Farbauswahl erfolgt über Register. Der Farbwert, den man einem Pixel gibt, entscheidet, aus welchem Register die Farbe entnommen wird. In diesen Registern steht je ein Wert für den Rot-, Grün- und Blauanteil der Farbe. Damit kann man jede beliebige Farbe zusammenmischen. Viele Grafikcomputer haben 256 solche Register, das heißt aus der riesigen Palette können 256 Farben in einer Grafik verwendet werden.
Die großen Auflösungen fordern aber auch ihren Tribut in Form von Speicherbedarf. Eine Grafikseite mit 1024 x 1024 Punkten und 256 Farbregistern braucht ein Bildschirmspeicher von einem MByte (Bild 3). Dazu kommt noch, daß dieser Speicher 25 oder 30 mal in der Sekunde komplett ausgelesen werden muß, um das Bild auf dem Monitor zu erzeugen. Das erfordert schnelle Hardware, die leider entsprechend teuer ist. Spezielle Prozessoren übernehmen grundlegende Arbeiten beim Erstellen der Grafik, wie das Ziehen von Linien und Kreisen, das Ausfüllen von Flächen und das Verschieben von Ausschnitten auf dem Schirm. So wird der Prozessor von solchen untergeordneten Aufgaben entlastet. Denn bei aufwendigen Grafiken, wie 3D-Darstellungen ist es wichtig, daß der Computer schnell rechnet. Nicht umsonst werden die schnellsten Computer der Welt oft für Grafikaufgaben eingesetzt. Für dreidimensionale Darstellungen sind sehr viele Multiplikationen und Additionen notwendig. Meistens erledigen eigene Arithmetik-Prozessoren diese Aufgaben. Es gibt sogar Computer, die eigens für das Rechnen mit Matrizen und Vektoren, wie es 3D-Grafiken erfordern, gebaut sind.

Dennoch hört man, daß selbst die schnellsten und teuersten Computer der Welt eine Viertelstunde lang rechnen müssen, um ein einziges Bild zum Beispiel für eine Kinoproduktion zu erzeugen. Bei 24 Bildern pro Sekunde würde also ein nur 4 Sekunden langer Filmschnipsel 24 Stunden lang den Computer beschäftigen. Daraus können Sie selbst ermessen, wie umfangreich die Berechnungen sind.
Aber die Ergebnisse sind faszinierend. Das Bild 4 zeigt Ihnen eine Sequenz aus einem Computerfilm. Doch braucht man dazu natürlich nicht nur die geeignete Hardware, auch gute Programme sind notwendig, um solche Bilder zu erzeugen.


Besonders dreidimensionale Bilder können nur mit Hilfe komplizierter mathematischer Formeln berechnet werden. Dabei gibt es mehrere Arten der Darstellung. Die einfachste ist die Darstellung in Form von Punkten und Verbindungslinien. Das Objekt erscheint als Drahtgitter auf dem Schirm. Deshalb hat sich der Ausdruck »Wire Frame«-Modell eingebürgert. Solche Darstellungen sind verhältnismäßig einfach zu berechnen und können auf Computern auch recht schnell erzeugt werden.
3D-Grafik
Einen Schritt weiter sind da schon Grafiken, die die Verdeckung durch Flächen mit einbeziehen. Denn manche Linien sind ja eigentlich gar nicht sichtbar, weil sie hinter anderen Flächen liegen. Das oft etwas unübersichtliche transparente Wire-Frame-Modell wirkt mit Verdeckung gleich realistischer. Die Programme, die solche Bilder errechnen, heißen »Hidden Line«-Programme.
Wenn die Flächen nicht mehr nur durch Linien angedeutet, sondern richtig ausgemalt werden, spricht man dagegen von »Hidden Surface«. Mit solchen Algorithmen werden die meisten professionellen 3D-Grafiken erzeugt. Leider muß dabei sehr viel gerechnet werden, so daß Hidden Surface-Darstellungen meist nicht mehr in Echtzeit bewegt werden können. Die Rechenzeit steht dabei in direktem Verhältnis zur Anzahl der Bildschirmpunkte, was auch erklärt, warum gerade die Kinoproduktionen so aufwendig sind. Für die Darstellung auf der großen Leinwand wird nämlich oft mit Auflösungen von 4 096 x 4 096 Punkten gearbeitet.
Alle diese Darstellungen wirken aber immer noch kantig und computerhaft. Das kommt daher, daß die Objekte meist auf der Basis von Drahtmodellen entworfen werden. Aber was wäre die Mathematik, wenn es nicht auch für dieses Problem Formeln gäbe. Sogenannte Flächen höherer Ordnung schmiegen sich um das eckige 3D-Objekt und runden die Formen ab. Doch die höhere Ordnung der Flächen bedingt auch einen höheren Rechenaufwand. Manchmal ist es aber gar nicht erwünscht, daß die Formen glatt und abgerundet sind. Natürlich wirkende Strukturen und Oberflächen sind aber genauso gefragt. Allein über diesen Aspekt könnte man ein ganzes Buch schreiben. Natürlich ist wieder die Mathematik im Spiel, aber auch einfache Formeln und Algorithmen liefern oft erstaunliche Ergebnisse. Eine wichtige Rolle spielen dabei oft Zufallszahlen. Es gibt zum Beispiel einen Algorithmus, der mit Hilfe eines Zufallsgenerators verblüffend echt wirkende Gebirge in die Landschaft stellt. Dabei wird erst einmal die Grundform des Berges zufällig gewählt. Die Konturen werden dann in kleine Flächen unterteilt, die wieder zufällig verformt werden. Dann wird weiter unterteilt und wieder zufällig verformt. Wenn man dieses Verfahren oft genug anwendet, ergeben sich Strukturen fast wie im richtigen Leben. Wenn auf kleine Elemente immer wieder die gleiche Regel angewendet wird wie auf den ganzen Berg, dann bezeichnet man diese Bildelemente als »Fractals«. Ein Beispiel für solche Berge bietet das Spiel »Rescue on Fractalus«. Auf Großrechnern sind natürlich die Möglichkeiten der Darstellung viel feiner als auf dem C 64. Die dabei entstehenden Bilder sind von Postkarten aus den Alpen praktisch nicht zu unterscheiden. Oberflächen können aber auch mit zweidimensionalen Bildern bedeckt sein. Ein digitalisiertes Foto könnte zum Beispiel in der Luft schweben oder auf eine Kugel abgebildet werden.
Von den ganzen Feinheiten sieht man aber gar nichts, wenn die Szenerie nicht entsprechend ausgeleuchtet ist. Professionelle 3D-Programme bieten deshalb die Option, mit mehreren »Lichtquellen« zu arbeiten. Da gibt es Diffuslicht oder harte Strahler wie im Fotostudio. Erst durch das Spiel von Licht und Schatten entsteht ein wirklich realistischer Eindruck. Dabei trumpfen dann die Computer mit ihrer Farbpalette auf. Aber es gibt, wie bei allem, was realistisch aussehen soll, natürlich wieder einen Pferdefuß. Denn für jede Lichtquelle muß eine aufwendige Berechnung der verdeckten Flächen vom Standpunkt der Lichtquelle aus durchgeführt werden, um den Schatten richtig einsetzen zu können. Das heißt, für jede »Lampe« muß der gleiche Hidden Surface-Algorithmus angewendet werden, wie für die Darstellung der Ansicht des Betrachters. Die Rechenzeit vervielfacht sich also.
Der wichtigste Faktor für eine gelungene Computergrafik ist aber trotz Hard- und Software immer noch der Mensch, der das Bild entwirft. Zeichenprogramme unterstützen ihn beim Entwurf von zweidimensionalen Grafiken. Als Eingabemedium dienen vor allem Grafiktabletts. Es gibt aber auch andere Möglichkeiten.
Ein Digitalisierer kann zum Beispiel das Bild einer Videokamera einlesen. Scanner erlauben es, gedruckte Vorlagen und Zeichnungen zu verwenden.
Eine Grafik entsteht
Die Gestaltung von dreidimensionalen Gebilden ist etwas aufwendiger. Oft wird erst einmal in zwei Dimensionen entworfen und dann durch Rotation oder Verschieben ein räumliches Gebilde geschaffen. Aus verschiedenen Ansichten kann aber auch jeder Punkt beliebig im Raum plaziert werden. Ähnlich wie bei zweidimensionalen Malprogrammen gibt es natürlich Standardelemente, die man nur zusammenfügen muß. Es gibt sogar dreidimensionale Digitalisierer. Der räumliche Standort eines Stiftes, der einen Ultraschallsender oder Empfänger trägt, kann durch die Laufzeit des Schalles zu drei Meßpunkten ermittelt werden. Durch Abtasten mit dem Stift kann jede real existierende Form in den Computer übertragen werden. Beim Entwurf von 3D-Modellen arbeitet man üblicherweise mit Wire Frame-Modellen, die es erlauben, das Objekt schnell in verschiedene Lagen zu drehen. Die langen Rechenzeiten für Hidden Line oder Hidden Surface verbieten deren Verwendung in der Entwurfsphase. Die 3D-Welt setzt sich aus mehreren Objekten zusammen, die einzeln definiert werden. Betrachter-Standpunkte und »Lichtquellen« müssen festgelegt werden. Die fertige Grafik kann jetzt mit Verdeckung und Schattenwurf berechnet und gesichert werden. Man kann ein Bild natürlich ganz normal speichern, man kann es aber auch auf Video aufzeichnen oder ausdrucken. Spezielle Laserdrucker fertigen auch Dias mit hoher Auflösung an oder belichten 35-Millimeter-Kinofilme.
Die Bilder lernen laufen
Sie haben jetzt gesehen, wie ein einzelnes Bild entworfen wird. Der größte Reiz geht aber von bewegter Grafik aus. Für solche Computerfilme müssen zuerst die Objekte definiert werden. Hinzu kommt, daß einzelne Objekte Bewegungen ausführen können. Nun ist es aber nicht so, daß für jedes Einzelbild, das in einem Videofilm zum Beispiel 1/25 Sekunde dauert, genau die Momentaufnahme der Bewegung festgelegt werden muß. Vielmehr kommt es auf charakteristische Eckpunkte der Bewegung an. Das Ausrechnen der Zwischenschritte übernimmt ein sogenannter Phasengenerator. Dieses Prinzip kann man auch auf dem C 64 ausprobieren.
Listing 1 zeigt ein solches Programm in Simons Basic. In der Ebene kann ein Objekt verschoben und gedreht werden, wobei die Bewegung in Zwischenschritten aufgelöst werden kann.
Ein kleiner Phasengenerator
Als Objekt ist ein Pfeil definiert, dessen Koordinate Sie Bild 5 entnehmen können. Der Pfeil ist durch vier Punkte festgelegt, deren X- und Y-Koordinaten in den DATA-Zeilen 1050 bis 1080 stehen. Diese Daten liest das Programm in die Felder X und Y ein. Die restlichen Daten legen fest, in welcher Reihenfolge die Punkte miteinanderverbundenwerden. Diese Information wird im Feld »AP« für die Anfangspunkte und »EP« für die Endpunkte der Linien abgelegt. Innerhalb des Koordinatensystems (Bild 6) können nun die Koordinaten für Start und Ziel der Bewegung festgelegtwerden. Achten Sie aber darauf, daß der Pfeil im Bildschirm bleibt. Die Anzahl »N« der Schritte bestimmt, in wieviel Phasen die Bewegung aufgelöst werden soll. Aus diesen Angaben berechnet das Programm in den Zeilen 240 bis 260, um welchen Betrag es die X- und Y-Koordinaten sowie den Winkel pro Bild erhöhen muß, damit der Pfeil am Ende der Bewegung genau bei den Zielkoordinaten ankommt. Das geschieht nach folgenden Formeln:
DX = (Startwert X — Zielwert X)/N
DY = (Startwert Y — Zielwert Y)/N
DW = (Startwinkel — Zielwinkel)/N


Als Anfangskoordinaten werden die Startwerte eingesetzt. Jetzt muß der Pfeil um den gerade eingestellten Winkelrotiertwerden. Dafür gilt folgende Formel:
XR = X * cos(IW) + Y x sin(IW)
YR = -X * sin(IW) + Y x cos(IW)
Außerdem wird noch in den Zeilen 400 und 410 die Verschiebung dazuaddiert. Die Resultate der Koordinaten-Transformation werden in die Felder »XR« und »YR« für jeden Punkt eingetragen. Das Ziehen der Linien erfolgt in der FOR-Schleife ab Zeile 910. Danach werden die Parameter für das nächste Bild berechnet. Zur X-Koordinate »IX« wird die Schrittweite »DX« addiert, analog wird mit Y und dem Winkel verfahren. Mit den neuen Werten kann wieder rotiert, verschoben und gezeichnet werden, bis der Pfeil seine Endposition erreicht hat. Wenn Sie das kleine Programm starten, zeichnet der Computer alle Zwischenstadien, die der Pfeil auf seinem Weg passiert. Mit den Startwerten —140, —79 und den Zielkoordinaten 140,79 zum Beispiel überquert er den Bildschirm. Durch die Winkel können Sie den Pfeil auch noch rotieren lassen. Vielleicht werden Sie einwenden, daß es sich nicht um eine echte Animation handelt, da man alle Phasen gleichzeitig sieht. Wenn Sie die Zeile 422 HIRES 7,6 einfügen, wird vor jedem neuen Bild der Bildschirm gelöscht, so daß eher der Eindruck einer Bewegung entsteht. Das ständige Löschen und Wiederaufbauen der Grafik wirkt allerdings recht störend. Ein Gegenmittel ist die Verwendung zweier Bildschirmseiten. So kann man immer eine fertige Seite anzeigen, während die andere, nicht sichtbare Seite gerade gelöscht und neu aufgebaut wird. Mit dieser Methode kann man auch auf dem C 64 arbeiten, allerdings nur mit etwas Aufwand in Maschinensprache. Die einfache gerade Bahn des Pfeils reicht natürlich nicht für professionelle Animationen, aber das Prinzip wird deutlich.
Teure Animationssysteme erlauben auch Kreisbahnen oder zusammengesetzte Bewegungen über viele Eckpunkte. Mit Drahtmodellen oder Hidden Surface mit stark reduzierter Auflösung können die Bewegungsabläufe meist in Echtzeit studiert und gestaltet werden.
Für alle Objekte der Szenerie werden die Bewegungen festgelegt. Noch belebter wird das ganze durch sich verändernde Betrachter-Standpunkte. So könnte der Beobachter zum Beispiel auf einer Kreisbahn über der künstlichen 3D-Welt schweben. Auch diese Bewegung erzeugt ein Phasengenerator.
Wenn die Animation komplett entworfen ist, kann daran gegangen werden, die Grafiken mit Lichtquellen und Hidden Surface zu berechnen.
Die einzelnen Bilder werden ausgerechnet und gespeichert. Das kann auf normalen Speichermedien wie einer Festplatte erfolgen, meist wird man das Bild aber gleich auf Film bannen. Es gibt auch spezielle Videorecorder, die auf ein Signal des Computers hin genau ein Einzelbild mit einer Dauer von y25 Sekunde aufzeichnen und dann wieder auf das nächste Bild warten. So kann der Computer selbsttätig eine ganze Filmsequenz produzieren, zum Beispiel nachts, wenn die Großrechner nicht so stark belastet sind.
2D-Animation
Daß der Aufwand für zweidimensionale Animationen weit geringer ist und keinen Großrechner erfordert, beweisen ja die vielen Spiele für den C 64. Doch auch mit zwei Dimensionen kann die Realität recht gut nachempfunden werden. Oft bedient man sich dabei vieler Einzelbilder, aus denen ein Bewegungsablauf zusammengesetzt wird. Ein Handicap bei der Bewegung einer Figur ist es aber oft, daß der Hintergrund immer rekonstruiert werden muß, wenn sich die Figur weiterbewegt. Sonst würde ja im Laufe der Zeit die Hintergrundkulisse immer mehr verschwinden. Abhilfe schafft hier die Hardware.
Durch Überlagerung mehrerer Bilder kann man erreichen, daß sich die Figuren unabhängig bewegen. Eines der Bilder enthält zum Beispiel den Hintergrund, ein anderes den Vordergrund.
In der dritten Ebene bewegt sich das Objekt. Wenn die Reihenfolge und Verdeckung der Ebenen richtig definiert ist, dann kann sich die Figur zwischen den Kulissen ungehindert bewegen.
Leider bietet der C 64 nicht die Möglichkeit, mehrere Bildschirme zu überlagern. Dennoch ist eine ähnliche Animation möglich. Die Sprites sindja nichts anderes als kleine Bildchen, die dem normalen Bild überlagert werden, und zwar entweder als Vordergrund- oder aber auch als Hintergrundobjekte. Auch unter den Sprites kann eine Priorität definiert werden. Was man damit alles bewegen kann, beweisen Spiele wie zum Beispiel Soccer. Für die Animation mit Sprites ist nicht nur entscheidend, daß sie unabhängig vom restlichen Bild bewegt werden können, genauso wichtig ist es, daß man schnell das dargestellte Bild im Sprite wechseln kann. So können schnell wechselnde Bewegungsphasen mit Einzelbildern gestaltet werden. Ein Beispiel hierfür gibt Listing 2. Mit Hilfe des Simons Basic-Befehls DESIGN werden vier Teilbilder einer Bewegung definiert. Diese werden als Sprites in den Blöcken 192bis 195abgelegt. Das kleine Programm ab Zeile 1900 läßt das Männchen über den Bildschirm wandern. Die Variable »L« gibt die horizontale Position des Sprites an. Diese läuft in Dreierschritten von 340 bis 0, so daß das Sprite von rechts nach links über den Bildschirm wandert. Doch damit erhält man zwar eine Bewegung, diese würde aber unrealistisch wirken, wenn man nicht synchron dazu die Einzelbilder des Schrittes ablaufen lassen würde. Das geschieht im zweiten Parameter des MOB SET-Befehls. Dieser legt fest, in welchem Speicherbereich das Bild für das Sprite liegt. So können die Teilbilder in das Sprite eingeblendet werden. Das erledigt die Variable »I«, die aus der DATA-Zeile gelesen wird. Die Abfrage in Zeile 1940 sorgt dafür, daß die Reihenfolge der Bilder immer wieder abläuft. Wenn Sie das Programm abbrechen, können Sie das Sprite mit MOB OFF 0 wieder verschwinden lassen.
Die Kürze des Programms beweist, wie einfach Spriteanimationen sind. Allerdings ist man natürlich eingeschränkt, was die Größe der Figuren und die Anzahl der Teilbilder betrifft, denn sonst wäre ja der ganze Speicher nur voller Sprites.
Die Zukunft
Auf Großrechnern sind allerdings solche Einschränkungen meist das geringste Problem. Dennoch wird selten mit 2D-Animationen gearbeitet, da die größte Faszination natürlich von dreidimensionalen Bildern ausgeht. In Amerika wird bereits an vollständig computeranimierten Spielfilmen gearbeitet. Die Arbeiten für den Film »The Works« ziehen sich aber jetzt schon fünf Jahre hin. Es ist eben immer noch einfacher, eine Kamera aufzustellen, als jedes Detail selbst zu entwerfen und zu animieren. Allerdings werden Weltraumaufnahmen immer mehr vom Computer erledigt, da Computergrafik inzwischen billiger ist, als der aufwendige Modellbau. Ein Beispiel dafür ist der Science Fiction-Streifen »Star-Fighter«, der vor nicht allzu langer Zeit über die deutschen Kinoleinwände flimmerte. Das größte Problem in der Computergrafik sind immer noch die Rechenzeiten. Hier hoffen die Künstler aber auf bessere und schnellere Hardware, an der auch schon fleißig entwickelt wird. Vielleicht ergeben sich so noch ganz andere Anwendungsbereiche, zum Beispiel in der Bildverarbeitung, die uns heute noch gar nicht in den Sinn kommen. Sicher ist nur, daß die Computergrafik in immer neue Bereiche Einzug hält und dort unweigerlich Veränderungen bewirkt.
(G. Pehland/ah)20 rem ** mini-phasengenerator **
25 rem ** c 64 + simons basic **
30 :
100 rem *** daten lesen ***
110 for i= 1 to 4
120 read x(i):read y(i)
130 next
140 for i=1 to 3
150 read ap(i):read ep(i)
160 next
170 :
180 input "startkoordinaten x,y ";sx,sy
190 input "startwinkel ";sw
200 input "zielkoordinaten x,y ";zx,zy
210 input "zielwinkel ";zw
220 input "anzahl der schritte ";n
230 sw=sw*~/180:zw=zw*~/180
235 rem *** schrittweiten ***
240 dx=(zx-sx)/n:rem schrittweite x
250 dy=(zy-sy)/n:rem schrittweite y
260 dw=(zw-sw)/n:rem schrittweite winkel
290 rem *** istwerte=startwerte ***
300 iw=sw:ix=sx:iy=sy
330 ($64){CTRL-A} 7,6
350 for nn=0 to n
360 si=sin(iw):co=cos(iw)
370 for p=1 to 4
375 rem *** punkte ($64){ensh}ieren ***
380 xr= x(p)*co+y(p)*si
390 yr=-x(p)*si+y(p)*co
395 rem *** punkte verschieben ***
400 xr(p)=xr+ix
410 yr(p)=yr+iy
420 next p
425 rem *** ($64)yien ziehen ***
430 for i=1 to 3
440 ($64){stop} 160+xr(ap(i)),99-yr(ap(i)),160+xr(ep(i)),99-yr(ep(i)),1
450 next
455 rem *** istwerte neu be($64){dish}hnen ***
460 ix=ix+dx
470 iy=iy+dy
480 iw=iw+dw
490 next nn
500 wait 198,1:get a$
510 end
950 :
1000 rem *** daten der ($64)yien ***
1050 data 0,-20:rem punkt 1
1060 data 0,20:rem:punkt 2
1070 data -20,0:rem punkt 3
1080 data 20,0:rem punkt 4
1090 data 1,2:rem linie 1
1100 data 3,2:rem linie 2
1110 data 4,2:rem linie 3
20 rem *** sprite-animation ***
25 rem *** c 64 + simons basic ***
90 ($64){$62}0,192*64
100 @........................
110 @..........bbbb..........
120 @........bbbbbbbb........
130 @..........bbbb..........
140 @..........bbbb..........
150 @...........bb...........
160 @..........bbbb..........
170 @.........bbbbbb.........
180 @........bbbbbbbb........
190 @.......bb.bbbb.bb.......
200 @......bb..bbbb..b.......
210 @.....bb...bbbb..b.......
220 @....bb....bbbb..b.......
230 @.........bbbbb..b.......
240 @........bb...bb.........
250 @........bb...bb.........
260 @.......bb.....bb........
270 @.......bb.....bb........
280 @......bb.......bb.......
290 @....b.bb........bb......
300 @.....bb........bb.......
390 ($64){$62}0,193*64
400 @..........bbbb..........
410 @........bbbbbbbb........
420 @..........bbbb..........
430 @..........bbbb..........
440 @...........bb...........
450 @..........bbbb..........
460 @.........bbbbbb.........
470 @........bbbbbbbb........
480 @........bbbbbb.b........
490 @.......bb.bbbb.b........
500 @......bb..bbbb.b........
510 @.....bb...bbbb.b........
520 @.........bbbbb.b........
530 @.........bb.bb..........
540 @........bb..bb..........
550 @........bb..bb..........
560 @.......bb...bb..........
570 @.......bb....bb.........
580 @.......bb....bb.........
590 @.......bb....bb.........
600 @.....bbbb..bbbb.........
690 ($64){$62}0,194*64
700 @..........bbbb..........
710 @........bbbbbbbb........
720 @..........bbbb..........
730 @..........bbbb..........
740 @...........bb...........
750 @..........bbbb..........
760 @.........bbbbbb.........
770 @.........bbbbbb.........
780 @........bbbbbbb.........
790 @........bbbbbbb.........
800 @......bb..bbbbb.........
810 @......bb..bbbb..........
820 @..........bbbb..........
830 @..........bbbb..........
840 @.........bbbb...........
850 @.........bbbb...........
860 @.........bbbb...........
870 @..........bbbb..........
880 @..........bb.bb.........
890 @..........bbbbb.........
900 @........bbbbb...........
990 ($64){$62}0,195*64
1000 @..........bbbb..........
1010 @........bbbbbbbb........
1020 @..........bbbb..........
1030 @..........bbbb..........
1040 @...........bb...........
1050 @..........bbbb..........
1060 @..........bbbb..........
1070 @..........bbbb..........
1080 @.........bbbbb..........
1090 @.........bbbbb..........
1100 @........bbbbbb..........
1110 @.......bb.bbbb..........
1120 @..........bbbb..........
1130 @..........bbbb..........
1140 @..........bbbb..........
1150 @.........bbbb...........
1160 @.........bbbb...........
1170 @.........bbbb...........
1180 @.........bb.bb..........
1190 @.......bbbb.bb..........
1200 @..........bbbb..........
1210 :
1220 rem *** bewegung ***
1230 :
1900 for l=340 to 0 step-3
1910 rem *** naechstes bild ***
1920 read i
1940 if i=0 then restore:read i
2000 rem *** sprite umdefinieren ***
2010 ($64){rght} 0,191+i,11,1,0
2015 rem *** sprite bewegen ***
2020 ($64){esc} 0,l,208,l,208,2,10
2030 for j=1 to 55:next
2040 next
2050 restore:goto 1900
2190 rem *** reihenfolge der bilder ***
2200 data 1,2,3,4,2,0