Pfeile


%!PS-Adobe-1.0
%%Creator: Holger Gehringer
%%Title: Beispiel fuer Pfeile
%%CreationDate: Mo, 23.11.1998
%%DocumentMedia: A4 595 842 0 () ()
%%Orientation: Portrait
%%Pages: (atend)
%%DocumentFonts: Times-Roman Helvetica
%%EndComments

% In diesem Programm wird eine Prozedur entwickelt, mit der verschiedene Arten
% von geraden Pfeilen gezeichnet werden koennen.

/Arrowdict 13 dict def           % Dieses Dictionary bietet lokalen Speicher
                                 % fuer die Prozedur 'Arrow'

/Arrow                           % Die Prozedur 'Arrow' fuegt einen Pfeil-Umriss
                                 % an den aktuellen Pfad an.
{ Arrowdict begin                % Sieben Parameter werden benoetigt:
    /Headlength exch def         % die Laenge des Pfeilkopfes
    /Halfheadthickness           % die (halbe) Breite des Pfeilkopfes an seiner
    exch 2 div def               % breitesten Stelle
    /Halfthickness               % die (halbe) Breite des Pfeilschwanzes
    exch 2 div def
    /Tipy exch def               % die y-Koordinate der Spitze
    /Tipx exch def               % die x-Koordinate der Spitze
    /Taily exch def              % die y-Koordinate des Pfeilschwanzes (der 
                                 % Stelle, an der die Symmetrieachse das Pfeil-
                                 % ende schneidet).
    /Tailx exch def              % die y-Koordinate des Pfeilschwanzes

    /Dx Tipx Tailx sub def       % Mit Hilfe der Differenzen der x- und y-Koord.
    /Dy Tipy Taily sub def       % wird errechnet:
    /Arrowlength Dx Dx mul       % die Pfeillaenge und
    Dy Dy mul add sqrt def
    /Angle Dy Dx atan def        % der Winkel zum aktuellen Benutzerkoord.s.
    /Base Arrowlength            % Bei 'base' treffen Pfeilschwanz und -kopf
    Headlength sub def           % aufeinander.
    /Savematrix                  % Wie in Programm 3 wird das aktuelle Koord.s.
    matrix currentmatrix def     % gespeichert, damit spaeter die Trafos wieder
                                 % rueckgaengig gemacht werden koennen.
    Tailx Taily translate        % Ko.s. zum Startpunkt des Pfeils verschieben
    Angle rotate                 % und so rotieren, dass die Symmetrieachse des
                                 % Pfeils auf der x-Achse liegt.
    0 Halfthickness neg moveto   % Umrisse des Pfeils werden konstruiert
    Base Halfthickness neg
    lineto
    Base Halfheadthickness neg
    lineto
    Arrowlength 0 lineto
    Base Halfheadthickness lineto
    Base Halfthickness lineto
    0 Halfthickness lineto
    closepath
    
    Savematrix setmatrix         % Alle Transformationen rueckgaengig machen
  end                            % Entfernt 'Arrowdict' vom Dictionary-Stack
} def

%%EndProlog

%%Page: 1 1
newpath                          % Schwarzer duenner Pfeil mit einem langen
318 340 72 340 10 30 72 Arrow    % Schwanz
fill

newpath                          % Pfeil mit einem 90 Grad Winkel an der Spitze.
382 400 542 560 72               % Um dies zu erreichen, wird der Kopf doppelt
232 116 Arrow                    % so breit wie lang gemacht.
3 setlinewidth stroke

newpath                          % Fuer einen Pfeil, der ein gleichseitiges
400 300 400 90 90 200            % Dreieck als Spitze hat, errechnet sich die
200 3 sqrt mul 2 div             % Kopflaenge als Wurzel aus 3 dividiert durch
Arrow                            % die doppelte Kopfbreite.
.65 setgray fill

showpage

%%Trailer
%%Pages: 1


Vorschau:

Download PostScript-File

© Holger Gehringer, Dezember 1998