Grafik mit Turbo Pascal

Software-Entwicklung, Compiler, Interpreter, ...
Benutzeravatar
bbock
Beiträge: 44
Registriert: 08.02.2015, 15:31

Re: Grafik mit Turbo Pascal

Beitrag von bbock » 04.11.2017, 21:05

Das nächste Programm erzeugt einen 3D-Funktionsplot mit einer Technik, die "hidden surface" genannt wird. Die auf Werner Cirsovius' Seiten dargestellte Lösung habe ich mit unserem Grafikkern lauffähig gemacht und in der Funktionsweise etwas abgewandelt: Die erzeugte Grafik wird nicht sofort gedruckt, sondern in eine Bilddatei gespeichert. Mit einem separaten Programm kann diese Datei dann später wieder geladen und mit verschiedenen Optionen gedruckt werden. Diese Vorgehensweise erspart die wiederkehrende aufwändige Neuberechnung der Grafik.
Um den Code kürzer zu halten, wurde KERNEL.INC etwas gekürzt und der point_array in GRAPHLIB.INC auf fünf Elemente beschränkt (mehr brauchen wir für DREID.PAS nicht). Das Programm sollte aus Platzgründen direkt als COM-Datei kompiliert werden (in Turbo Pascal O für Options, dann C für COM-file und Q für Quit).

Die Datei Grafik6.zip enthält die Programme DREID.PAS und PRTSCRN.PAS zum Erzeugen und Drucken der Grafik.

DREID
Wenn das COM-Programm von Diskette gestartet wird, erscheint ein kleines Menü. Mit der Taste B kann die Grafik berechnet werden (hier ist ein wenig Geduld erforderlich). Vor der eigentlichen Berechnung wird noch der Dateiname abgefragt, unter dem die Grafik gespeichert werden soll. Die Endung .PIC wird automatisch angehängt, und der Dateiname wird in Großbuchstaben umgewandelt. Jetzt muss man nur noch eine Taste drücken und die Berechnung der Grafik beginnt. Zuerst werden die Funktionswerte berechnet; währenddessen ist noch nicht viel zu sehen.
Für die Grafikausgabe müssen noch zwei Winkel alpha und beta eingegeben werden. Schöne Ergebnisse erzielt man z.B. mit alpha = 20 und beta = 32 (Angaben in Grad). Dann beginnt das Zeichnen der Grafik auf dem Bildschirm. Das ist schön anzuschauen, wenn ihr mich fragt.

PRTSCRN
Der Dateiname ist eine Abkürzung für "print screen", und das ist die Hauptfunktion des Programms: es lädt eine Bildschirmdatei, zeigt sie an und druckt sie bei Bedarf.
Die Menüfunktionen sind:
A - Nur anzeigen, nicht drucken
S - Schmal drucken
H - Hoch drucken
F - Fett drucken
X - Ende
Zuerst solltet ihr S ausprobieren. Bei H und F wird der Ausdruck doppelt so hoch (bei H normal und bei F fett gedruckt). Da die Pixel auf dem Bildschirm und auf dem Drucker eine unterschiedliche Form haben, ist das Seitenverhältnis des Ausdrucks anders als auf dem Bildschirm. Für eine exakte Abbildung müsste ein Resampling der Pixeldaten mit ascpect ratio Anpassung durchgeführt werden - das kann das Druckprogramm nicht. Das tut der Schönheit des Ausdrucks aber keinen Abbruch.
Grafik6.zip
DREID und PRTSCRN
(7.62 KiB) 3-mal heruntergeladen

Benutzeravatar
bbock
Beiträge: 44
Registriert: 08.02.2015, 15:31

Re: Grafik mit Turbo Pascal

Beitrag von bbock » 11.11.2017, 18:30

Das Programm DREID hat seine eigene - in PRTSCRN ausgelagerte - Druckfunktion. In unserer Sammlung an Include-Dateien gibt es aber auch noch HARDCOPY.INC, und auch damit lassen sich schöne Ausdrucke produzieren. Optionen für doppelte Höhe oder Fettdruck haben wir zwar nicht, aber man kann die Grafik horizontal oder vertikal ausdrucken.
Die Hardcopy-Funktion kann Grafiken auch in unterschiedlichen Größen ausdrucken, d.h. mit doppelter, vierfacher oder achtfacher Vergrößerung. Das geht aber nur, wenn die Grafik dann nicht zu groß wird, d.h. die max. 960 Pixel pro Druckzeile nicht übersteigt. Da wir den kompletten Bildschirminhalt mit 720 Pixeln Breite ausdrucken wollen, bleibt uns nur die einfache Größe.
Das Programm PRTSCRN2 befindet sich zusammen mit den benötigten Include-Dateien in Grafik7.zip.
Grafik7.zip
PRTSCRN2
(4.32 KiB) 3-mal heruntergeladen

Paul
Beiträge: 9
Registriert: 17.09.2017, 22:27

Re: Grafik mit Turbo Pascal

Beitrag von Paul » 19.11.2017, 07:36

Ich habe alles verschlafen!!!
Ich werde schnellstmöglich hier mitposten.
Bis bald
Paul

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast