Grundlagen des Morphens

...oder die reale Unwirklichkeit als Bedeutungslosigkeit der Form

Dieser Winterabend im Jahre 1993 wird mir immer in Erinnerung bleiben. Zu tief sitzen die Erinnerungen an meinen grausigen Fund, und obwohl ich alles dafür geben würde vergessen zu können, weiß ich, daß nichts auf dieser Welt jemals diese schrecklichsten meiner Gedanken aus meinem Gedächtnis löschen könnte. Ich denke, daß es wichtig ist, daß die Ereignisse jenes denkwürdigen Tages schnellstens der Öffentlichkeit bekannt werden.

Es begann völlig harmlos - der erste Schnee bedeckte gerade die Dächer Duisburgs, als ich mich entschloß die Stufen zum Dachboden hinauf zu steigen, um die Weihnachtsdekoration für den Tannenbaum zu holen. Daß ich noch am gleichen Abend ein neuer Mensch werden würde war mir zu jenem Zeitpunkt noch nicht bewußt.

Die 40 Watt Glühbirne leuchtete den Raum eher dürftig aus, und so nahm das Schicksal durch einen einfachen Holzbalken seinen Lauf. Diesen übersah ich, blieb mit einem Fuß hängen, verlor das Gleichgewicht, konnte mich jedoch gerade noch an einem Stützbalken festhalten. Dabei glitt mir mein Schlüsselbund aus der Hand und rutschte in einen Spalt zwischen einem alten Küchenschrank und einem Stapel Bücher. Vorsichtig tastete ich nach meinen Schlüsseln. Sehen konnte ich sie nicht, dafür war das Licht zu schwach. Zu meiner eigenen Verwunderung fühlte ich plötzlich einige lose Papierseiten an der Stelle, an der ich eigentlich meinen Schlüsselbund vermutete. Diesen fand ich auch just in diesem Moment, und zog ihn mitsamt dem Papier aus dem Schlitz.

Ich ging in die Mitte des Dachbodens, damit ich sehen konnte, was ich gefunden hatte. Auf dem vergilbten, sicherlich alten, Papier hatte irgendjemand einen Brief oder ähnliches verfaßt. Jedenfalls deutete ein längerer zusammenhängender Text und einige Zeichnungen darauf hin. Ich stieg vom Dachboden hinab, ohne an die Weihnachtsdekoration zu denken - die Neugierde über meinen Fund war zu groß. Was im ich klaren Licht meiner Schreibtischlampe las war entsetzlich. Ich will den Brief in ungekürzter Fassung an dieser Stelle wiedergeben.

„Sehr geehrter Leser, wer immer sie auch sein mögen, nehmen Sie diesen Brief ernst. Dieses soll eine Warnung sein - eine Warnung an alle Menschen. Publizieren Sie sie, machen sie der ganzen Welt bekannt, was ich entdeckte. Ich bin Wissenschaftler, mein Name spielt keine Rolle -aus Scham über meine eigene Blindheit, Kopflosigkeit, ja Leichtsinnigkeit im Umgang mit der Wissenschaft möchte ich ihn nicht nennen. Seien sie jedoch gewiß, daß ich gerade in der Gesellschaft eine angesehene und gefragte Persönlichkeit bin.

Ich beschäftige mich seit langer Zeit mit einem speziellen Gebiet der Mathematik - der, wie ich es nenne, Morphologie. Dabei versuche ich eine Methode zu finden, um einen Körper in einen anderen zu transformieren. Ich will es vorwegnehmen: mir ist es gelungen eine Apparatur zu entwickeln, die beispielsweise aus einer gewöhnlichen Kerze einen Stuhl macht. Dieser Maschine hegt eine einfache mathematische Überlegung zugrunde. Um es Ihnen anschaulich zu machen, lassen Sie mich meine Überlegungen im 2-Dimensionalen Raum vollziehen. Stellen Sie sich ein quadratisches Ur-Objekt vor. Es soll im Gedanken der Gegenstand sein, der in einen anderen transformiert wird. Zudem muß das Zielobjekt, also das Resultat des Morphings, definiert werden. Dazu denken wir uns ein Rechteck mit anderen Ausmaßen. Zeichnet man beide Objekte in ein Koordinatensystem und verbindet die jeweiligen zusammengehörigen Ecken miteinander, dann ergeben sich auf der Hälfte der Verbindungslinien neue Koordinaten. Diese sind dann die Koordinaten eines Morphobjektes. In diesem Fall ist es genau ein „Mittelding“ zwischen den beiden Objekten (wäre das Urobjekt eine Kerze und das Zielobjekt ein Stuhl, müsste man das Morphobjekt konsequent „Sterze“ nennen!). Durch diese einfache Überlegung erkennt man schnell, daß es bei dieser Methode eine kleine Einschränkung gibt, denn um diese Technik anzuwenden, müssen Ur- und Zielobjekt die gleiche Anzahl von Eckpunkten aufweisen! Dadurch, daß man verschiedenen Punkten eine Koordinate im Zielobjekt (oder Urobjekt) zu weisen kann, wird diese Einschränkung trivial. Damit Sie meinen Überlegungen besser folgen können, sehen Sie sich doch dazu nebenstehende Zeichnung an.

Um das ganze mathematisch zu konkretisieren, überlegen Sie sich doch mal, was mit einer Koordinate passiert, wenn Sie gemorpht wird. Die Variablen A(x) und A’(x) sollen die x-Koordinaten eines Punktes im Ur- und Zielobjektes sein. Die Entfernung der Koordinaten bekommt man einfach durch Subtraktion von A(x) von A ’(x) (also: Differenz-A ’(x)-A(x)). Multipliziert man diese Entfernung mit einem Faktor (wobei dieser 0>=Faktor<=l sein muß) und addiert die Ursprungskoordinate A(x) dazu, erhält man die x-Koordinate eines Punktes eines beliebigen Morph-Objektes. Das genaue Mittelobjekt (also die von mir gerade vorgestellte „Sterze“) erhält man durch den Faktor 1/2. Als abschließende Formel erhält man also:

B(x)=A(x)+Morph-Faktor*(A’(x)-A(x))

Wobei B(x) die x-Koordinate eines Punktes eines Morphobjektes ist.

Durch diese einfache Formel war es mir also möglich geworden, jeden Gegenstand in einen anderen zu morphen. Anfangs war ich begeistert von dem, was ich geschaffen hatte. Meine Apparatur machte nichts anderes, als einen Gegenstand in Millionen Punkte zu zerlegen, ihn mittels der oben beschriebenen Formel umzuwandeln und wieder neu darzustellen. Als ich jedoch genauer nachdachte, kamen mir Zweifel am Nutzen meiner Erfindung. Die Möglichkeiten, die sich ergaben waren ' nicht abzuschätzen. Meine Überlegungen wozu man sie sinnvoll verwenden konnte, brachten dann jedoch die grausige Wahrheit an den Tag! Sollte meine Erfindung in Hände kommen, für die sie nicht bestimmt ist, könnte man damit die Welt regieren. Aus Trillionen Sandkörnern der Strände dieser Welt könnte man Soldaten morphen, durch Umwandlung eines Hauses in einen Goldbarren beliebige Märkte kontrollieren. Meine Maschine war ein MACHTINSTRUMENT - nichts anderes.

Der Glaube hat mich blind gemacht. Mein hingebungsvoller Glaube an die Wissenschaft nahm mir die Sicht für überlegtes Handeln. Wieviel Zeit meines Lebens habe ich sinnlos mit der Entwicklung dieser Maschine verbracht, wieviel sinnvolle Erfindungen hätte ich machen können. Fragen die ich nicht beantworten kann, bei mir aber sehr wohl ihre Wirkung hinterlassen. Ich will mit dem Wissen, beinahe die Welt zerstört zu haben so nicht mehr weiter leben! Nein, ich bin zu gefährlich für diese Welt geworden. Ich werde meine Maschine noch zweimal benutzen -benutzen um MICH in ein für die Welt harmloses Objekt zu morphen, einen normalen Holzbalken. Meine Apparatur selbst wird sich kurze Zeit nach meiner Umwandlung in ein Staubkorn wandeln. Die Unterlagen für die von mir entwickelte Apparatur habe ich bereits verbrannt. Meine letzten Minuten als Mensch sind angebrochen. Ich habe Angst!“

Das Morph-Prinzip, grafisch dargestellt.

Als ich den Brief gelesen hatte, wurde mir plötzlich bewußt, daß das, was wir in Film und Werbung mittels modernster Computertechnologie einsetzen einmal ein Menschenleben gefordert hatte - beinahe den Untergang der Menschheit. Von welch’ genialem Genie der Autor des Briefes auch war, ich bin froh, daß er niemals sein Wissen weitergeben wollte. Und auch in naher Zukunft, denke ich, wird niemand etwas ähnliches entwickeln. Man sagt: Die Technologie ist noch nicht so weit entwickelt. Meine Nackenhaare sträuben sich beim Gebrauch des Wortes „noch“.

Um Ihnen aber das Morphen etwas anschaulicher zu machen, habe ich ein Programm in Pure Pascal geschrieben. Es morpht ein zweidimensionales Objekt in ein anderes, die Zwischenbilder werden berechnet und ausgegeben. Dazu müssen beide Körper als Vektorobjekte vorliegen, deren Definition in der Procedure setze_objekt vorgenommen werden. Die Variable Objekt 1 steht dabei für das Urobjekt und Objekt2 für das Zielobjekt. Mein Programm hat zwei vorgegebene Objekte - eine eigene Eingaberoutine für die Vektorobjekte zu schreiben, würde den Aufwand dafür nicht rechtfertigen. Vielleicht lassen Sie sich dadurch einmal anspomen eine solche zu schreiben.

Das Programm kennt übrigens nur Vektorobjekte mit einem Vektorpfad (Hier zum Beispiel einen Apfel und eine Birne). Im Klartext bedeutet das, man kann nur den Umriss eines Objektes eingeben. Zugegeben wird kaum eine (realistische) Vektorgrafik so einfach aufgebaut sein (Beispiel: Auto - Reifen, Karosserie,...). Deshalb gebe ich Ihnen noch einige Tips an die Hand, mit der Sie ganze Objektgruppen morphen können. Sicher ist, daß Sie einen weiteren Daten- und Variablentyp benötigen:

TYPE...
    objektetyp=ARRAY[1..Objekte] OF 
    objektfeldtyp: {objekte=Anzahl der zulässigen Kind-Objekte}

VAR ...
    objektmutter:objektetyp;

Der Zugriff auf die einzelnen Koordinaten gestaltet sich nun denkbar einfach:

objektmutter[kind_objekt][ecke].x

Zum Zeichnen brauchen Sie zwei ineinander geschachtelten Schleifen. Die Innere stellt die Punkte eines Kind-Objekt dar, während die Äußere diese Objekte durchzählt.

Seit jenem Abend gehe ich nur sehr ungeme auf den Dachboden, und wenn ich gehen, dann mache ich einen sehr großen Bogen um einen Holzbalken ...


PROGRAM morpher;
{
Vektor Morpher 
(c)1994 by MAXON-Computer 
Autor: Daniel Tauschke 
Pure Pascal 1.0 
}

USES art,graph;

CONST ecken=15;
      morph_faktor=0.1;

TYPE objekttyp=RECORD
                x,y:REAL;
               END;
     objektfeldtyp=ARRAY[1..ecken] OF objekttyp;

     {Variablen des “objektfeldtyp" definieren ganze 
      Vektorobjekte, indem sie für jede Ecke die Bild-
      schirm Koordinaten speichern}

VAR objekt1,ob;jekt2,Objekts:objektfeldtyp; 
    driver,mode:INTEGER; 
    ende:BOOLEAN; 
    antwort:CHAR;

PROCEDURE put(VAR objekt:objektfeldtyp;ecke,x, y:INTEGER);

{Diese Procedure setzt einen einzelnen Punkt eines Vektor-
objekt. Dazu benötigt sie das Objekt, die Ecke und Ihre
Koordinaten}

BEGIN
    objekt[ecke].x:=x; 
    objekt[ecke].y:=y;
END;

PROCEDURE setze_objekt;

{Die Procedure definiert die beiden (Ur- und Ziel-) Objekte}

BEGIN

    {zuerst die Birne - objekt1}

    put(objekt1,1,301,148); 
    put(objekt1,2,301,167); 
    put(objekt1,3,317,175); 
    put(objekt1,4,326,238); 
    put(objekt1,5,348,266); 
    put(objekt1,6,348,304); 
    put(objekt1,7,329,331); 
    put(objekt1,8,235,342); 
    put(objekt1,9,253,320); 
    put(objekt1,10,257,265); 
    put(objekt1,11,283,219); 
    put(objekt1,12,291,173); 
    put(objekt1,13,296,168); 
    put(objekt1,14,298,148); 
    put(objekt1,15,301,148);

    {dann den Apfel - objekt2}

    put(objekt2,1,297,196); 
    put(objekt2,2,297,209); 
    put(objekt2,3,315,202); 
    put(objekt2,4,344,221); 
    put(objekt2,5,355,267); 
    put(objekt2,6,345,304);
    put(objekt2,7,315,325); 
    put(objekt2,8,280,323); 
    put(objekt2,9,257,295); 
    put(objekt2,10,253,256); 
    put(objekt2,11,258,218); 
    put(objekt2,12,279,204); 
    put(objekt2,13,292,207); 
    put(objekt2,14,293,191); 
    put(objekt2,15,297,196);
END;

PROCEDURE zeichne_bild;

{Stellt das berechnete Morphobjekt dar, welches in 
 "objekt.3" gespeichert ist}

VAR a, m, x: INTEGER;
BEGIN
    CLEARDEVICE;
    MOVETO(TRUNC(objekt3[1].x),TRUNC(objekt3[1].y));
    FOR a:=2 TO ecken DO BEGIN
        LINETO(TRUNC(objekt3[a].x),TRUNC(objekt3[a].y)); 
    END;
END;

PROCEDURE morph;

{Morpht ein Objekt ("objekt1") in ein anderes ("objket2").
 Die Morphobjekte ("objekt3") werden durch Aufruf von 
 "zeichne_bild" ausgegeben}

VAR ecke,k:INTEGER;
    s:REAL;
BEGIN 
    s:=0;
    FOR k:=1 TO ecken DO objekt3[k]:=objekt1[k]; {0bjekt3 Start-Koordinaten zuweisen}
    WHILE s<1-morph_faktor DO BEGIN 
        s:=s+morph_faktor;
        FOR ecke:=1 TO ecken {Für alle Ecken des Objektes}
        DO BEGIN
            objekt3[ecke].x:=objekt3[ecke].x+morph_faktor*(objekt2[ecke].x-objekt1[ecke].x);
            objekt3[ecke].y:=objekt3[ecke].y+morph_faktor*(objekt2[ecke].y-objekt1[ecke].y);
        END;
        zeichne_bild;
    END;
END;
BEGIN
    CLRSCR;
    DETECTGRAPH(driver, mode);
    IF driver=VDI THEN BEGIN
        INITGRAPH(driver,mode,'F:\PPASCAL'); {Datei VDI.BGI}
        ende:=FALSE;
        WHILE NOT ende DO BEGIN 
            setze_objekt; 
            morph;
            setze_objekt; 
            objekt3:=objekt1; 
            objekt1:=objekt2; 
            objekt2:=objekt3; 
            morph;
            GOTOXY(1, 1);
            WRITELN('Nochmal? (J/N)');
            READLN(antwort);
            IF UPCASE(antwort)='N' THEN ende:=TRUE 
        END;
        CLOSEGRAPH;
    END;
END.

Daniel Tauschke
Aus: ST-Computer 09 / 1994, Seite 84

Links

Copyright-Bestimmungen: siehe Über diese Seite