home *** CD-ROM | disk | FTP | other *** search
- ┌───────────────────────────────────────────────────────────────────────────┐
- │ │
- │ Algorithmen zur grafischen Darstellung einer Funktion z = F(x,y). │
- │ │
- │ Version 1.0 │
- │ │
- ├───────────────────────────────────────────────────────────────────────────┤
- │ Copyright (C) 1991, Hans-Jürgen Herrler und Dieter Sosna │
- └───────────────────────────────────────────────────────────────────────────┘
-
-
- B E S C H R E I B U N G
- =======================
-
- In der Unit PLOT sind einige schnelle Algorithmen zur grafischen Darstellung
- von Funktionen zweier Veränderlicher implementiert. Diese können leicht in
- eigene Programme eingebunden werden. Durch die Verfügbarkeit des Quelltextes
- ist eine Anpassung an spezielle Bedürfnisse möglich.
-
- Die Unit PLOT ist unter Turbo Pascal ab Version 5.5 nutzbar (mit unbedeutenden
- Änderungen schon ab Version 4.0). Sollen auch Veränderungen an den Assembler-
- Routinen erfolgen, wird zusätzlich ein Assembler benötigt: z.B. Turbo
- Assembler 2.0.
-
- Hinweise zur Weitergabe und zur Nutzung der Software werden in der Datei
- COPYRIGT.TXT gegeben.
-
-
- Allgemeines zur Nutzung
- =======================
-
- Die Funktionswerte der darzustellenden Funktion z = F(x,y) müssen über einem
- äquidistanten Gitter (Stützstellen) berechnet und zeilenweise in einer Matrix
- abgelegt worden sein. Der Routine zur grafischen Darstellung wird nur ein
- Zeiger auf das erste Element der Matrix übergeben. So kann sich die Matrix an
- beliebiger Stelle im Speicher befinden. Es ist wichtig, daß die einzelnen
- Zeilen der Matrix lückenlos aufeinanderfolgen - auch bei einer Ablage der
- Matrix auf dem Heap! Andernfalls sind Änderungen an der Zeiger-Arithmetik
- erforderlich. Die Funktionswerte selbst sind vom Typ Float - definiert in der
- Unit PLOT. Der Typ Float kann den jeweiligen Erfordernissen angepaßt werden.
-
- Im Kopf der Unit PLOT ist die Direktive "ALPHA-" zur bedingten Compilierung
- definiert. Dies bewirkt, daß bei den Darstellungen AlphaScheibenPerspektive
- und GitterFlaechenPerspektive (die beide auf dem modifizierten Alpha-Puffer-
- Algorithmus beruhen) in der Prozedur AlphaPunktSetzen (ALPHA-.ASM bzw.
- ALPHA-.OBJ) nicht überprüft wird, ob sich die Koordinaten des gerade be-
- arbeiteten Pixels innerhalb der Grenzen des Bildschirmes befinden:
-
- 0 <= x <= GetMaxX, 0 <= y <= GetMaxY.
-
- Diese Prüfung erübrigt sich in den meisten Fällen, da sich die Prozedur
- AlphaPunktSetzen auf Graph.PutPixel abstützt, wobei sowieso ein Clippen am
- eingestellten ViewPort erfolgt. Für spezielle Fälle ist aber auch eine Version
- von AlphaPunktSetzen vorhanden, die diesen Test selbst vollzieht: aktiviert
- durch Löschen der Compilerdirektive "ALPHA-" wird dann ALPHA.OBJ eingebunden.
-
-
- Routinen zur grafischen Darstellung
- ===================================
-
- VolumenPerspektive(VAR Matrix; MatrixParm: MatrixParameter;
- BildParm: BildParameter; UseHeap: Boolean)
-
- AlphaScheibenPerspektive(VAR Matrix; MatrixParm: MatrixParameter;
- BildParm: BildParameter)
-
- GitterFlaechenPerspektive(VAR Matrix; MatrixParm: MatrixParameter;
- BildParm: BildParameter; UseHeap: Boolean)
-
-
- Übergabeparameter
- =================
-
- Parameter Matrix:
- Darzustellende Funktionswerte (VAR-Parameter).
-
- Record MatrixParm:
- Enthält die Zeilen- (XGitter) und Spaltenzahl (YGitter) der Matrix sowie
- den kleinsten (ZMin) und größten (ZMax) Funktionswert.
-
- Record BildParm:
- Enthält die Beschreibung des zu erzeugenden Bildes, also den Bildschirm-
- ausschnitt (SchirmLinks, SchirmRechts, SchirmOben, SchirmUnten), Farben
- (Color...), Betrachtungswinkel (Alpha, Gamma), Projektionsart und davon
- abhängig den Betrachtungsabstand und die Brennweite bei Zentralprojektion
- bzw. an deren Stelle das Verhältnis "BrennweiteZuAbstand" bei Parallel-
- projektion.
-
- Jene Darstellungen, die ein Gitter auf der Fläche erzeugen, können beschleu-
- nigt werden, wenn vorab alle Stützstellen auf Gerätekoordinaten transformiert
- werden. Dazu ist für den zusätzlichen Parameter UseHeap True zu übergeben. Es
- wird daraufhin geprüft, ob auf dem Heap Platz für eine temporäre Matrix ist
- und gegebenenfalls die Transformation ausgeführt. Danach wird der Platz auf
- dem Heap wieder freigegeben. Ist nicht ausreichend Platz vorhanden oder
- UseHeap = False, so wird ohne eine Vorab-Transformation gezeichnet.
-
- Es gelten folgende Einschränkungen für die Parameter, die jeder Nutzer vor der
- Übergabe selbst überprüfen muß:
-
- 2 <= XGitter <= MaxGitter
- 2 <= YGitter <= MaxGitter
-
- 0 <= SchirmLinks < SchirmRechts <= 1
- 0 <= SchirmOben < SchirmUnten <= 1
-
- -180 <= Alpha <= 180
- -90 <= Gamma <= 90
- (bei AlphaScheibenPerspektive nur 0 <= Gamma <= 90)
-
- Sinnvoll sind folgende Werte:
-
- 20 <= Brennweite <= 60
- 200 <= Abstand <= 4000
- BrennweiteZuAbstand etwa 0.1
-
- Beim Experimentieren mit Brennweite und Abstand kann man sich an üblichen
- Werten aus der Kleinbildfotografie orientieren.
-
- Der Wert Alpha = 0 entspricht einer Lage der x-Achse parallel zur Bildschirm-
- ebene mit wachsenden Werten nach rechts, während die y-Achse senkrecht auf der
- Bildschirmebene steht und vom Betrachter weg weist. Eine Vergrößerung von
- Alpha dreht die x-Achse aus der Bildschirmebene zum Betrachter hin.
-
- Bei der Wahl der Projektionsart Zentralprojektion ist zu beachten, daß nur die
- VolumenPerspektive fehlerfreie Bilder garantiert. AlphaScheibenPerspektive und
- GitterFlaechenPerspektive können bei Zentralprojektion zu Bildfehlern führen!
-
-
- Zugriff auf die Matrix der Funktionswerte
- =========================================
-
- Weiterhin wird eine Funktion zum Zugriff auf die Matrixelemente bereit-
- gestellt, die insbesondere bei Ablage der Matrix auf dem Heap nützlich ist:
-
- FUNCTION Element(P: Pointer; i, j, SpaltenLen: Word): FloatPointer;
-
- Ihre Argumente sind:
-
- P ein Zeiger auf das erste Matrixelement
- i Zeilennummer des Matrixelementes
- j Spaltennummer des Matrixelementes
- SpaltenLen Zahl der Matrixelemente in einer Zeile ( = XGitter)
-
- Die Funktion liefert dann einen Zeiger auf das gesuchte Element.
-
-
- Liste der zugehörigen Dateien
- =============================
-
- COPYRIGT.TXT Benutzerlizenz.
-
- PLOT.DOC Diese Beschreibung.
-
- PLOT.PAS Enthält Quelltext der Algorithmen zur grafischen
- Darstellung (Unit).
-
- ALPHA.ASM Assembler-Quelltext einiger Routinen aus PLOT.PAS,
- Version mit Bereichsprüfung.
- ALPHA.OBJ Zugehöriges Objektfile.
-
- ALPHA-.ASM Assembler-Quelltext einiger Routinen aus PLOT.PAS,
- Version ohne Bereichsprüfung.
- ALPHA-.OBJ Zugehöriges Objektfile.
-
- ZEIGER.ASM Assembler-Quelltext einiger Routinen zur Pointer-
- Arithmetik aus PLOT.PAS.
- ZEIGER.OBJ Zugehöriges Objektfile.
-
- EXAMPLE.PAS Quelltext des Beispielprogramms.
- EXAMPLE.EXE Lauffähiges Beispielprogramm.
- EXAMPLE7.EXE Lauffähiges Beispielprogramm (Version für 80x87).