Anhang A Die Quell-Dateien
- Plotter.pl
- Das Modul für Koordinatensysteme
- Modul zur Erzeugung von Dateien
- Das Modul für Diagramme
- Das Modul für dreidimensionale Zeichungen
- Das Modul für Funktionen
- Das Modul für den Funktionsparser
- Das Modul für Gitter
- Das Modul für Graphen
- Das Modul für Tupel
- Das Modul für Zeichenroutinen
- Das Modul für Grafiken
- Die Spielfeld-Module
Im Folgenden finden sich die gesamten Perl-Dateien. Dabei handelt es sich nicht immer um den saubersten Code, da dies Skript ein lange gewachsenes Projekt ist. Mittlerweile würde ich einiges anders programmieren, aber dazu fehlt mir die Zeit, sodass einiges nur schnelle Lösungen sind und mit Sicherheit auch noch einige Fehler enthält.
A.1 Plotter.pl
Hier die Hauptdatei plotter.pl zum Einlesen meiner Dateien.
plotter-pl.pl |
---|
1 #!/usr/bin/perl -w 2 ################################################################## 3 # Funktionsplotter Skript zum erstellen von Grafiken in Pstricks 4 # Copyright (C) 2008 Xenia Rendtel 5 # 6 # Letzte Änderung: 12.01.2012 7 # 8 # Dieses Programm ist freie Software. Sie können es unter den Bedingungen der 9 # GNU General Public License, wie von der Free Software Foundation 10 # veroeffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 2 11 # der Lizenz oder (nach Ihrer Option) jeder spaeteren Version. 12 # 13 # Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es Ihnen 14 # von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die implizite 15 # Garantie der MARKTREIFE oder der VERWENDBARKEIT 16 # ZWECK. Details finden Sie in der GNU General Public License. 17 # 18 # Sie sollten ein Exemplar der GNU General Public License zusammen mit diesem 19 # Programm erhalten haben. Falls nicht, schreiben Sie an die Free Software 20 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA. 21 # 22 # Bei Fehlern schreiben Sie diese einfach an 23 # webmaster@rendtel.de 24 ################################################################## 25 ###Weitere Pakete 26 use Math::Trig; 27 use strict; 28 use warnings; 29 use FindBin; 30 31 use lib "$FindBin::Bin"; 32 use lib '/home/xenia/Schule/Programme/Plotter'; 33 use funktionen; 34 use funktionsparser; 35 36 #use Image::Magick; #ImageMagick muss hierfuer installiert werden 37 use Image::Size; 38 use Image::ExifTool; 39 40 use bildbearbeitung; 41 use dateierzeugen; 42 use gitter; 43 use achsen; 44 use graphen; 45 use uhr; 46 use knoten; 47 use regression; 48 49 #use baum; # Muss noch bearbeitet werden 50 51 use zeichnen; 52 use paar; 53 use diagramme; 54 use dreidimensional; 55 56 my ( 57 $hoeheersatz, $kommandodatei, $texdatei, $i, 58 $j, $zeile, $farbverlauf, $farbverlauf2, 59 $zeilei, $zeilej, $layer, $linienstaerke, 60 $linienart, $farbe, $fuellart, $fuellfarbe, 61 $text, $radius, $winkel, $linienstaerkeersatz, 62 $linienartersatz, $farbeersatz, $fuellartersatz, $fuellfarbeersatz, 63 $textersatz, $radiusersatz, $winkelersatz, $breite, 64 $hoehe, $skala, $func, $nullwert, 65 $plotart, $aufsummiert, $markierung, $abstandx, 66 $dickx, $ganzdickx, $abstandy, $dicky, 67 $ganzdicky, $xmin, $xmax, $dx, 68 $ymin, $ymax, $dy, $abstand, 69 $xlaenge, $xschritt, $xskala, $xtext, 70 $x, $yschritt, $ylaenge, $yskala, 71 $ytext, $y, $ersatzvektor, $pfeil, 72 $breiteknick, $bild, $nwert, $pwert, 73 $skalierungpunkt, $punktzeichnen, $punktart, $endeerreicht, 74 $hilfszeile, $inzeile, $absolutwert, $merkei, 75 $winkelstart, $laenge, $datei, $schachtelung, 76 $summen, $func1, $func2, $func3, 77 $schnittpunkte, $linie, $x1, $x2, 78 $y1, $y2, $verbunden, $ausrichtung, 79 $dxersatz, $abstandersatz, $textwinkelersatz, $textausrichtungersatz, 80 $wert, $dyersatz, $l1, $w1, 81 $l2, $w2, $l3, $w3, 82 $l4, $pfeillaenge, $w4, $l5, 83 $w5, $l6, $w6, $radius1, 84 $radius2, $winkel1, $winkel2, $pfeilart, 85 $leer, $eingabedateizeilen, @eingabedatei, @ausgabedatei, 86 @ausgabedateizeilen, $kommandodateinummer, $startwinkel, $x3, 87 $y3, $dicke, $dickeersatz, $polygonzeichnen, 88 $anfang, $ende, $winkelrichtung, $z, 89 $z1, $z2, $z3, $alpha, 90 $beta, $coor, $pstricks, $abstandz, 91 $dickz, $ganzdickz, $zmin, $zmax, 92 $ztext, $zschritt, $parameter, $tmin, 93 $tmax, $umin, $umax, $parameterersatz, 94 $x4, $y4, $z4, $r1, 95 $r2, $r3, $c, $d, 96 $a, $b, $r4, $n, 97 $r, $abgeschnitten, $r5, $offset, 98 $r6, $xbruch, $rad, $bezeichnung, 99 $variable, $schritt, $spalten, $kopf, 100 $nachkommastellen, $textwinkel, $geschlossen, $textausrichtung, 101 $name, $anzahl, $breiteersatz, $abstandxersatz, 102 $abstandyersatz, $grad, $absolut, $datenlesenstatus, 103 $einlesen, $n1, $n2, $stunde, 104 $minute, $sekunde, $art, $groesse, 105 $name1, $name2, $parameter1, $parameter2 106 ); 107 108 my $pstricksersatz3d; 109 my $pstricksersatz; 110 111 112 $absolut = 1; 113 $datenlesenstatus = $einlesen = 0; 114 115 # Arrays und Layer 116 $eingabedateizeilen = 0; 117 @ausgabedatei = (); 118 @ausgabedateizeilen = (); 119 $kommandodateinummer = 0; 120 for ( $i = 0 ; $i <= 150 ; $i++ ) { $ausgabedateizeilen[$i] = 0; } 121 setskalierung( 1, "x" ); 122 setskalierung( 1, "y" ); 123 setschnitt( 0, "x" ); 124 setschnitt( 0, "y" ); 125 setskala( "normal", "x" ); 126 setskala( "normal", "y" ); 127 setfarbe("black"); 128 setfuellart(""); 129 setpfeilart(""); 130 setfuellfarbe("black!20"); 131 setlinienstaerke(1); 132 setlinienart("solid"); 133 setmarkierung( "\$x\$", "x" ); 134 setmarkierung( "\$y\$", "y" ); 135 setmarkierung( "\$z\$", "z" ); 136 setachsenzeichnen( 0, "x" ); 137 setachsenzeichnen( 0, "y" ); 138 $datei = 0; 139 setextern(0); 140 $farbverlauf = 0; 141 142 # Die Eingabedatei wird gelesen 143 144 sub standard { 145 my ( $layer1, $linienart1, $linienstaerke1, $farbe1, $fuellart1, $fuellfarbe1, $pfeilart1, 146 $parameter1 ) 147 = @_; 148 $layer = $layer1; 149 $linienart = $linienart1; 150 $linienstaerke = $linienstaerke1; 151 $farbe = $farbe1; 152 $fuellart = $fuellart1; 153 $fuellfarbe = $fuellfarbe1; 154 $pfeilart = $pfeilart1; 155 $parameter = $parameter1; 156 157 } 158 159 sub leseeingabedatei { 160 my $dateiname = shift(@_); 161 my $zeile; 162 open( my $EINGABEDATEI, $dateiname ) || die $dateiname . ": $!"; 163 while ( $zeile = <$EINGABEDATEI> ) { 164 165 # Zeilenenden beseitigen, Kommentare und Leerzeilen ignorieren 166 $zeile =~ s/[\r\n]//g; 167 $zeile =~ s/ +/ /g; 168 $zeile =~ s/ +$//g; 169 $zeile =~ s/^ +//g; 170 next if ( $zeile =~ /^\#/ ); 171 next if ( $zeile =~ /^$/ ); 172 if ( $zeile =~ /^lesedatei (.*)$/i ) { leseeingabedatei($1); } 173 elsif ( $zeile =~ /^fileplot (.*)$/i ) { 174 $einlesen = 1; 175 $eingabedatei[$eingabedateizeilen] = $zeile; 176 $eingabedateizeilen++; 177 } 178 elsif ( $zeile =~ /^listplot (.*)$/i ) { 179 $einlesen = 1; 180 $eingabedatei[$eingabedateizeilen] = $zeile; 181 $eingabedateizeilen++; 182 } 183 184 elsif ( $zeile =~ /^regression (.*)$/i ) { 185 $einlesen = 1; 186 $eingabedatei[$eingabedateizeilen] = $zeile; 187 $eingabedateizeilen++; 188 } 189 190 elsif ( $zeile =~ /^lese (.*)$/i ) { 191 if ( $einlesen == 0 ) { leseeingabedatei($1); } 192 else { 193 $eingabedatei[$eingabedateizeilen] = $zeile; 194 $eingabedateizeilen++; 195 } 196 } 197 elsif ( $zeile =~ /^ende (.*)$/i ) { 198 $einlesen = 0; 199 $eingabedatei[$eingabedateizeilen] = $zeile; 200 $eingabedateizeilen++; 201 } 202 203 else { 204 205 #Einzelne Zeilen in ein Array speichern 206 $eingabedatei[$eingabedateizeilen] = $zeile; 207 $eingabedateizeilen++; 208 } 209 } 210 close($EINGABEDATEI); 211 } 212 213 # In ein array wird geschrieben 214 sub schreibeinarray { 215 my ( $layer, $zeile ) = @_; 216 $zeile =~ s/, ]/]/; 217 $zeile =~ s/, ]/]/; 218 $zeile =~ s/,]/]/; 219 $zeile =~ s/ / /; 220 $zeile =~ s/ / /; 221 $ausgabedatei[$layer][ $ausgabedateizeilen[$layer] ] = $zeile; 222 $ausgabedateizeilen[$layer]++; 223 224 } 225 226 ### Funktionen fuer das Plotterskript 227 sub kopfdatei { 228 229 kommentar( 101, "Autor: X. Rendtel" ); 230 kommentar( 101, "Letzte Aenderung: 2011 \n" ); 231 232 if ( getkopf() == 1 ) { 233 schreibeinarray( 103, sprintf("\\documentclass{ttctexa}") ); 234 schreibeinarray( 103, sprintf("\\setlength\\parindent{0pt}") ); 235 schreibeinarray( 103, sprintf("\\StartShownPreambleCommands") ); 236 schreibeinarray( 105, sprintf("\\StopShownPreambleCommands") ); 237 usepackage( "", 238 "pstricks,pst-pdf,pst-node,xcolor,pst-circ,pst-func,pst-math,pstricks-add" ); 239 usepackage( "utf8x", "inputenc" ); 240 usepackage( "LGR,T1", "fontenc" ); 241 242 pstricks( 110, "\\pagestyle{empty} \n \\begin{document} " ); 243 } 244 my $parameterweiter = 245 "dotstyle=*, plotpoints=1000, dotsize=3pt, arrowsize=3pt 2, arrowinset=0.25,"; 246 247 if ( get3dpstricks() == 1 ) { 248 249 pstricks( 109, "\\makeatletter" ); 250 pstricks( 109, "\\def\\psxyzlabel\#1{\\small\\expandafter\\\@stripDecimals\#1..\\\@nil}" ); 251 pstricks( 109, "\\makeatother" ); 252 253 usepackage( "", "pst-gr3d,pst-3dplot,pst-ob3d" ); 254 255 $parameterweiter = 256 $parameterweiter 257 . "Alpha=" 258 . get3dwinkel("alpha") 259 . ", Beta=" 260 . get3dwinkel("beta") 261 . ", coorType=" 262 . get3dkoor() 263 . ", xThreeDunit=" 264 . getskalierung("x") 265 . ", yThreeDunit=" 266 . getskalierung("y") 267 . ", zThreeDunit=" 268 . getskalierung("z"); 269 } 270 else { 271 $parameterweiter = 272 $parameterweiter 273 . " xunit=" 274 . getskalierung("x") 275 . "cm, yunit=" 276 . getskalierung("y") . "cm"; 277 } 278 279 einstellungenkopf( 110, getfarbe(), getfuellart(), getfuellfarbe(), getlinienart(), 280 getlinienstaerke(), $parameterweiter ); 281 beginpicture(111); 282 283 } 284 285 sub fussdatei { 286 endpicture(100); 287 if ( getkopf() == 1 ) { pstricks( 100, "\\end{document}" ); } 288 } 289 290 ### Einlesen der Datei 291 while ( exists $ARGV[$kommandodateinummer] ) { 292 $kommandodatei = $ARGV[$kommandodateinummer]; 293 $texdatei = $kommandodatei; 294 $texdatei =~ s/\.ptxt$//i; 295 $texdatei = $texdatei . " . xtex "; 296 $kommandodateinummer++; 297 $eingabedateizeilen = 0; 298 leseeingabedatei($kommandodatei); 299 for ( $j = 0 ; $j < $eingabedateizeilen ; $j++ ) { 300 301 for ( $i = $j ; $i <= $j ; $i++ ) { 302 $zeile = $eingabedatei[$i]; 303 if ( $zeile =~ /^gitter$/i ) { setgitter(1); } 304 elsif ( $zeile =~ /^matheheft$/i ) { setmatheheft(1); } 305 elsif ( $zeile =~ /^knoten$/i ) { setknoten(1); } 306 elsif ( $zeile =~ /^farbverlauf$/i ) { $farbverlauf = 1; } 307 elsif ( $zeile =~ /^text$/i ) { setbeschriftung(1); } 308 elsif ( $zeile =~ /^punkt$/i ) { setpunkt(1); } 309 elsif ( $zeile =~ /^relativ$/i ) { setrelativ(); } 310 elsif ( $zeile =~ /^mitte$/i ) { setmitte(1); } 311 elsif ( $zeile =~ /^hypothenuse$/i ) { sethyp(1); } 312 elsif ( $zeile =~ /^ohnekopf$/i ) { setkopf(0); } 313 elsif ( $zeile =~ /^schriftgroesse ([0-9]+)$/i ) { 314 setschriftgroesse($1); 315 } 316 elsif ( $zeile =~ /^beschriftunggroesse \"([^\"]*)\"$/i ) { 317 setbeschriftunggroesse($1); 318 } 319 elsif ( $zeile =~ /^ticks ([0-9]+)$/i ) { setsubticks($1); } 320 elsif ( $zeile =~ 321 /^grenzen x=([-0-9\.]+),([-0-9\.]+) y=([-0-9\.]+),([-0-9\.]+)( z=([-0-9\.]+),([-0-9\.]+))?$/i 322 ) 323 { 324 minmax( $1, $3, $2, $4 ); 325 setachsengraph( $1, $3, $2, $4 ); 326 if ( defined $5 ) { 327 minmax3d( $1 - 1, $3 - 1, $6 - 1, $2 + 1, $4 + 1, $7 + 1 ); 328 } 329 } 330 elsif ( $zeile =~ /^achsen$/i ) { 331 setachsen(1); 332 $hilfszeile = $eingabedatei[$i]; 333 $endeerreicht = 0; 334 while (( !$endeerreicht ) 335 && ( $i < $eingabedateizeilen - 1 ) ) 336 { 337 $i++; 338 $hilfszeile = $eingabedatei[$i]; 339 if ( $hilfszeile =~ /^gitter$/i ) { 340 $endeerreicht = 1; 341 setgitter(1); 342 } 343 else { $endeerreicht = 1; } 344 } 345 346 } 347 } 348 } 349 350 for ( $i = 0 ; $i < $eingabedateizeilen ; $i++ ) { 351 $zeile = $eingabedatei[$i]; 352 353 # Befehl " skalierung " 354 if ( $zeile =~ /^skalierung ([0-9\.]+)$/i ) { 355 skalierungsetzen( $1, "x" ); 356 skalierungsetzen( $1, "y" ); 357 skalierungsetzen( $1, "z" ); 358 } 359 360 elsif ( $zeile =~ /^skalierung( x=([0-9\.]+))?( y=([0-9\.]+))?( z=([0-9\.]+))?$/i ) { 361 skalierungsetzen( $2, "x" ) if ( defined $1 ); 362 skalierungsetzen( $4, "y" ) if ( defined $3 ); 363 skalierungsetzen( $6, "z" ) if ( defined $5 ); 364 } 365 elsif ( $zeile =~ /^ticks ([0-9]+)$/i ) { setsubticks( $1 + 1 ); } 366 elsif ( $zeile =~ /^pfeile ([^\"]*)$/i ) { setpfeilart($1); } 367 elsif ( 368 $zeile =~ /^achsenmarkierung( x=\"([^\"]*)\")?( y=\"([^\"]*)\")?( z=\"([^\"]*)\")?$/i ) 369 { 370 setmarkierung( $2, "x" ) if ( defined $1 ); 371 setmarkierung( $4, "y" ) if ( defined $3 ); 372 setmarkierung( $6, "z" ) if ( defined $5 ); 373 } 374 375 elsif ( $zeile =~ /^gitter$/i ) { } 376 elsif ( $zeile =~ /^achsen$/i ) { } 377 elsif ( $zeile =~ /^knoten$/i ) { } 378 elsif ( $zeile =~ /^farbverlauf$/i ) { } 379 elsif ( $zeile =~ /^text$/i ) { } 380 elsif ( $zeile =~ /^punkt$/i ) { } 381 elsif ( $zeile =~ /^relativ$/i ) { } 382 elsif ( $zeile =~ /^mitte$/i ) { } 383 elsif ( $zeile =~ /^ohnekopf$/i ) { } 384 elsif ( $zeile =~ /^schriftgroesse ([0-9]+)$/i ) { } 385 elsif ( $zeile =~ /^beschriftunggroesse \"([^\"]*)\"$/i ) { } 386 elsif ( $zeile =~ 387 /^grenzen x=([-0-9\.]+),([-0-9\.]+) y=([-0-9\.]+),([-0-9\.]+)( z=([-0-9\.]+),([-0-9\.]+))?$/i 388 ) 389 { 390 minmax( $1, $3, $2, $4 ); 391 if ( defined $5 ) { 392 minmax3d( $1 - 1, $3 - 1, $6 - 1, $2 + 1, $4 + 1, $7 + 1 ); 393 } 394 } 395 396 # Achsen fuer Diagramme setzen 397 398 elsif ( $zeile =~ /^neuesbild( layer=([0-9]+))?$/i ) { 399 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 400 "" ); 401 $layer = $2 if ( defined $1 ); 402 endpicture($layer); 403 abstand($layer); 404 abstand($layer); 405 pstricks( $layer, "\\newpage" ); 406 abstand($layer); 407 beginpicture($layer); 408 setgitterbild($layer); 409 setachsenbild($layer); 410 411 } 412 413 elsif ( $zeile =~ /^groesse( x=([0-9\.]+))?( y=([0-9\.]+))?( z=([0-9\.]+))?$/i ) { 414 setgross(1); 415 setgroesse( $2, "x" ) if ( defined $1 ); 416 setgroesse( $4, "y" ) if ( defined $3 ); 417 setgroesse( $6, "z" ) if ( defined $5 ); 418 } 419 420 # Grenzen setzen 421 422 elsif ( $zeile =~ 423 /^grenzengitter x=([-0-9\.]+),([-0-9\.]+) y=([-0-9\.]+),([-0-9\.]+)( z=([-0-9\.]+),([-0-9\.]+))?$/i 424 ) 425 { 426 setgitter(1); 427 setachsen(1); 428 if ( defined $5 ) { 429 minmax3d( $1, $3, $6, $2, $4, $7 ); 430 setachsengraph3d( $1, $3, $6, $2, $4, $7 ); 431 } 432 else { 433 minmax( $1, $3, $2, $4 ); 434 setachsengraph( $1, $3, $2, $4 ); 435 } 436 } 437 438 # Befehl "Achsenschnittpunkte" 439 elsif ( $zeile =~ /^achsenschnitt( x=([-0-9\.]+))?( y=([-0-9\.]+))?( z=([-0-9\.]+))?$/i ) { 440 schnittsetzen( $2, "x" ) if ( defined $1 ); 441 schnittsetzen( $4, "y" ) if ( defined $3 ); 442 schnittsetzen( $5, "z" ) if ( defined $4 ); 443 } 444 elsif ( $zeile =~ 445 /^einstellung( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?$/i 446 ) 447 { 448 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 449 "" ); 450 $layer = $2 if ( defined $1 ); 451 if ( defined $3 ) { 452 $farbe = $4; 453 $fuellart = $5; 454 $fuellfarbe = $6; 455 } 456 if ( defined $7 ) { 457 $linienstaerke = $8; 458 $linienart = $9; 459 } 460 $farbe = $11 if ( defined $10 ); 461 setfarbe($farbe); 462 setfuellart($fuellart); 463 setfuellfarbe($fuellfarbe); 464 setlinienstaerke($linienstaerke); 465 setlinienart($linienart); 466 467 } 468 elsif ( $zeile =~ 469 /^einstellung( layer=([0-9]+))?( alpha=([-0-9\.]+))?( beta=([-0-9\.]+))?( coortype=([-0-9\.]+))?( pstricks)?$/i 470 ) 471 { 472 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 473 "" ); 474 $layer = $2 if ( defined $1 ); 475 $alpha = 45; 476 $alpha = $4 if ( defined $3 ); 477 $beta = 30; 478 $beta = $6 if ( defined $5 ); 479 $coor = 2; 480 $coor = $8 if ( defined $7 ); 481 set3dwinkel( $alpha, "alpha" ); 482 set3dwinkel( $beta, "beta" ); 483 set3dkoor($coor); 484 $pstricks = 0; 485 $pstricks = 1 if ( defined $9 ); 486 set3dpstricks($pstricks); 487 } 488 489 # Befehl "kariert" 490 elsif ( $zeile =~ 491 /^kariert( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))? dx=([0-9\.]+),([0-9\.]+),([0-9\.]+) dy=([0-9\.]+),([0-9\.]+),([0-9\.]+)( dz=([0-9\.]+),([0-9\.]+),([0-9\.]+))? [x|p]=([-0-9\.]+),([-0-9\.]+) [y|p]=([-0-9\.]+),([-0-9\.]+)( z=([-0-9\.]+),([-0-9\.]+))?$/i 492 ) 493 { 494 standard( 1, getlinienart(), 0.2, "lightgray", "", getfuellfarbe(), "", "" ); 495 $layer = $2 if ( defined $1 ); 496 $farbe = $4 if ( defined $3 ); 497 if ( defined $5 ) { 498 $linienstaerke = $6; 499 $linienart = $7; 500 } 501 $farbe = $9 if ( defined $8 ); 502 $abstandx = $10; 503 $dickx = $11; 504 $ganzdickx = $12; 505 $abstandy = $13; 506 $dicky = $14; 507 $ganzdicky = $15; 508 509 if ( defined $16 ) { 510 $abstandz = $17; 511 $dickz = $18; 512 $ganzdickz = $19; 513 } 514 $xmin = $20; 515 $xmax = $21; 516 $ymin = $22; 517 $ymax = $23; 518 if ( defined $24 ) { 519 $zmin = $25; 520 $zmax = $26; 521 } 522 523 setachsengraph( $xmin, $ymin, $xmax, $ymax ); 524 525 if ( ( defined $16 ) && ( defined $24 ) ) { 526 set3dzeichnen(1); 527 kariert3d( 528 $layer, $farbe, $linienstaerke, $linienart, $xmin, 529 $ymin, $zmin, $xmax, $ymax, $zmax, 530 $abstandx, $dickx, $ganzdickx, $abstandy, $dicky, 531 $ganzdicky, $abstandz, $dickz, $ganzdickz 532 ); 533 } 534 else { 535 kariert( 536 $layer, $farbe, $linienstaerke, $linienart, $xmin, 537 $ymin, $xmax, $ymax, $abstandx, $dickx, 538 $ganzdickx, $abstandy, $dicky, $ganzdicky 539 ); 540 } 541 542 next; 543 } 544 545 # Befehl "punkte" 546 elsif ( $zeile =~ 547 /^punkte( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))? abstand=([0-9\.]+)? [x|p]=([-0-9\.]+),([-0-9\.]+) [y|p]=([-0-9\.]+),([-0-9\.]+)$/i 548 ) 549 { 550 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 551 "" ); 552 $layer = $2 if ( defined $1 ); 553 $farbe = $4 if ( defined $3 ); 554 $abstand = $5; 555 $xmin = $6; 556 $xmax = $7; 557 $ymin = $8; 558 $ymax = $9; 559 setachsengraph( $xmin, $ymin, $xmax, $ymax ); 560 grid( $layer, $farbe, getlinienstaerke(), getlinienart(), $xmin, $ymin, $xmax, $ymax, 561 $abstand, $abstand, $abstand, $abstand, $abstand, $abstand ); 562 563 } 564 565 elsif ( $zeile =~ 566 /^grid( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))? dx=([0-9\.]+),([0-9\.]+) dy=([0-9\.]+),([0-9\.]+) [x|p]=([-0-9\.]+),([-0-9\.]+) [y|p]=([-0-9\.]+),([-0-9\.]+)$/i 567 ) 568 { 569 standard( 1, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 570 "" ); 571 $layer = $2 if ( defined $1 ); 572 $farbe = $4 if ( defined $3 ); 573 if ( defined $5 ) { 574 $linienstaerke = $6; 575 $linienart = $7; 576 } 577 $farbe = $9 if ( defined $8 ); 578 $abstandx = $10; 579 $dickx = $11; 580 $abstandy = $12; 581 $dicky = $13; 582 $xmin = $14; 583 $xmax = $15; 584 $ymin = $16; 585 $ymax = $17; 586 setachsengraph( $xmin, $ymin, $xmax, $ymax ); 587 grid( $layer, $farbe, $linienstaerke, $linienart, $xmin, $ymin, $xmax, $ymax, $abstandx, 588 $dickx, 0, $abstandy, $dicky, 0 ); 589 } 590 591 elsif ( $zeile =~ 592 /^grid( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))? dx=([0-9\.]+),([0-9\.]+),([0-9\.]+) dy=([0-9\.]+),([0-9\.]+),([0-9\.]+) [x|p]=([-0-9\.]+),([-0-9\.]+) [y|p]=([-0-9\.]+),([-0-9\.]+)$/i 593 ) 594 { 595 standard( 1, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 596 "" ); 597 $layer = $2 if ( defined $1 ); 598 $farbe = $4 if ( defined $3 ); 599 if ( defined $5 ) { 600 $linienstaerke = $6; 601 $linienart = $7; 602 } 603 $farbe = $9 if ( defined $8 ); 604 $abstandx = $10; 605 $dickx = $11; 606 $ganzdickx = $12; 607 $abstandy = $13; 608 $dicky = $14; 609 $ganzdicky = $15; 610 $xmin = $16; 611 $xmax = $17; 612 $ymin = $18; 613 $ymax = $19; 614 setachsengraph( $xmin, $ymin, $xmax, $ymax ); 615 grid( 616 $layer, $farbe, $linienstaerke, $linienart, $xmin, 617 $ymin, $xmax, $ymax, $abstandx, $dickx, 618 $ganzdickx, $abstandy, $dicky, $ganzdicky 619 ); 620 621 } 622 623 # Befehl "millimeterpapier" 624 elsif ( $zeile =~ 625 /^millimeterpapier( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))? [x|p]=([-0-9\.]+),([-0-9\.]+) [y|p]=([-0-9\.]+),([-0-9\.]+)$/i 626 ) 627 { 628 standard( 10, getlinienart(), getlinienstaerke(), "lightgray", "", getfuellfarbe(), "", 629 "" ); 630 $layer = $2 if ( defined $1 ); 631 $farbe = $4 if ( defined $3 ); 632 $xmin = $5; 633 $xmax = $6; 634 $ymin = $7; 635 $ymax = $8; 636 setachsengraph( $xmin, $ymin, $xmax, $ymax ); 637 millimeterpapier( $layer, $farbe, $xmin, $ymin, $xmax, $ymax ); 638 639 } 640 641 # Befehl "matheheft" 642 elsif ( $zeile =~ 643 /^matheheft( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))? [x|p]=([-0-9\.]+),([-0-9\.]+) [y|p]=([-0-9\.]+),([-0-9\.]+)$/i 644 ) 645 { 646 standard( 10, getlinienart(), getlinienstaerke(), "lightgray", "", getfuellfarbe(), "", 647 "" ); 648 $layer = $2 if ( defined $1 ); 649 $farbe = $4 if ( defined $3 ); 650 $xmin = $5; 651 $xmax = $6; 652 $ymin = $7; 653 $ymax = $8; 654 setachsengraph( $xmin, $ymin, $xmax, $ymax ); 655 matheheft( $layer, $farbe, $xmin, $ymin, $xmax, $ymax ); 656 657 } 658 659 # Befehl fuer das Koordinatensystem 660 elsif ( $zeile =~ 661 /^xachse( layer=([0-9]+))? [x|p]=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+)( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))? skala=(keine|nurstriche|nureins|normal|strichundeins) text=\"([^\"]*)\"$/i 662 ) 663 { 664 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "->", 665 "" ); 666 667 $layer = $2 if ( defined $1 ); 668 $xmin = $3; 669 $xmax = $4; 670 $xschritt = $5; 671 if ( defined $6 ) { 672 $linienstaerke = $7; 673 $linienart = $8; 674 } 675 $farbe = $10 if ( defined $9 ); 676 $xskala = $11; 677 $xtext = $12; 678 setachsenzeichnen( 1, "x" ); 679 setachsenzeichnen( 0, "y" ); 680 setminmaxachsen( $xmin, "x", "min" ); 681 682 setminmaxachsen( $xmax, "x", "max" ); 683 setminmaxachsen( 0, "y", "min" ); 684 setminmaxachsen( 0, "y", "max" ); 685 setachsengraph( $xmin, 0, $xmax, 0 ); 686 setschritt( $xschritt, "x" ); 687 schnittsetzen( $xmin, "x" ); 688 setschritt( 0, "y" ); 689 setskala( $xskala, "x" ); 690 settext( $xtext, "x" ); 691 692 for ( $j = 0 ; $j < $eingabedateizeilen ; $j++ ) { 693 $zeilej = $eingabedatei[$j]; 694 if ( $zeilej =~ 695 /^yachse( layer=([0-9]+))? [y|p]=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+)( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))? skala=(keine|nurstriche|nureins|normal|strichundeins) text=\"([^\"]*)\"$/i 696 ) 697 { 698 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", 699 getfuellfarbe(), "->", "" ); 700 701 $layer = $2 if ( defined $1 ); 702 $ymin = $3; 703 $ymax = $4; 704 $yschritt = $5; 705 706 if ( defined $6 ) { 707 $linienstaerke = $7; 708 $linienart = $8; 709 } 710 $farbe = $10 if ( defined $9 ); 711 $yskala = $11; 712 $ytext = $12; 713 setachsenzeichnen( 1, "y" ); 714 setminmaxachsen( $ymin, "y", "min" ); 715 setminmaxachsen( $ymax, "y", "max" ); 716 setschritt( $yschritt, "y" ); 717 setskala( $yskala, "y" ); 718 schnittsetzen( $ymin, "y" ); 719 settext( $ytext, "y" ); 720 setachsengraph( 0, $ymin, 0, $ymax ); 721 722 achsen( 723 $layer, $farbe, $linienstaerke, $linienart, $pfeilart, 724 $xmin, $xmax, $ymin, $ymax, $xschritt, 725 $xskala, $xtext, $yschritt, $yskala, $ytext 726 ); 727 next; 728 } 729 } 730 if ( achsengezeichnet("y") == 0 ) { 731 setpfeilart($pfeilart); 732 xachse( 733 $layer, $farbe, $linienstaerke, $linienart, $xmin, 734 $xmax, $xschritt, $xskala, $xtext 735 ); 736 } 737 738 } 739 740 # Befehl fuer das Koordinatensystem mit Pi 741 elsif ( $zeile =~ 742 /^xachserad( layer=([0-9]+))? [x|p]=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+)( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( text=\"([^\"]*)\")?$/i 743 ) 744 { 745 standard( 10, getlinienart(), 0.8, getfarbe(), "", getfuellfarbe(), "->", "" ); 746 $layer = $2 if ( defined $1 ); 747 $xmin = degtorad($3); 748 $xmax = degtorad($4); 749 $xschritt = degtorad($5); 750 if ( defined $6 ) { 751 $linienstaerke = $7; 752 $linienart = $8; 753 } 754 $farbe = $10 if ( defined $9 ); 755 $xtext = ""; 756 $xtext = $12 if ( defined $11 ); 757 setachsenzeichnen( 1, "x" ); 758 setachsenzeichnen( 0, "y" ); 759 setminmaxachsen( $xmin, "x", "min" ); 760 setminmaxachsen( $xmax, "x", "max" ); 761 setminmaxachsen( 0, "y", "min" ); 762 setminmaxachsen( 0, "y", "max" ); 763 setachsengraph( $xmin, 0, $xmax, 0 ); 764 setschritt( $xschritt, "x" ); 765 setskala( $xskala, "x" ); 766 settext( $xtext, "x" ); 767 768 for ( $j = 0 ; $j < $eingabedateizeilen ; $j++ ) { 769 $zeilej = $eingabedatei[$j]; 770 if ( $zeilej =~ 771 /^yachse( layer=([0-9]+))? [y|p]=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+)( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))? skala=(keine|nurstriche|nureins|normal|strichundeins) text=\"([^\"]*)\"$/i 772 ) 773 { 774 standard( 10, getlinienart(), 0.8, getfarbe(), "", getfuellfarbe(), "->", "" ); 775 776 $layer = $2 if ( defined $1 ); 777 $ymin = $3; 778 $ymax = $4; 779 $yschritt = $5; 780 if ( defined $6 ) { 781 $linienstaerke = $7; 782 $linienart = $8; 783 } 784 785 $farbe = $10 if ( defined $9 ); 786 $yskala = $11; 787 $ytext = $12; 788 setachsenzeichnen( 1, "y" ); 789 setminmaxachsen( $ymin, "y", "min" ); 790 setminmaxachsen( $ymax, "y", "max" ); 791 setschritt( $yschritt, "y" ); 792 setskala( $yskala, "y" ); 793 settext( $ytext, "y" ); 794 setachsengraph( 0, $ymin, 0, $ymax ); 795 setpfeilart($pfeilart); 796 797 xyachserad( 798 $layer, $farbe, $linienstaerke, $linienart, $xmin, 799 $xmax, $ymin, $ymax, $xschritt, $xtext, 800 $yschritt, $yskala, $ytext 801 ); 802 803 } 804 } 805 if ( achsengezeichnet("y") == 0 ) { 806 setpfeilart($pfeilart); 807 xachserad( $layer, $farbe, $linienstaerke, $linienart, $xmin, $xmax, $xschritt, 808 $xtext ); 809 } 810 811 } 812 elsif ( $zeile =~ 813 /^yachse( layer=([0-9]+))? [y|p]=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+)( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))? skala=(keine|nurstriche|nureins|normal|strichundeins) text=\"([^\"]*)\"$/i 814 ) 815 { 816 817 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "->", 818 "" ); 819 $layer = $2 if ( defined $1 ); 820 $ymin = $3; 821 $ymax = $4; 822 $yschritt = $5; 823 if ( defined $6 ) { 824 $linienstaerke = $7; 825 $linienart = $8; 826 } 827 828 $farbe = $10 if ( defined $9 ); 829 $yskala = $11; 830 $ytext = $12; 831 setachsenzeichnen( 1, "y" ); 832 833 setminmaxachsen( $ymin, "y", "min" ); 834 setminmaxachsen( $ymax, "y", "max" ); 835 setminmaxachsen( 0, "x", "min" ); 836 setminmaxachsen( 0, "x", "max" ); 837 setschritt( $yschritt, "y" ); 838 setskala( $yskala, "y" ); 839 settext( $ytext, "y" ); 840 setachsengraph( 0, $ymin, 0, $ymax ); 841 842 if ( achsengezeichnet("x") == 0 ) { 843 setpfeilart($pfeilart); 844 yachse( 845 $layer, $farbe, $linienstaerke, $linienart, $ymin, 846 $ymax, $yschritt, $yskala, $ytext 847 ); 848 849 } 850 } 851 elsif ( $zeile =~ 852 /^koordinatensystem( layer=([0-9]+))? [x|p]=([-0-9\.]+),([-0-9\.]+) [y|p]=([-0-9\.]+),([-0-9\.]+)( z=([-0-9\.]+),([-0-9\.]+))?( einteilung=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))?)?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?(,\"([^\"]*)\")?( skala=(keine|nurstriche|nureins|normal|strichundeins))?( text=\"([^\"]*)\",\"([^\"]*)\")(,\"([^\"]*)\")??( mitte)?$/i 853 ) 854 { 855 standard( 10, getlinienart(), 1.5, getfarbe(), "", getfuellfarbe(), "->", "" ); 856 $layer = $2 if ( defined $1 ); 857 $xmin = $3; 858 $xmax = $4; 859 $ymin = $5; 860 $ymax = $6; 861 if ( defined $7 ) { 862 $zmin = $8; 863 $zmax = $9; 864 } 865 $xschritt = 1; 866 $yschritt = 1; 867 $zschritt = 1; 868 if ( defined $10 ) { 869 $xschritt = $11; 870 $yschritt = $12; 871 if ( defined $13 ) { 872 $zschritt = $14; 873 } 874 } 875 876 if ( defined $15 ) { 877 $linienstaerke = $16; 878 $linienart = $17; 879 } 880 $farbe = $19 if ( defined $18 ); 881 $pfeilart = $21 if ( defined $20 ); 882 $skala = "normal"; 883 if ( defined $22 ) { 884 $skala = $23; 885 } 886 $xtext = $ytext = $ztext = ""; 887 if ( defined $24 ) { 888 $xtext = $25; 889 $ytext = $26; 890 if ( defined $27 ) { 891 $ztext = $28; 892 } 893 } 894 if ( defined $29 ) { setmitte(); } 895 setminmaxachsen( $xmin, "x", "min" ); 896 setminmaxachsen( $xmax, "x", "max" ); 897 setschritt( $xschritt, "x" ); 898 setskala( $skala, "x" ); 899 settext( $xtext, "x" ); 900 setminmaxachsen( $ymin, "y", "min" ); 901 setminmaxachsen( $ymax, "y", "max" ); 902 setschritt( $yschritt, "y" ); 903 setskala( $skala, "y" ); 904 settext( $ytext, "y" ); 905 setachsengraph( $xmin, $ymin, $xmax, $ymax ); 906 907 if ( ( defined $13 ) && ( defined $25 ) ) { 908 achsen3d( 909 $layer, $farbe, $linienstaerke, $linienart, $pfeilart, 910 $xmin, $xmax, $ymin, $ymax, $zmin, 911 $zmax, $xschritt, $skala, $xtext, $yschritt, 912 $skala, $ytext, $zschritt, $skala, $ztext 913 ); 914 } 915 else { 916 achsen( 917 $layer, $farbe, $linienstaerke, $linienart, $pfeilart, 918 $xmin, $xmax, $ymin, $ymax, $xschritt, 919 $skala, $xtext, $yschritt, $skala, $ytext 920 ); 921 } 922 923 } 924 elsif ( 925 $zeile =~ 926 927 /^xyachserad( layer=([0-9]+))? [x|p]=([-0-9\.]+),([-0-9\.]+) [y|p]=([-0-9\.]+),([-0-9\.]+)( einteilung=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))?(,(rad|deg|degtorad|radtodeg))?)?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( skala=(keine|nurstriche|nureins|normal|strichundeins))?( text=\"([^\"]*)\",\"([^\"]*)\")?$/i 928 ) 929 { 930 standard( 10, getlinienart(), 0.8, getfarbe(), "", getfuellfarbe(), "->", "" ); 931 $layer = $2 if ( defined $1 ); 932 $xmin = $3; 933 $xmax = $4; 934 $ymin = $5; 935 $ymax = $6; 936 $xschritt = 3.14; 937 $yschritt = 1; 938 $xbruch = 1; 939 $rad = "degtorad"; 940 setachsengraph( $xmin, $ymin, $xmax, $ymax ); 941 942 if ( defined $7 ) { 943 $xschritt = $8; 944 $yschritt = $9; 945 946 } 947 if ( defined $10 ) { $xbruch = $11; } 948 if ( defined $12 ) { $rad = $13; } 949 950 if ( defined $14 ) { 951 $linienstaerke = $15; 952 $linienart = $16; 953 } 954 $farbe = getfarbe(); 955 $farbe = $18 if ( defined $17 ); 956 $skala = "normal"; 957 if ( defined $19 ) { $skala = $20; } 958 $xtext = $ytext = ""; 959 if ( defined $21 ) { 960 $xtext = $22; 961 $ytext = $23; 962 } 963 964 setminmaxachsen( degtorad($xmin), "x", "min" ); 965 setminmaxachsen( degtorad($xmax), "x", "max" ); 966 setschritt( $xschritt, "x" ); 967 setskala( $skala, "x" ); 968 settext( $xtext, "x" ); 969 setminmaxachsen( $ymin, "y", "min" ); 970 setminmaxachsen( $ymax, "y", "max" ); 971 setschritt( $yschritt, "y" ); 972 setskala( $skala, "y" ); 973 settext( $ytext, "y" ); 974 xyachserad( 975 $layer, $farbe, $linienstaerke, $linienart, $xmin, 976 $xmax, $ymin, $ymax, $xschritt, $xtext, 977 $yschritt, $skala, $ytext, $xbruch, $rad 978 ); 979 980 } 981 982 # Zeichnen von Funktionen 983 elsif ( $zeile =~ 984 /^graph( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?( parameter=\"([^\"]*)\")? [x|p]=([-0-9\.]+),([-0-9\.]+)( [y|p]=([-0-9\.]+),([-0-9\.]+))?( z=([-0-9\.]+),([-0-9\.]+))? (.*)$/i 985 ) 986 { 987 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 988 "" ); 989 $layer = $2 if ( defined $1 ); 990 991 $farbe = $4 if ( defined $3 ); 992 if ( defined $5 ) { 993 $linienstaerke = $6; 994 $linienart = $7; 995 } 996 if ( defined $8 ) { $parameter = $9; } 997 998 $xmin = $10; 999 $xmax = $11; 1000 $func = $18; 1001 1002 if ( defined $12 ) { 1003 $ymin = $13; 1004 $ymax = $14; 1005 } 1006 if ( !defined $13 ) { $ymin = $ymax = 0; } 1007 1008 if ( defined $15 ) { 1009 $zmin = $16; 1010 $zmax = $17; 1011 1012 } 1013 else { $zmin = $zmax = 0; } 1014 1015 graph( 1016 $layer, $func, $xmin, $ymin, 1017 $zmin, $xmax, $ymax, $zmax, 1018 $linienart, $linienstaerke, $farbe, $parameter 1019 ); 1020 } 1021 1022 ## Rotationsfunktion um x-Achse zeichnen 1023 1024 elsif ( $zeile =~ 1025 /^graphrot( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? [x|p]=([-0-9\.]+),([-0-9\.]+)( [y|p]=([-0-9\.]+),([-0-9\.]+))? r=([-0-9\.]+) (.*)$/i 1026 ) 1027 { 1028 standard( 10, getlinienart(), 0.2, getfarbe(), "", getfuellfarbe(), "", "" ); 1029 $layer = $2 if ( defined $1 ); 1030 1031 if ( defined $3 ) { 1032 $farbe = $4; 1033 $fuellart = $5; 1034 $fuellfarbe = $6; 1035 } 1036 1037 if ( defined $7 ) { 1038 $linienstaerke = $8; 1039 $linienart = $9; 1040 } 1041 $farbe = $11 if ( defined $10 ); 1042 1043 if ( defined $12 ) { $parameter = $13; } 1044 1045 $xmin = $14; 1046 $xmax = $15; 1047 if ( defined $16 ) { 1048 $ymin = $17; 1049 $ymax = $18; 1050 } 1051 $n = $19; 1052 $func = $20; 1053 if ( !defined $16 ) { 1054 $ymin = calcymin( $func, $xmin, $xmax ); 1055 $ymax = calcymax( $func, $xmin, $xmax ); 1056 } 1057 graphrot( 1058 $layer, $func, $xmin, $ymin, $xmax, 1059 $ymax, $n, $farbe, $fuellart, $fuellfarbe, 1060 $linienart, $linienstaerke, $parameter 1061 ); 1062 1063 } 1064 1065 elsif ( $zeile =~ 1066 /^folge( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?( parameter=\"([^\"]*)\")? [x|p]=([-0-9\.]+),([-0-9\.]+)( r=([-0-9\.]+),([-0-9\.]+))? (.*)$/i 1067 ) 1068 { 1069 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 1070 "" ); 1071 $layer = $2 if ( defined $1 ); 1072 $farbe = $4 if ( defined $3 ); 1073 1074 if ( defined $5 ) { 1075 $linienstaerke = $6; 1076 $linienart = $7; 1077 } 1078 if ( defined $8 ) { $parameter = $9; } 1079 1080 $xmin = $10; 1081 $xmax = $11; 1082 $func = $15; 1083 $dx = 1; 1084 $groesse = 5; 1085 1086 if ( defined $12 ) { 1087 $dx = $13; 1088 $groesse = $14; 1089 } 1090 1091 folge( 1092 $layer, $func, $xmin, $xmax, $dx, 1093 $groesse, $linienart, $linienstaerke, $farbe, $parameter 1094 ); 1095 } 1096 1097 elsif ( $zeile =~ 1098 /^parametricplot( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?( parameter=\"([^\"]*)\")? t=([-0-9\.]+),([-0-9\.]+)( u=([-0-9\.]+),([-0-9\.]+))? ([^, ]*),([^, ]*)(,([^, ]*))?$/i 1099 ) 1100 { 1101 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 1102 "" ); 1103 $layer = $2 if ( defined $1 ); 1104 $farbe = $4 if ( defined $3 ); 1105 1106 if ( defined $5 ) { 1107 $linienstaerke = $6; 1108 $linienart = $7; 1109 } 1110 if ( defined $8 ) { $parameter = $9; } 1111 1112 $tmin = $10; 1113 $tmax = $11; 1114 1115 if ( defined $12 ) { 1116 $umin = $13; 1117 $umax = $14; 1118 1119 } 1120 else { $umin = $umax = 0; } 1121 $func1 = $15; 1122 $func2 = $16; 1123 if ( defined $17 ) { $func3 = $18; } 1124 else { $func3 = ""; } 1125 1126 parametricplot( 1127 $layer, $func1, $func2, $func3, 1128 $tmin, $umin, $tmax, $umax, 1129 $linienart, $linienstaerke, $farbe, $parameter 1130 ); 1131 1132 } 1133 1134 # Zeichnen der Ableitungsfunktion 1135 elsif ( $zeile =~ 1136 /^ableitung( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?( parameter=\"([^\"]*)\")? [x|p]=([-0-9\.]+),([-0-9\.]+)( [y|p]=([-0-9\.]+),([-0-9\.]+))? ([^, ]*)(,([^, ]*))?$/i 1137 ) 1138 { 1139 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 1140 "" ); 1141 $layer = $2 if ( defined $1 ); 1142 $farbe = $4 if ( defined $3 ); 1143 1144 if ( defined $5 ) { 1145 $linienstaerke = $6; 1146 $linienart = $7; 1147 } 1148 1149 if ( defined $8 ) { $parameter = $9; } 1150 1151 $xmin = $10; 1152 $xmax = $11; 1153 $func = $15; 1154 1155 if ( defined $12 ) { 1156 $ymin = $13; 1157 $ymax = $14; 1158 1159 } 1160 if ( !defined $13 ) { 1161 $ymin = calcymin( $func, $xmin, $xmax ); 1162 $ymax = calcymax( $func, $xmin, $xmax ); 1163 } 1164 if ( defined $16 ) { $grad = $17; } 1165 else { $grad = 1; } 1166 hilfe( $layer, "grad", $grad ); 1167 ableitung( 1168 $layer, $func, $grad, $xmin, 1169 $ymin, $xmax, $ymax, $linienart, 1170 $linienstaerke, $farbe, $parameter 1171 ); 1172 1173 } 1174 1175 # Zeichnen der Stammfunktion 1176 elsif ( $zeile =~ 1177 /^stammfunktion( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))? [x|p]=([-0-9\.]+),([-0-9\.]+)( [y|p]=([-0-9\.]+),([-0-9\.]+))?( parameter=\"([^\"]*)\")?( nullwert=([-0-9\.]+))? (.*)$/i 1178 ) 1179 { 1180 standard( 10, getlinienart(), 0.2, getfarbe(), "", getfuellfarbe(), "", "" ); 1181 $layer = $2 if ( defined $1 ); 1182 $farbe = $4 if ( defined $3 ); 1183 1184 if ( defined $5 ) { 1185 $linienstaerke = $6; 1186 $linienart = $7; 1187 } 1188 $xmin = $8; 1189 $xmax = $9; 1190 1191 $func = $17; 1192 $nullwert = 0; 1193 $nullwert = $16 if ( defined $15 ); 1194 $ymin = calcymin( $func, $xmin, $xmax ); 1195 $ymax = calcymax( $func, $xmin, $xmax ); 1196 1197 if ( defined $10 ) { 1198 $ymin = $11; 1199 $ymax = $12; 1200 } 1201 1202 if ( defined $13 ) { $parameter = $14; } 1203 1204 stammfunktion( 1205 $layer, $func, $xmin, $ymin, 1206 $xmax, $ymax, $linienart, $linienstaerke, 1207 $farbe, $nullwert, $parameter 1208 ); 1209 1210 } 1211 elsif ( $zeile =~ 1212 /^integral( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? [x|p]=([-0-9\.]+),([-0-9\.]+)( [y|p]=([-0-9\.]+),([-0-9\.]+))? (.*)$/i 1213 ) 1214 { 1215 standard( 10, getlinienart(), 0.2, getfarbe(), "", getfuellfarbe(), "", "" ); 1216 $layer = $2 if ( defined $1 ); 1217 1218 if ( defined $3 ) { 1219 $farbe = $4; 1220 $fuellart = $5; 1221 $fuellfarbe = $6; 1222 } 1223 1224 if ( defined $7 ) { 1225 $linienstaerke = $8; 1226 $linienart = $9; 1227 } 1228 $farbe = $11 if ( defined $10 ); 1229 1230 if ( defined $12 ) { $parameter = $13; } 1231 1232 $xmin = $14; 1233 $xmax = $15; 1234 if ( defined $16 ) { 1235 $ymin = $17; 1236 $ymax = $18; 1237 } 1238 $func = $19; 1239 if ( !defined $16 ) { 1240 $ymin = calcymin( $func, $xmin, $xmax ); 1241 $ymax = calcymax( $func, $xmin, $xmax ); 1242 } 1243 integral( 1244 $layer, $func, $xmin, $ymin, 1245 $xmax, $ymax, $farbe, $fuellart, 1246 $fuellfarbe, $linienart, $linienstaerke, $parameter 1247 ); 1248 1249 } 1250 1251 # Zeichnen von Funktionen 1252 elsif ( $zeile =~ 1253 /^wertezeichnen( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?( parameter=\"([^\"]*)\")?$/i 1254 ) 1255 { 1256 settexthier(""); 1257 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 1258 "" ); 1259 $layer = $2 if ( defined $1 ); 1260 $farbe = $4 if ( defined $3 ); 1261 1262 if ( defined $5 ) { 1263 $linienstaerke = $6; 1264 $linienart = $7; 1265 } 1266 $endeerreicht = 0; 1267 $inzeile = 0; 1268 $datei++; 1269 $name = "datei" . $datei; 1270 if ( defined $8 ) { $parameter = $9; } 1271 1272 while (( !$endeerreicht ) 1273 && ( $i < $eingabedateizeilen - 1 ) ) 1274 { 1275 $i++; 1276 $hilfszeile = $eingabedatei[$i]; 1277 if ( $hilfszeile =~ /^ende$/i ) { $endeerreicht = 1; } 1278 elsif ( $hilfszeile =~ /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) { 1279 $x = $1; 1280 $y = $2; 1281 paar( $x, $y ); 1282 setachsengraph( $x, $y, $x, $y ); 1283 } 1284 elsif ( $hilfszeile =~ 1285 /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) 1286 { 1287 $x = $1; 1288 $y = $2; 1289 $z = $3; 1290 tripel( $x, $y, $z ); 1291 } 1292 else { 1293 kommentar( $layer, "Kaputte Zeile" ); 1294 $endeerreicht = 1; 1295 } 1296 } 1297 if ( !$endeerreicht ) { printf("Keine sinnvollen Daten\n"); } 1298 else { 1299 liniekopf( $layer, $linienart, $linienstaerke, $farbe, $parameter, "", 1300 gettexthier() ); 1301 settexthier(""); 1302 } 1303 1304 } 1305 elsif ( $zeile =~ 1306 /^polypunkte( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z]+))?( parameter=\"([^\"]*)\")?$/i 1307 ) 1308 { 1309 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 1310 "" ); 1311 $layer = $2 if ( defined $1 ); 1312 $farbe = $4 if ( defined $3 ); 1313 1314 if ( defined $5 ) { 1315 $linienstaerke = $6; 1316 $linienart = $7; 1317 1318 } 1319 if ( defined $8 ) { $parameter = $9; } 1320 1321 $endeerreicht = 0; 1322 $inzeile = 0; 1323 $polygonzeichnen = 0; 1324 $datei++; 1325 $name = "datei" . $datei; 1326 while (( !$endeerreicht ) 1327 && ( $i < $eingabedateizeilen - 1 ) ) 1328 { 1329 $i++; 1330 $hilfszeile = $eingabedatei[$i]; 1331 if ( $hilfszeile =~ /^ende$/i ) { 1332 $endeerreicht = 1; 1333 if ( $polygonzeichnen == 1 ) { schliessedatei($name); } 1334 } 1335 elsif ( $hilfszeile =~ /^lese (.*)$/i ) { 1336 leseeingabedatei($1); 1337 $datei = $1; 1338 1339 $inzeile++; 1340 } 1341 elsif ( $hilfszeile =~ /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) { 1342 $x = $1; 1343 $y = $2; 1344 setachsengraph( $x, $y, $x, $y ); 1345 if ( $inzeile == 0 ) { oeffnedatei($name); } 1346 $inzeile++; 1347 1348 schreibedaten( $name, $x, $y ); 1349 $polygonzeichnen = 1; 1350 } 1351 elsif ( $hilfszeile =~ 1352 /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) 1353 { 1354 $x = $1; 1355 $y = $2; 1356 $z = $3; 1357 if ( $inzeile == 0 ) { 1358 oeffnedatei($name); 1359 } 1360 $inzeile++; 1361 minmax( $x, $x, $y, $y ); 1362 schreibedaten3d( $name, $x, $y, $z ); 1363 $polygonzeichnen = 1; 1364 } 1365 else { 1366 kommentar( $layer, "Kaputte Zeile" ); 1367 $endeerreicht = 1; 1368 } 1369 } 1370 if ( !$endeerreicht ) { printf("Keine sinnvollen Daten\n"); } 1371 else { 1372 readdata( $layer, $name ); 1373 daten( $layer, $name, $linienart, $linienstaerke, $farbe, $parameter ); 1374 1375 } 1376 } 1377 elsif ( $zeile =~ /^schreibe=\"([^\"]*)\"$/i ) { 1378 setextern(1); 1379 $name = $1; 1380 $endeerreicht = 0; 1381 $inzeile = 0; 1382 while (( !$endeerreicht ) 1383 && ( $i < $eingabedateizeilen - 1 ) ) 1384 { 1385 $i++; 1386 $hilfszeile = $eingabedatei[$i]; 1387 if ( $hilfszeile =~ /^ende$/i ) { $endeerreicht = 1; } 1388 elsif ( $hilfszeile =~ /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) { 1389 $x = $1; 1390 $y = $2; 1391 setachsengraph( $x, $y, $x, $y ); 1392 if ( $inzeile == 0 ) { oeffnedatei($name); } 1393 $inzeile++; 1394 schreibedaten( $name, $x, $y ); 1395 } 1396 1397 elsif ( $hilfszeile =~ 1398 /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) 1399 { 1400 $x = $1; 1401 $y = $2; 1402 $z = $3; 1403 if ( $inzeile == 0 ) { oeffnedatei($name); } 1404 $inzeile++; 1405 schreibedaten3d( $name, $x, $y, $z ); 1406 1407 } 1408 1409 else { 1410 kommentar( $layer, "Kaputte Zeile" ); 1411 $endeerreicht = 1; 1412 } 1413 } 1414 if ( !$endeerreicht ) { printf("Keine sinnvollen Daten\n"); } 1415 else { 1416 schliessedatei($name); 1417 1418 } 1419 } 1420 1421 elsif ( $zeile =~ /^schreibeindatei=\"([^\"]*)\"$/i ) { 1422 1423 $name = $1; 1424 setextern(1); 1425 $endeerreicht = 0; 1426 $inzeile = 0; 1427 while (( !$endeerreicht ) 1428 && ( $i < $eingabedateizeilen - 1 ) ) 1429 { 1430 $i++; 1431 $hilfszeile = $eingabedatei[$i]; 1432 if ( $hilfszeile =~ /^ende$/i ) { $endeerreicht = 1; } 1433 elsif ( $hilfszeile =~ /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) { 1434 $x = $1; 1435 $y = $2; 1436 setachsengraph( $x, $y, $x, $y ); 1437 if ( $inzeile == 0 ) { oeffnedatei($name); } 1438 $inzeile++; 1439 schreibedaten( $name, $x, $y ); 1440 } 1441 1442 elsif ( $hilfszeile =~ 1443 /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) 1444 { 1445 $x = $1; 1446 $y = $2; 1447 $z = $3; 1448 if ( $inzeile == 0 ) { oeffnedatei($name); } 1449 $inzeile++; 1450 schreibedaten3d( $name, $x, $y, $z ); 1451 } 1452 1453 else { 1454 kommentar( $layer, "Kaputte Zeile" ); 1455 $endeerreicht = 1; 1456 } 1457 } 1458 if ( !$endeerreicht ) { printf("Keine sinnvollen Daten\n"); } 1459 else { 1460 schliessedatei($name); 1461 setextern(0); 1462 } 1463 } 1464 1465 elsif ( $zeile =~ 1466 /^dataplot( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z]+))?( parameter=\"([^\"]*)\")?$/i 1467 ) 1468 { 1469 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 1470 "" ); 1471 $layer = $2 if ( defined $1 ); 1472 $farbe = $4 if ( defined $3 ); 1473 1474 if ( defined $5 ) { 1475 $linienstaerke = $6; 1476 $linienart = $7; 1477 1478 } 1479 if ( defined $8 ) { $parameter = $9; } 1480 1481 $endeerreicht = 0; 1482 $inzeile = 0; 1483 $polygonzeichnen = 0; 1484 $datei++; 1485 $name = "datei" . $datei; 1486 while (( !$endeerreicht ) 1487 && ( $i < $eingabedateizeilen - 1 ) ) 1488 { 1489 $i++; 1490 $hilfszeile = $eingabedatei[$i]; 1491 if ( $hilfszeile =~ /^ende$/i ) { 1492 $endeerreicht = 1; 1493 if ( $polygonzeichnen == 1 ) { schliessedatei($name); } 1494 } 1495 elsif ( $hilfszeile =~ /^lese (.*)$/i ) { 1496 leseeingabedatei($1); 1497 $name = $1; 1498 if ( $inzeile == 0 ) { } 1499 $inzeile++; 1500 } 1501 elsif ( $hilfszeile =~ /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) { 1502 $x = $1; 1503 $y = $2; 1504 setachsengraph( $x, $y, $x, $y ); 1505 if ( $inzeile == 0 ) { oeffnedatei($name); } 1506 $inzeile++; 1507 1508 schreibedaten( $name, $x, $y ); 1509 $polygonzeichnen = 1; 1510 } 1511 elsif ( $hilfszeile =~ 1512 /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) 1513 { 1514 $x = $1; 1515 $y = $2; 1516 $z = $3; 1517 if ( $inzeile == 0 ) { oeffnedatei($name); } 1518 $inzeile++; 1519 1520 schreibedaten3d( $name, $x, $y, $z ); 1521 $polygonzeichnen = 1; 1522 } 1523 else { 1524 kommentar( $layer, "Kaputte Zeile" ); 1525 $endeerreicht = 1; 1526 } 1527 } 1528 if ( !$endeerreicht ) { printf("Keine sinnvollen Daten\n"); } 1529 else { 1530 readdata( $layer, $name ); 1531 daten( $layer, $name, $linienart, $linienstaerke, $farbe, $parameter ); 1532 settexthier(""); 1533 } 1534 } 1535 elsif ( $zeile =~ /^schreibe=\"([^\"]*)\"$/i ) { 1536 1537 $datei = $1; 1538 $endeerreicht = 0; 1539 $inzeile = 0; 1540 while (( !$endeerreicht ) 1541 && ( $i < $eingabedateizeilen - 1 ) ) 1542 { 1543 $i++; 1544 $hilfszeile = $eingabedatei[$i]; 1545 if ( $hilfszeile =~ /^ende$/i ) { $endeerreicht = 1; } 1546 elsif ( $hilfszeile =~ /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) { 1547 $x = $1; 1548 $y = $2; 1549 setachsengraph( $x, $y, $x, $y ); 1550 if ( $inzeile == 0 ) { oeffnedatei($name); } 1551 $inzeile++; 1552 schreibedaten( $name, $x, $y ); 1553 } 1554 1555 elsif ( $hilfszeile =~ 1556 /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) 1557 { 1558 $x = $1; 1559 $y = $2; 1560 $z = $3; 1561 if ( $inzeile == 0 ) { oeffnedatei($name); } 1562 $inzeile++; 1563 schreibedaten3d( $name, $x, $y, $z ); 1564 } 1565 1566 else { 1567 kommentar( $layer, "Kaputte Zeile" ); 1568 $endeerreicht = 1; 1569 } 1570 } 1571 if ( !$endeerreicht ) { printf("Keine sinnvollen Daten\n"); } 1572 else { schliessedatei($name); } 1573 } 1574 1575 elsif ( $zeile =~ 1576 /^fileplot( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z]+))?( parameter=\"([^\"]*)\")?$/i 1577 ) 1578 { 1579 $einlesen = 1; 1580 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 1581 "" ); 1582 $layer = $2 if ( defined $1 ); 1583 $farbe = $4 if ( defined $3 ); 1584 1585 if ( defined $5 ) { 1586 $linienstaerke = $6; 1587 $linienart = $7; 1588 1589 } 1590 if ( defined $8 ) { $parameter = $9; } 1591 1592 $endeerreicht = 0; 1593 $inzeile = 0; 1594 $polygonzeichnen = 0; 1595 $datei++; 1596 $name = "datei" . $datei; 1597 while (( !$endeerreicht ) 1598 && ( $i < $eingabedateizeilen - 1 ) ) 1599 { 1600 $i++; 1601 $hilfszeile = $eingabedatei[$i]; 1602 if ( $hilfszeile =~ /^ende$/i ) { 1603 $endeerreicht = 1; 1604 if ( $polygonzeichnen == 1 ) { schliessedatei($name); } 1605 } 1606 elsif ( $hilfszeile =~ /^lese (.*)$/i ) { 1607 1608 $name = $1; 1609 if ( $inzeile == 0 ) { } 1610 $inzeile++; 1611 leseeingabedatei($1); 1612 } 1613 elsif ( $hilfszeile =~ /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) { 1614 $x = $1; 1615 $y = $2; 1616 1617 setachsengraph( $x, $y, $x, $y ); 1618 if ( $inzeile == 0 ) { oeffnedatei($name); } 1619 $inzeile++; 1620 schreibedaten( $name, $x, $y ); 1621 $polygonzeichnen = 1; 1622 } 1623 elsif ( $hilfszeile =~ 1624 /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) 1625 { 1626 $x = $1; 1627 $y = $2; 1628 $z = $3; 1629 if ( $inzeile == 0 ) { oeffnedatei($name); } 1630 $inzeile++; 1631 1632 schreibedaten3d( $name, $x, $y, $z ); 1633 $polygonzeichnen = 1; 1634 } 1635 else { 1636 kommentar( $layer, "Kaputte Zeile" ); 1637 $endeerreicht = 1; 1638 } 1639 } 1640 if ( !$endeerreicht ) { printf("Keine sinnvollen Daten\n"); } 1641 else { 1642 fileplot( $layer, $name, $linienart, $linienstaerke, $farbe, $parameter ); 1643 settexthier(""); 1644 } 1645 } 1646 elsif ( $zeile =~ /^schreibe=\"([^\"]*)\"$/i ) { 1647 $name = $1; 1648 $endeerreicht = 0; 1649 $inzeile = 0; 1650 while (( !$endeerreicht ) 1651 && ( $i < $eingabedateizeilen - 1 ) ) 1652 { 1653 $i++; 1654 $hilfszeile = $eingabedatei[$i]; 1655 if ( $hilfszeile =~ /^ende$/i ) { 1656 $endeerreicht = 1; 1657 } 1658 elsif ( $hilfszeile =~ /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) { 1659 $x = $1; 1660 $y = $2; 1661 setachsengraph( $x, $y, $x, $y ); 1662 if ( $inzeile == 0 ) { oeffnedatei($name); } 1663 $inzeile++; 1664 schreibedaten( $name, $x, $y ); 1665 } 1666 else { 1667 kommentar( $layer, "Kaputte Zeile" ); 1668 $endeerreicht = 1; 1669 } 1670 } 1671 if ( !$endeerreicht ) { printf("Keine sinnvollen Daten\n"); } 1672 else { schliessedatei($name); } 1673 } 1674 1675 elsif ( $zeile =~ 1676 /^listplot( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z]+))?( parameter=\"([^\"]*)\")?$/i 1677 ) 1678 { 1679 1680 $einlesen = 1; 1681 settexthier(""); 1682 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 1683 "" ); 1684 $layer = $2 if ( defined $1 ); 1685 $farbe = $4 if ( defined $3 ); 1686 1687 if ( defined $5 ) { 1688 $linienstaerke = $6; 1689 $linienart = $7; 1690 } 1691 if ( defined $8 ) { $parameter = $9; } 1692 $endeerreicht = 0; 1693 $inzeile = 0; 1694 $polygonzeichnen = 0; 1695 $datei++; 1696 $name = "datei" . $datei; 1697 while (( !$endeerreicht ) 1698 && ( $i < $eingabedateizeilen - 1 ) ) 1699 { 1700 $i++; 1701 $hilfszeile = $eingabedatei[$i]; 1702 if ( $hilfszeile =~ /^ende$/i ) { 1703 $endeerreicht = 1; 1704 if ( $polygonzeichnen == 1 ) { schliessedatei($name); } 1705 } 1706 elsif ( $hilfszeile =~ /^lese (.*)$/i ) { 1707 $name = $1; 1708 if ( $inzeile == 0 ) { } 1709 $inzeile++; 1710 leseeingabedatei($1); 1711 } 1712 elsif ( $hilfszeile =~ /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) { 1713 $x = $1; 1714 $y = $2; 1715 setachsengraph( $x, $y, $x, $y ); 1716 if ( $inzeile == 0 ) { oeffnedatei($name); } 1717 $inzeile++; 1718 schreibedaten( $name, $x, $y ); 1719 $polygonzeichnen = 1; 1720 } 1721 1722 elsif ( $hilfszeile =~ 1723 /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) 1724 { 1725 $x = $1; 1726 $y = $2; 1727 $z = $3; 1728 setachsengraph3d( $x, $y, $z, $x, $y, $z ); 1729 minmax3d( $x, $y, $z, $x, $y, $z ); 1730 if ( $inzeile == 0 ) { oeffnedatei($name); } 1731 $inzeile++; 1732 schreibedaten3d( $name, $x, $y, $z ); 1733 $polygonzeichnen = 1; 1734 } 1735 else { 1736 kommentar( $layer, "Kaputte Zeile" ); 1737 $endeerreicht = 1; 1738 } 1739 } 1740 if ( !$endeerreicht ) { printf("Keine sinnvollen Daten\n"); } 1741 else { 1742 readdata( $layer, $name ); 1743 listplot( $layer, $name, $linienart, $linienstaerke, $farbe, $parameter ); 1744 settexthier(""); 1745 } 1746 } 1747 1748 elsif ( $zeile =~ /^schreibe=\"([^\"]*)\"$/i ) { 1749 $name = $1; 1750 $endeerreicht = 0; 1751 $inzeile = 0; 1752 while (( !$endeerreicht ) 1753 && ( $i < $eingabedateizeilen - 1 ) ) 1754 { 1755 $i++; 1756 $hilfszeile = $eingabedatei[$i]; 1757 if ( $hilfszeile =~ /^ende$/i ) { 1758 $endeerreicht = 1; 1759 } 1760 elsif ( $hilfszeile =~ /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) { 1761 $x = $1; 1762 $y = $2; 1763 setachsengraph( $x, $y, $x, $y ); 1764 if ( $inzeile == 0 ) { oeffnedatei($name); } 1765 $inzeile++; 1766 schreibedaten( $name, $x, $y ); 1767 } 1768 else { 1769 kommentar( $layer, "Kaputte Zeile" ); 1770 $endeerreicht = 1; 1771 } 1772 } 1773 if ( !$endeerreicht ) { printf("Keine sinnvollen Daten\n"); } 1774 else { schliessedatei($name); } 1775 } 1776 1777 elsif ( $zeile =~ 1778 /^regression( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z]+))?( parameter=\"([^\"]*)\")?$/i 1779 ) 1780 { 1781 1782 $einlesen = 1; 1783 settexthier(""); 1784 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 1785 "" ); 1786 $layer = $2 if ( defined $1 ); 1787 $farbe = $4 if ( defined $3 ); 1788 1789 if ( defined $5 ) { 1790 $linienstaerke = $6; 1791 $linienart = $7; 1792 } 1793 if ( defined $8 ) { $parameter = $9; } 1794 1795 $endeerreicht = 0; 1796 $inzeile = 0; 1797 $polygonzeichnen = 0; 1798 while (( !$endeerreicht ) 1799 && ( $i < $eingabedateizeilen - 1 ) ) 1800 { 1801 $i++; 1802 $hilfszeile = $eingabedatei[$i]; 1803 if ( $hilfszeile =~ /^ende$/i ) { 1804 $endeerreicht = 1; 1805 if ( $polygonzeichnen == 1 ) { 1806 schliesseregression($inzeile); 1807 } 1808 } 1809 elsif ( $hilfszeile =~ /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) { 1810 1811 $x = $1; 1812 $y = $2; 1813 setachsengraph( $x, $y, $x, $y ); 1814 if ( $inzeile == 0 ) { oeffneregression(); } 1815 $inzeile++; 1816 schreiberegression( $x, $y, "", $inzeile ); 1817 $polygonzeichnen = 1; 1818 } 1819 1820 elsif ( $hilfszeile =~ 1821 /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) 1822 { 1823 $x = $1; 1824 $y = $2; 1825 $z = $3; 1826 setachsengraph3d( $x, $y, $z, $x, $y, $z ); 1827 minmax3d( $x, $y, $z, $x, $y, $z ); 1828 if ( $inzeile == 0 ) { oeffneregression(); } 1829 $inzeile++; 1830 1831 schreiberegression( $x, $y, $z, $inzeile ); 1832 $polygonzeichnen = 1; 1833 } 1834 else { 1835 kommentar( $layer, "Kaputte Zeile" ); 1836 $endeerreicht = 1; 1837 } 1838 } 1839 if ( !$endeerreicht ) { printf("Keine sinnvollen Daten\n"); } 1840 else { 1841 regression( $layer, 1, $linienart, $linienstaerke, $farbe, $parameter ); 1842 } 1843 } 1844 elsif ( $zeile =~ /^schreibe=\"([^\"]*)\"$/i ) { 1845 $name = $1; 1846 $endeerreicht = 0; 1847 $inzeile = 0; 1848 while (( !$endeerreicht ) 1849 && ( $i < $eingabedateizeilen - 1 ) ) 1850 { 1851 $i++; 1852 $hilfszeile = $eingabedatei[$i]; 1853 if ( $hilfszeile =~ /^ende$/i ) { 1854 $endeerreicht = 1; 1855 } 1856 elsif ( $hilfszeile =~ /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) { 1857 $x = $1; 1858 $y = $2; 1859 setachsengraph( $x, $y, $x, $y ); 1860 if ( $inzeile == 0 ) { oeffnedatei($name); } 1861 $inzeile++; 1862 schreibedaten( $name, $x, $y ); 1863 } 1864 else { 1865 kommentar( $layer, "Kaputte Zeile" ); 1866 $endeerreicht = 1; 1867 } 1868 } 1869 if ( !$endeerreicht ) { printf("Keine sinnvollen Daten\n"); } 1870 else { schliessedatei($name); } 1871 } 1872 1873 elsif ( 1874 $zeile =~ 1875 1876 /^bezier( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,\"([^\"]*)\")?( parameter=\"([^\"]*)\")?$/i 1877 ) 1878 { 1879 settexthier(""); 1880 $pstricksersatz3d = get3dpstricks(); 1881 $pstricksersatz = getpstricks(); 1882 1883 setpstricks(0); 1884 set3dpstricks(0); 1885 1886 1887 1888 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 1889 "" ); 1890 $layer = $2 if ( defined $1 ); 1891 $farbe = $4 if ( defined $3 ); 1892 1893 if ( defined $5 ) { 1894 $linienstaerke = $6; 1895 $linienart = $7; 1896 } 1897 $pfeilart = $9 if ( defined $8 ); 1898 1899 if ( defined $10 ) { $parameter = $11; } 1900 1901 $endeerreicht = 0; 1902 $inzeile = 0; 1903 $polygonzeichnen = 0; 1904 $datei++; 1905 $name = "datei" . $datei; 1906 while (( !$endeerreicht ) 1907 && ( $i < $eingabedateizeilen - 1 ) ) 1908 { 1909 $i++; 1910 $hilfszeile = $eingabedatei[$i]; 1911 if ( $hilfszeile =~ /^ende$/i ) { $endeerreicht = 1; } 1912 elsif ( $hilfszeile =~ /^lese (.*)$/i ) { 1913 leseeingabedatei($1); 1914 $name = $1; 1915 $inzeile++; 1916 } 1917 elsif ( $hilfszeile =~ /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) { 1918 $x = $1; 1919 $y = $2; 1920 setachsengraph( $x, $y, $x, $y ); 1921 minmax( 1.5 * $x, $1, 5 * $y, 1.5 * $x, $1, 5 * $y ); 1922 $inzeile++; 1923 paar( $x, $y ); 1924 setachsengraph( $x, $y, $x, $y ); 1925 } 1926 elsif ( $hilfszeile =~ 1927 /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) 1928 { 1929 $x = $1; 1930 $y = $2; 1931 $z = $3; 1932 $inzeile++; 1933 setachsengraph3d( $x, $y, $z, $x, $y, $z ); 1934 tripel( $x, $y, $z ); 1935 1936 } 1937 1938 else { 1939 kommentar( $layer, "Kaputte Zeile" ); 1940 $endeerreicht = 1; 1941 } 1942 } 1943 if ( !$endeerreicht ) { printf("Keine sinnvollen Daten\n"); } 1944 else { 1945 if ( $parameter =~ /showpoints/ ) { 1946 $parameter =~ s/showpoints//g; 1947 $parameter =~ s/=true//g; 1948 liniekopf( $layer, $linienart, $linienstaerke, $farbe, $parameter, $pfeilart, 1949 gettexthier() ); 1950 } 1951 bezierkopf( $layer, $linienart, $linienstaerke, $farbe, $parameter, $pfeilart, 1952 gettexthier() ); 1953 1954 settexthier(""); 1955 setpstricks($pstricksersatz); 1956 set3dpstricks($pstricksersatz3d); 1957 1958 } 1959 } 1960 elsif ( $zeile =~ /^schreibe=\"([^\"]*)\"$/i ) { 1961 $name = $1; 1962 $endeerreicht = 0; 1963 $inzeile = 0; 1964 while (( !$endeerreicht ) 1965 && ( $i < $eingabedateizeilen - 1 ) ) 1966 { 1967 $i++; 1968 $hilfszeile = $eingabedatei[$i]; 1969 if ( $hilfszeile =~ /^ende$/i ) { $endeerreicht = 1; } 1970 elsif ( $hilfszeile =~ /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) { 1971 $x = $1; 1972 $y = $2; 1973 setachsengraph( $x, $y, $x, $y ); 1974 if ( $inzeile == 0 ) { oeffnedatei($name); } 1975 $inzeile++; 1976 schreibedaten( $name, $x, $y ); 1977 } 1978 elsif ( $hilfszeile =~ 1979 /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) 1980 { 1981 $x = $1; 1982 $y = $2; 1983 $z = $3; 1984 if ( $inzeile == 0 ) { oeffnedatei($name); } 1985 $inzeile++; 1986 schreibedaten3d( $name, $x, $y, $z ); 1987 } 1988 1989 else { 1990 kommentar( $layer, "Kaputte Zeile" ); 1991 $endeerreicht = 1; 1992 } 1993 } 1994 if ( !$endeerreicht ) { printf("Keine sinnvollen Daten\n"); } 1995 else { schliessedatei($name); } 1996 } 1997 1998 elsif ( 1999 $zeile =~ 2000 2001 /^linie( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,\"([^\"]*)\")?( parameter=\"([^\"]*)\")?$/i 2002 ) 2003 { 2004 settexthier(""); 2005 2006 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 2007 "" ); 2008 $layer = $2 if ( defined $1 ); 2009 $farbe = $4 if ( defined $3 ); 2010 2011 if ( defined $5 ) { 2012 $linienstaerke = $6; 2013 $linienart = $7; 2014 } 2015 2016 $pfeilart = $9 if ( defined $8 ); 2017 2018 if ( defined $10 ) { $parameter = $11; } 2019 2020 $endeerreicht = 0; 2021 $inzeile = 0; 2022 $polygonzeichnen = 0; 2023 $datei++; 2024 $name = "datei" . $datei; 2025 while (( !$endeerreicht ) 2026 && ( $i < $eingabedateizeilen - 1 ) ) 2027 { 2028 $i++; 2029 $hilfszeile = $eingabedatei[$i]; 2030 if ( $hilfszeile =~ /^ende$/i ) { $endeerreicht = 1; } 2031 elsif ( $hilfszeile =~ /^lese (.*)$/i ) { 2032 leseeingabedatei($1); 2033 $name = $1; 2034 $inzeile++; 2035 } 2036 elsif ( $hilfszeile =~ /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) { 2037 $x = $1; 2038 $y = $2; 2039 setachsengraph( $x, $y, $x, $y ); 2040 paar( $x, $y ); 2041 } 2042 2043 elsif ( $hilfszeile =~ 2044 /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) 2045 { 2046 $x = $1; 2047 $y = $2; 2048 $z = $3; 2049 tripel( $x, $y, $z ); 2050 } 2051 2052 else { 2053 kommentar( $layer, "Kaputte Zeile" ); 2054 $endeerreicht = 1; 2055 } 2056 } 2057 if ( !$endeerreicht ) { printf("Keine sinnvollen Daten\n"); } 2058 else { 2059 liniekopf( $layer, $linienart, $linienstaerke, $farbe, $parameter, $pfeilart, 2060 gettexthier() ); 2061 settexthier(""); 2062 2063 } 2064 } 2065 elsif ( $zeile =~ /^schreibe=\"([^\"]*)\"$/i ) { 2066 $name = $1; 2067 $endeerreicht = 0; 2068 $inzeile = 0; 2069 while (( !$endeerreicht ) 2070 && ( $i < $eingabedateizeilen - 1 ) ) 2071 { 2072 $i++; 2073 $hilfszeile = $eingabedatei[$i]; 2074 if ( $hilfszeile =~ /^ende$/i ) { $endeerreicht = 1; } 2075 elsif ( $hilfszeile =~ /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) { 2076 $x = $1; 2077 $y = $2; 2078 setachsengraph( $x, $y, $x, $y ); 2079 if ( $inzeile == 0 ) { oeffnedatei($name); } 2080 $inzeile++; 2081 schreibedaten( $name, $x, $y ); 2082 } 2083 else { 2084 kommentar( $layer, "Kaputte Zeile" ); 2085 $endeerreicht = 1; 2086 } 2087 } 2088 if ( !$endeerreicht ) { printf("Keine sinnvollen Daten\n"); } 2089 else { schliessedatei($name); } 2090 } 2091 2092 elsif ( 2093 $zeile =~ 2094 2095 /^kurve( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,\"([^\"]*)\")?( parameter=\"([^\"]*)\")?$/i 2096 ) 2097 { 2098 2099 settexthier(""); 2100 2101 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 2102 "" ); 2103 $layer = $2 if ( defined $1 ); 2104 $farbe = $4 if ( defined $3 ); 2105 2106 if ( defined $5 ) { 2107 $linienstaerke = $6; 2108 $linienart = $7; 2109 } 2110 2111 $pfeilart = $9 if ( defined $8 ); 2112 2113 if ( defined $10 ) { $parameter = $11; } 2114 2115 $endeerreicht = 0; 2116 $inzeile = 0; 2117 $polygonzeichnen = 0; 2118 $datei++; 2119 $name = "datei" . $datei; 2120 while (( !$endeerreicht ) 2121 && ( $i < $eingabedateizeilen - 1 ) ) 2122 { 2123 $i++; 2124 $hilfszeile = $eingabedatei[$i]; 2125 if ( $hilfszeile =~ /^ende$/i ) { $endeerreicht = 1; } 2126 elsif ( $hilfszeile =~ /^lese (.*)$/i ) { 2127 leseeingabedatei($1); 2128 $name = $1; 2129 2130 $inzeile++; 2131 } 2132 elsif ( $hilfszeile =~ /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) { 2133 $x = $1; 2134 $y = $2; 2135 setachsengraph( $x, $y, $x, $y ); 2136 $inzeile++; 2137 minmax( 1.5 * $x, $1, 5 * $y, 1.5 * $x, $1, 5 * $y ); 2138 paar( $x, $y ); 2139 2140 } 2141 2142 elsif ( $hilfszeile =~ 2143 /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) 2144 { 2145 $x = $1; 2146 $y = $2; 2147 $z = $3; 2148 $inzeile++; 2149 setachsengraph3d( $x, $y, $z, $x, $y, $z ); 2150 tripel( $x, $y, $z ); 2151 2152 } 2153 2154 else { 2155 kommentar( $layer, "Kaputte Zeile" ); 2156 $endeerreicht = 1; 2157 } 2158 } 2159 if ( !$endeerreicht ) { 2160 printf("Keine sinnvollen Daten\n"); 2161 } 2162 else { 2163 kurvekopf( $layer, $linienart, $linienstaerke, $farbe, $parameter, $pfeilart, 2164 gettexthier() ); 2165 2166 settexthier(""); 2167 } 2168 } 2169 elsif ( $zeile =~ /^schreibe=\"([^\"]*)\"$/i ) { 2170 $name = $1; 2171 $endeerreicht = 0; 2172 $inzeile = 0; 2173 while (( !$endeerreicht ) 2174 && ( $i < $eingabedateizeilen - 1 ) ) 2175 { 2176 $i++; 2177 $hilfszeile = $eingabedatei[$i]; 2178 if ( $hilfszeile =~ /^ende$/i ) { 2179 $endeerreicht = 1; 2180 } 2181 elsif ( $hilfszeile =~ /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) { 2182 $x = $1; 2183 $y = $2; 2184 setachsengraph( $x, $y, $x, $y ); 2185 if ( $inzeile == 0 ) { 2186 oeffnedatei($name); 2187 } 2188 $inzeile++; 2189 schreibedaten( $name, $x, $y ); 2190 } 2191 else { 2192 kommentar( $layer, "Kaputte Zeile" ); 2193 $endeerreicht = 1; 2194 } 2195 } 2196 if ( !$endeerreicht ) { 2197 printf("Keine sinnvollen Daten\n"); 2198 } 2199 else { 2200 schliessedatei($name); 2201 } 2202 } 2203 2204 elsif ( $zeile =~ 2205 /^polygon( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?$/i 2206 ) 2207 { 2208 settexthier(""); 2209 $anfang = 0; 2210 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 2211 "" ); 2212 $layer = $2 if ( defined $1 ); 2213 2214 if ( defined $3 ) { 2215 $farbe = $4; 2216 $fuellart = $5; 2217 $fuellfarbe = $6; 2218 } 2219 2220 if ( defined $7 ) { 2221 $linienstaerke = $8; 2222 $linienart = $9; 2223 } 2224 $farbe = $11 if ( defined $10 ); 2225 if ( defined $12 ) { 2226 $parameter = $13; 2227 } 2228 else { 2229 $parameter = ""; 2230 } 2231 $endeerreicht = 0; 2232 2233 while (( !$endeerreicht ) 2234 && ( $i < $eingabedateizeilen - 1 ) ) 2235 { 2236 $i++; 2237 $hilfszeile = $eingabedatei[$i]; 2238 if ( $hilfszeile =~ /^ende$/i ) { 2239 $endeerreicht = 1; 2240 if ( $anfang == 1 ) { paar( $x, $y ); } 2241 else { tripel( $x, $y, $z ); } 2242 } 2243 elsif ( $hilfszeile =~ /^([-0-9\.]+),([-0-9\.]+)$/i ) { 2244 if ( $anfang == 0 ) { 2245 $x = $1; 2246 $y = $2; 2247 setachsengraph( $x, $y, $x, $y ); 2248 $anfang = 1; 2249 } 2250 paar( $1, $2 ); 2251 } 2252 2253 elsif ( $hilfszeile =~ /^([-0-9\.]+),([-0-9\.]+),([-0-9\.]+)$/i ) { 2254 if ( $anfang == 0 ) { 2255 $x = $1; 2256 $y = $2; 2257 $z = $3; 2258 $anfang = 2; 2259 } 2260 tripel( $1, $2, $3 ); 2261 } 2262 2263 else { 2264 printf("Kaputte Zeile beim Polygon\n"); 2265 $endeerreicht = 1; 2266 2267 } 2268 } 2269 if ( !$endeerreicht ) { printf("Keine sinnvollen Daten\n"); } 2270 else { 2271 2272 polygon( $layer, $linienart, $linienstaerke, $farbe, $fuellart, $fuellfarbe, 2273 $parameter, gettexthier() ); 2274 2275 settexthier(""); 2276 2277 } 2278 } 2279 2280 elsif ( $zeile =~ 2281 /^barplot( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( r=([-0-9\.]+))?$/i 2282 ) 2283 { 2284 setachsengraph( 0, 0, 0, 0 ); 2285 settexthier(""); 2286 $anfang = 0; 2287 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 2288 "" ); 2289 $layer = $2 if ( defined $1 ); 2290 2291 if ( defined $3 ) { 2292 $farbe = $4; 2293 $fuellart = $5; 2294 $fuellfarbe = $6; 2295 } 2296 2297 if ( defined $7 ) { 2298 $linienstaerke = $8; 2299 $linienart = $9; 2300 } 2301 $farbe = $11 if ( defined $10 ); 2302 if ( defined $12 ) { $parameter = $13; } 2303 else { $parameter = ""; } 2304 2305 if ( defined $14 ) { $breite = $15 } 2306 else { $breite = 1; } 2307 2308 $endeerreicht = 0; 2309 2310 while (( !$endeerreicht ) 2311 && ( $i < $eingabedateizeilen - 1 ) ) 2312 { 2313 $i++; 2314 $hilfszeile = $eingabedatei[$i]; 2315 if ( $hilfszeile =~ /^ende$/i ) { 2316 $endeerreicht = 1; 2317 } 2318 elsif ( $hilfszeile =~ /^([-0-9\.]+),([-0-9\.]+)$/i ) { 2319 saeule( $layer, $1 - $breite / 2, 2320 0, $breite, $2, $farbe, $fuellart, $fuellfarbe, $linienart, $linienstaerke, 2321 "", 0, 0, "s", $parameter ); 2322 setachsengraph( $1, $2, $1, $2 ); 2323 2324 # setachsengraph( $1-$breite/2, $2, $1+$breite/2, $2 ); 2325 } 2326 2327 else { 2328 printf("Kaputte Zeile beim Balkendiagramm\n"); 2329 $endeerreicht = 1; 2330 2331 } 2332 } 2333 if ( !$endeerreicht ) { printf("Keine sinnvollen Daten\n"); } 2334 else { 2335 2336 settexthier(""); 2337 2338 } 2339 } 2340 2341 # Ober und Untersumme werden gezeichnet 2342 elsif ( $zeile =~ 2343 /^oberuntersumme( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))? [x|p]=([-0-9\.]+),([-0-9\.]+)( [y|p]=([-0-9\.]+),([-0-9\.]+))? n=([1-9][0-9]*)( summen=(ober|unter|beide))? (.*)$/i 2344 ) 2345 { 2346 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 2347 "" ); 2348 $layer = $2 if ( defined $1 ); 2349 2350 if ( defined $3 ) { 2351 $farbe = $4; 2352 $fuellart = $5; 2353 $fuellfarbe = $6; 2354 } 2355 $linienstaerke = 0.2; 2356 2357 if ( defined $7 ) { 2358 $linienstaerke = $8; 2359 $linienart = $9; 2360 } 2361 $farbe = $11 if ( defined $10 ); 2362 $xmin = $12; 2363 $xmax = $13; 2364 if ( defined $14 ) { 2365 $ymin = $15; 2366 $ymax = $16; 2367 } 2368 $schachtelung = $17; 2369 $summen = "beide"; 2370 $summen = $19 if ( defined $18 ); 2371 $func = $20; 2372 if ( !defined $14 ) { 2373 $ymin = calcymin( $func, $xmin, $xmax ); 2374 $ymax = calcymax( $func, $xmin, $xmax ); 2375 } 2376 oberuntersumme( 2377 $layer, $func, $xmin, $ymin, $xmax, 2378 $ymax, $farbe, $fuellart, $fuellfarbe, $linienart, 2379 $linienstaerke, $schachtelung, $summen 2380 ); 2381 2382 } 2383 2384 # Zeichnen von Flaechen zwischen zwei Funktionen 2385 elsif ( $zeile =~ 2386 /^einschluss( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? [x|p]=([-0-9\.]+),([-0-9\.]+)( [y|p]=([-0-9\.]+),([-0-9\.]+))?( schnitt=(links|rechts|beide|keine))? ([^, ]*)(,([^, ]*))?$/i 2387 ) 2388 { 2389 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 2390 "" ); 2391 $layer = $2 if ( defined $1 ); 2392 2393 if ( defined $3 ) { 2394 $farbe = $4; 2395 $fuellart = $5; 2396 $fuellfarbe = $6; 2397 } 2398 $linienstaerke = 0.2; 2399 2400 if ( defined $7 ) { 2401 $linienstaerke = $8; 2402 $linienart = $9; 2403 } 2404 $farbe = $11 if ( defined $10 ); 2405 2406 if ( defined $12 ) { $parameter = $13; } 2407 2408 $xmin = $14; 2409 $xmax = $15; 2410 if ( defined $16 ) { 2411 $ymin = $17; 2412 $ymax = $18; 2413 } 2414 $schnittpunkte = "keine"; 2415 $schnittpunkte = $20 if ( defined $19 ); 2416 $func1 = $21; 2417 $func2 = "0"; 2418 $func2 = $23 if ( defined $22 ); 2419 if ( !defined $16 ) { 2420 $ymin = calcfymin( $func1, $func2, $xmin, $xmax ); 2421 $ymax = calcfymax( $func1, $func2, $xmin, $xmax ); 2422 } 2423 setminmaxachsen( $xmin, "x", "min" ); 2424 setminmaxachsen( $xmax, "x", "max" ); 2425 setminmaxachsen( $ymin, "y", "min" ); 2426 setminmaxachsen( $ymax, "y", "max" ); 2427 einschluss( 2428 $layer, $func1, $func2, $xmin, $ymin, 2429 $xmax, $ymax, $schnittpunkte, $farbe, $fuellart, 2430 $fuellfarbe, $linienart, $linienstaerke, $parameter 2431 ); 2432 2433 } 2434 2435 elsif ( $zeile =~ 2436 /^einschlussanfang( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?$/i 2437 ) 2438 { 2439 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 2440 "" ); 2441 $layer = $2 if ( defined $1 ); 2442 2443 if ( defined $3 ) { 2444 $farbe = $4; 2445 $fuellart = $5; 2446 $fuellfarbe = $6; 2447 } 2448 $linienstaerke = 0.2; 2449 2450 if ( defined $7 ) { 2451 $linienstaerke = $8; 2452 $linienart = $9; 2453 } 2454 $farbe = $11 if ( defined $10 ); 2455 einschlussanfang( $layer, $farbe, $fuellart, $fuellfarbe, $linienart, $linienstaerke, 2456 $parameter ); 2457 } 2458 2459 elsif ( $zeile =~ 2460 /^einschlussende( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?$/i 2461 ) 2462 { 2463 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 2464 "" ); 2465 $layer = $2 if ( defined $1 ); 2466 2467 if ( defined $3 ) { 2468 $farbe = $4; 2469 $fuellart = $5; 2470 $fuellfarbe = $6; 2471 } 2472 $linienstaerke = 0.2; 2473 2474 if ( defined $7 ) { 2475 $linienstaerke = $8; 2476 $linienart = $9; 2477 } 2478 $farbe = $11 if ( defined $10 ); 2479 einschlussende( $layer, $farbe, $fuellart, $fuellfarbe, $linienart, $linienstaerke, 2480 $parameter ); 2481 } 2482 2483 elsif ( $zeile =~ 2484 /^xachsenpunkt( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))? [x|p]=([-0-9\.]+)( text=\"([^\"]*))?\"$/i 2485 ) 2486 { 2487 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 2488 "" ); 2489 $layer = $2 if ( defined $1 ); 2490 $farbe = $4 if ( defined $3 ); 2491 $x = $5; 2492 $text = ""; 2493 $text = $7 if ( defined $6 ); 2494 2495 if ( get3dzeichnen() == 1 ) { 2496 xmarkierung3d( $layer, $x, $text, $farbe ); 2497 } 2498 else { xmarkierung( $layer, $x, $text, $farbe ); } 2499 2500 } 2501 2502 elsif ( $zeile =~ 2503 /^xachsenpunktohne( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))? [x|p]=([-0-9\.]+)( text=\"([^\"]*))?\"$/i 2504 ) 2505 { 2506 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 2507 "" ); 2508 $layer = $2 if ( defined $1 ); 2509 $farbe = $4 if ( defined $3 ); 2510 $x = $5; 2511 $text = ""; 2512 $text = $7 if ( defined $6 ); 2513 2514 if ( get3dzeichnen() == 1 ) { 2515 xmarkierung3d( $layer, $x, $text, $farbe ); 2516 } 2517 else { xmarkierungohne( $layer, $x, $text, $farbe ); } 2518 2519 } 2520 2521 elsif ( $zeile =~ 2522 /^yachsenpunkt( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))? [y|p]=([-0-9\.]+)( text=\"([^\"]*))?\"$/i 2523 ) 2524 { 2525 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 2526 "" ); 2527 $layer = $2 if ( defined $1 ); 2528 $farbe = $4 if ( defined $3 ); 2529 $y = $5; 2530 $text = ""; 2531 $text = $7 if ( defined $6 ); 2532 2533 if ( get3dzeichnen() == 1 ) { 2534 ymarkierung3d( $layer, $y, $text, $farbe ); 2535 } 2536 else { ymarkierung( $layer, $y, $text, $farbe ); } 2537 2538 } 2539 2540 elsif ( $zeile =~ 2541 /^yachsenpunktohne( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))? [y|p]=([-0-9\.]+)( text=\"([^\"]*))?\"$/i 2542 ) 2543 { 2544 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 2545 "" ); 2546 $layer = $2 if ( defined $1 ); 2547 $farbe = $4 if ( defined $3 ); 2548 $y = $5; 2549 $text = ""; 2550 $text = $7 if ( defined $6 ); 2551 2552 if ( get3dzeichnen() == 1 ) { 2553 ymarkierung3d( $layer, $y, $text, $farbe ); 2554 } 2555 else { ymarkierungohne( $layer, $y, $text, $farbe ); } 2556 2557 } 2558 2559 elsif ( $zeile =~ 2560 /^zachsenpunkt( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))? z=([-0-9\.]+)( text=\"([^\"]*))?\"$/i 2561 ) 2562 { 2563 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 2564 "" ); 2565 $layer = $2 if ( defined $1 ); 2566 $farbe = $4 if ( defined $3 ); 2567 $z = $5; 2568 $text = ""; 2569 $text = $7 if ( defined $6 ); 2570 2571 zmarkierung3d( $layer, $z, $text, $farbe ); 2572 2573 } 2574 2575 elsif ( $zeile =~ 2576 /^xpfeil( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))? p=([-0-9\.]+)(,([-0-9\.]+))?( text=\"([^\"]*))?\"$/i 2577 ) 2578 { 2579 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 2580 "" ); 2581 $layer = $2 if ( defined $1 ); 2582 $farbe = $4 if ( defined $3 ); 2583 $linienstaerke = 0.2; 2584 2585 if ( defined $5 ) { 2586 $linienstaerke = $6; 2587 $linienart = $7; 2588 } 2589 $x = $8; 2590 $y = 1; 2591 $y = $10 if ( defined $9 ); 2592 $text = ""; 2593 $text = $12 if ( defined $11 ); 2594 xpfeil( $layer, $x, $y, $text, $farbe, $linienstaerke, $linienart ); 2595 2596 } 2597 2598 elsif ( $zeile =~ 2599 /^xpfeilkasten( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))? p=([-0-9\.]+)(,([-0-9\.]+))?( text=\"([^\"]*))?\"$/i 2600 ) 2601 { 2602 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 2603 "" ); 2604 $layer = $2 if ( defined $1 ); 2605 $farbe = $4 if ( defined $3 ); 2606 $linienstaerke = 0.2; 2607 2608 if ( defined $5 ) { 2609 $linienstaerke = $6; 2610 $linienart = $7; 2611 } 2612 $x = $8; 2613 $y = 1; 2614 $y = $10 if ( defined $9 ); 2615 $text = ""; 2616 $text = $12 if ( defined $11 ); 2617 xpfeilkasten( $layer, $x, $y, $text, $farbe, $linienstaerke, $linienart ); 2618 2619 } 2620 2621 elsif ( $zeile =~ 2622 /^ypfeil( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))? p=(([-0-9\.]+),)?([-0-9\.]+)( text=\"([^\"]*))?\"$/i 2623 ) 2624 { 2625 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 2626 "" ); 2627 $layer = $2 if ( defined $1 ); 2628 $farbe = $4 if ( defined $3 ); 2629 $linienstaerke = 0.2; 2630 2631 if ( defined $5 ) { 2632 $linienstaerke = $6; 2633 $linienart = $7; 2634 } 2635 $y = $10; 2636 $x = 1; 2637 $x = $9 if ( defined $8 ); 2638 $text = ""; 2639 $text = $12 if ( defined $11 ); 2640 ypfeil( $layer, $x, $y, $text, $farbe, $linienstaerke, $linienart ); 2641 2642 } 2643 2644 elsif ( $zeile =~ 2645 /^ypfeilkasten( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))? p=(([-0-9\.]+),)?([-0-9\.]+)( text=\"([^\"]*))?\"$/i 2646 ) 2647 { 2648 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 2649 "" ); 2650 $layer = $2 if ( defined $1 ); 2651 $farbe = $4 if ( defined $3 ); 2652 $linienstaerke = 0.2; 2653 2654 if ( defined $5 ) { 2655 $linienstaerke = $6; 2656 $linienart = $7; 2657 } 2658 $y = $10; 2659 $x = 1; 2660 $x = $9 if ( defined $8 ); 2661 $text = ""; 2662 $text = $12 if ( defined $11 ); 2663 ypfeilkasten( $layer, $x, $y, $text, $farbe, $linienstaerke, $linienart ); 2664 2665 } 2666 2667 elsif ( $zeile =~ 2668 /^zpfeil( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))? p=([-0-9\.]+)(,([-0-9\.]+))?( text=\"([^\"]*))?\"$/i 2669 ) 2670 { 2671 $layer = 90; 2672 $layer = $2 if ( defined $1 ); 2673 $farbe = $4 if ( defined $3 ); 2674 $linienstaerke = 0.2; 2675 2676 if ( defined $5 ) { 2677 $linienstaerke = $6; 2678 $linienart = $7; 2679 } 2680 $z = $8; 2681 $y = 1; 2682 $y = $10 if ( defined $9 ); 2683 $text = ""; 2684 $text = $12 if ( defined $11 ); 2685 zpfeil( $layer, $z, $y, $text, $farbe, $linienstaerke, $linienart ); 2686 2687 } 2688 elsif ( $zeile =~ 2689 /^graphmarkierung( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z]+),(x|y|xy))?( parameter=\"([^\"]*)\")? [x|p]=([-0-9\.]+)( [y|p]=([-0-9\.]+))?( text=\"([^\"]*)\","([^\"]*)\")?( ([^ ]*))?$/i 2690 ) 2691 { 2692 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 2693 "" ); 2694 $layer = $2 if ( defined $1 ); 2695 $farbe = $4 if ( defined $3 ); 2696 $linienstaerke = 0.2; 2697 2698 $linie = "xy"; 2699 if ( defined $5 ) { 2700 $linienstaerke = $6; 2701 $linienart = $7; 2702 $linie = $8; 2703 } 2704 2705 if ( defined $9 ) { $parameter = $10; } 2706 2707 $x = $11; 2708 $xtext = ""; 2709 $ytext = ""; 2710 if ( defined $14 ) { 2711 $xtext = $15; 2712 $ytext = $16; 2713 } 2714 $func = 0; 2715 $func = $18 if ( defined $17 ); 2716 if ( dreidimensional( $func, "y" ) == 0 ) { 2717 $y = calcfunk( $func, "x", $x ); 2718 } 2719 if ( defined $12 ) { $y = $13; } 2720 else { $y = calcfunk( $func, "x", $x ); } 2721 2722 markierung( 2723 $layer, $func, $x, $y, 2724 $xtext, $ytext, $farbe, $linienart, 2725 $linienstaerke, $linie, $parameter 2726 ); 2727 2728 } 2729 elsif ( $zeile =~ 2730 /^punkt( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))?( r=([-0-9\.]+))?( text=\"([^\"]*)\")?(,([-0-9\.]+))?$/i 2731 ) 2732 { 2733 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 2734 "" ); 2735 $layer = $2 if ( defined $1 ); 2736 2737 $fuellart = "solid"; 2738 $fuellfarbe = "black"; 2739 if ( defined $3 ) { 2740 $farbe = $4; 2741 $fuellart = $5; 2742 $fuellfarbe = $6; 2743 } 2744 2745 if ( defined $7 ) { 2746 $linienstaerke = $8; 2747 $linienart = $9; 2748 } 2749 $farbe = $11 if ( defined $10 ); 2750 2751 if ( defined $12 ) { $parameter = $13; } 2752 2753 $x = $14; 2754 $y = $15; 2755 if ( defined $16 ) { $z = $17; } 2756 else { $z = ""; } 2757 $radius = 0.05; 2758 $radius = $19 if ( defined $18 ); 2759 $text = ""; 2760 $text = $21 if ( defined $20 ); 2761 $ausrichtung = 45; 2762 $ausrichtung = $23 if ( defined $22 ); 2763 punktzeichnen( 2764 $layer, $x, $y, $z, $radius, 2765 $ausrichtung, $farbe, $fuellart, $fuellfarbe, $linienart, 2766 $linienstaerke, $text, $parameter 2767 ); 2768 2769 } 2770 2771 elsif ( $zeile =~ 2772 /^kreuz( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))?( r=([-0-9\.]+))?(,([-0-9\.]+))?( text=\"([^\"]*)\")?(,([-0-9\.]+))?$/i 2773 ) 2774 { 2775 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 2776 "" ); 2777 $layer = $2 if ( defined $1 ); 2778 if ( defined $3 ) { 2779 $farbe = $4; 2780 } 2781 2782 if ( defined $5 ) { 2783 $linienstaerke = $6; 2784 $linienart = $7; 2785 } 2786 if ( defined $8 ) { $parameter = $9; } 2787 2788 $x = $10; 2789 $y = $11; 2790 if ( defined $12 ) { $z = $13; } 2791 else { $z = ""; } 2792 $radius = 0.5; 2793 $radius = $15 if ( defined $14 ); 2794 $winkel = 45; 2795 $winkel = $17 if ( defined $16 ); 2796 $text = ""; 2797 $text = $19 if ( defined $18 ); 2798 $ausrichtung = 45; 2799 $ausrichtung = $21 if ( defined $20 ); 2800 2801 kreuzzeichnen( 2802 $layer, $x, $y, $z, 2803 $radius, $winkel, $farbe, $linienart, 2804 $linienstaerke, $text, $ausrichtung, $parameter 2805 ); 2806 2807 } 2808 2809 elsif ( $zeile =~ 2810 /^kreuz( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),\"([^\"]*)\"( r=([-0-9\.]+))?(,([-0-9\.]+))?( text=\"([^\"]*)\")?(,([-0-9\.]+))?$/i 2811 ) 2812 { 2813 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 2814 "" ); 2815 $layer = $2 if ( defined $1 ); 2816 2817 if ( defined $3 ) { 2818 $farbe = $4; 2819 } 2820 2821 if ( defined $5 ) { 2822 $linienstaerke = $6; 2823 $linienart = $7; 2824 } 2825 if ( defined $8 ) { $parameter = $9; } 2826 2827 $x = $10; 2828 $func = $11; 2829 $radius = 0.5; 2830 $radius = $13 if ( defined $12 ); 2831 $winkel = 45; 2832 $winkel = $15 if ( defined $14 ); 2833 $text = ""; 2834 $text = $17 if ( defined $16 ); 2835 $ausrichtung = 45; 2836 $ausrichtung = $19 if ( defined $18 ); 2837 2838 kreuzzeichnen( $layer, $x, calcfunk( $func, "x", $x ), 2839 "", $radius, $winkel, $farbe, $linienart, $linienstaerke, $text, $ausrichtung, 2840 $parameter ); 2841 2842 } 2843 2844 elsif ( $zeile =~ 2845 /^punkt( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),\"([^\"]*)\"( r=([-0-9\.]+))?( text=\"([^\"]*)\")?(,([-0-9\.]+))?$/i 2846 ) 2847 { 2848 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 2849 "" ); 2850 $layer = $2 if ( defined $1 ); 2851 2852 $fuellart = "solid"; 2853 $fuellfarbe = "black"; 2854 if ( defined $3 ) { 2855 $farbe = $4; 2856 $fuellart = $5; 2857 $fuellfarbe = $6; 2858 } 2859 2860 if ( defined $7 ) { 2861 $linienstaerke = $8; 2862 $linienart = $9; 2863 } 2864 $farbe = $11 if ( defined $10 ); 2865 2866 if ( defined $12 ) { $parameter = $13; } 2867 2868 $x = $14; 2869 $func = $15; 2870 2871 $radius = 0.05; 2872 $radius = $17 if ( defined $16 ); 2873 $text = ""; 2874 $text = $19 if ( defined $18 ); 2875 $ausrichtung = 45; 2876 $ausrichtung = $21 if ( defined $20 ); 2877 punktzeichnen( $layer, $x, calcfunk( $func, "x", $x ), 2878 "", $radius, $ausrichtung, $farbe, $fuellart, $fuellfarbe, $linienart, 2879 $linienstaerke, $text, $parameter ); 2880 2881 } 2882 2883 elsif ( $zeile =~ 2884 /^beschriftung( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))? p=([-0-9\.]+),\"([^\"]*)\" text=\"([^\"]*)\"(,([-0-9\.]+))?(,([a-z0-9!]+))?(,([-0-9\.]+))?$/i 2885 ) 2886 { 2887 $layer = 10; 2888 $layer = $2 if ( defined $1 ); 2889 $farbe = "black"; 2890 $farbe = $4 if ( defined $3 ); 2891 $x = $5; 2892 $func = $6; 2893 $text = $7; 2894 $winkel = 0; 2895 $ausrichtung = "c"; 2896 $dy = 0; 2897 2898 $winkel = $9 if ( defined $8 ); 2899 $ausrichtung = $11 if ( defined $10 ); 2900 $dy = $13 if ( defined $12 ); 2901 beschriftung( $layer, $farbe, $x, calcfunk( $func, "x", $x ) + $dy, 2902 $winkel, $ausrichtung, $text ); 2903 2904 } 2905 2906 elsif ( $zeile =~ 2907 /^beschriftung( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))? p=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+) text=\"([^\"]*)\"(,([-0-9\.]+))?(,([a-z0-9!]+))?$/i 2908 ) 2909 { 2910 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 2911 "" ); 2912 $layer = $2 if ( defined $1 ); 2913 2914 $farbe = $4 if ( defined $3 ); 2915 $x = $5; 2916 $y = $6; 2917 $z = $7; 2918 $text = $8; 2919 2920 $winkel = 0; 2921 $ausrichtung = "c"; 2922 $winkel = $10 if ( defined $9 ); 2923 $ausrichtung = $12 if ( defined $11 ); 2924 beschriftung3d( $layer, $farbe, $x, $y, $z, $winkel, $ausrichtung, $text ); 2925 2926 } 2927 2928 elsif ( $zeile =~ 2929 /^beschriftung( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))? p=([-0-9\.]+),([-0-9\.]+) text=\"([^\"]*)\"(,([-0-9\.]+))?(,([a-z0-9!]+))?$/i 2930 ) 2931 { 2932 $layer = 10; 2933 $layer = $2 if ( defined $1 ); 2934 $farbe = "black"; 2935 $farbe = $4 if ( defined $3 ); 2936 $x = $5; 2937 $y = $6; 2938 $text = $7; 2939 $winkel = 0; 2940 $ausrichtung = "c"; 2941 $winkel = $9 if ( defined $8 ); 2942 $ausrichtung = $11 if ( defined $10 ); 2943 beschriftung( $layer, $farbe, $x, $y, $winkel, $ausrichtung, $text ); 2944 2945 } 2946 2947 elsif ( $zeile =~ 2948 /^beschriftungkreis( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))? p=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+),([-0-9\.]+) text=\"([^\"]*)\"(,([-0-9\.]+),([a-z0-9!]+))?$/i 2949 ) 2950 { 2951 $layer = 10; 2952 $layer = $2 if ( defined $1 ); 2953 $farbe = "black"; 2954 $farbe = $4 if ( defined $3 ); 2955 $x = $5; 2956 $y = $6; 2957 $radius = $7; 2958 $winkel = $8; 2959 $text = $9; 2960 $winkelrichtung = 0; 2961 $ausrichtung = "c"; 2962 if ( defined $10 ) { 2963 $winkelrichtung = $11; 2964 $ausrichtung = $12; 2965 } 2966 2967 kreistext( $layer, $x, $y, $radius, $winkel, $farbe, $text, $winkelrichtung, 2968 $ausrichtung ); 2969 2970 } 2971 2972 elsif ( $zeile =~ 2973 /^tangente( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?( parameter=\"([^\"]*)\")? [x|p]=([-0-9\.]+)( dx=([-0-9\.]+))? (.*)$/i 2974 ) 2975 { 2976 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 2977 "" ); 2978 $layer = $2 if ( defined $1 ); 2979 $farbe = $4 if ( defined $3 ); 2980 2981 if ( defined $5 ) { 2982 $linienstaerke = $6; 2983 $linienart = $7; 2984 } 2985 2986 if ( defined $8 ) { $parameter = $9; } 2987 2988 $x = $10; 2989 $dx = 0.5; 2990 $dx = $12 if ( defined $11 ); 2991 $func = $13; 2992 tangente( $layer, $func, $x, $dx, $farbe, $linienart, $linienstaerke, $parameter ); 2993 2994 } 2995 elsif ( $zeile =~ 2996 /^tangentendreieck( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?( parameter=\"([^\"]*)\")? [x|p]=([-0-9\.]+)( dx=([-0-9\.]+))? (.*)$/i 2997 ) 2998 { 2999 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 3000 "" ); 3001 $layer = $2 if ( defined $1 ); 3002 $farbe = $4 if ( defined $3 ); 3003 3004 if ( defined $5 ) { 3005 $linienstaerke = $6; 3006 $linienart = $7; 3007 } 3008 if ( defined $8 ) { $parameter = $9; } 3009 3010 $x = $10; 3011 $dx = 0.5; 3012 $dx = $12 if ( defined $11 ); 3013 $func = $13; 3014 kommentar( $layer, "Ein Tangentendreieck wird gezeichnet" ); 3015 tangentendreieck( $layer, $func, $x, $dx, $farbe, $linienart, $linienstaerke, 3016 $parameter ); 3017 3018 } 3019 3020 elsif ( $zeile =~ 3021 /^sekante( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?( parameter=\"([^\"]*)\")? [x|p]=([-0-9\.]+)( dx=([-0-9\.]+))? (.*)$/i 3022 ) 3023 { 3024 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 3025 "" ); 3026 $layer = $2 if ( defined $1 ); 3027 $farbe = $4 if ( defined $3 ); 3028 3029 if ( defined $5 ) { 3030 $linienstaerke = $6; 3031 $linienart = $7; 3032 } 3033 3034 if ( defined $8 ) { $parameter = $9; } 3035 3036 $x = $10; 3037 $dx = 0.5; 3038 $dx = $12 if ( defined $11 ); 3039 $func = $13; 3040 sekante( $layer, $func, $x, $dx, $farbe, $linienart, $linienstaerke, $parameter ); 3041 3042 } 3043 3044 elsif ( $zeile =~ 3045 /^sekantendreieck( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?( parameter=\"([^\"]*)\")? [x|p]=([-0-9\.]+)( dx=([-0-9\.]+))? (.*)$/i 3046 ) 3047 { 3048 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 3049 "" ); 3050 $layer = $2 if ( defined $1 ); 3051 $farbe = $4 if ( defined $3 ); 3052 3053 if ( defined $5 ) { 3054 $linienstaerke = $6; 3055 $linienart = $7; 3056 } 3057 if ( defined $8 ) { $parameter = $9; } 3058 3059 $x = $10; 3060 $dx = 0.5; 3061 $dx = $12 if ( defined $11 ); 3062 $func = $13; 3063 sekantendreieck( $layer, $func, $x, $dx, $farbe, $linienart, $linienstaerke, 3064 $parameter ); 3065 3066 } 3067 elsif ( $zeile =~ 3068 /^saeule( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+) r=([-0-9\.]+),([-0-9\.]+)( text=\"([^\"]*)\")?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 3069 ) 3070 { 3071 setsaeule(); 3072 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 3073 "" ); 3074 $layer = $2 if ( defined $1 ); 3075 3076 if ( defined $3 ) { 3077 $farbe = $4; 3078 $fuellart = $5; 3079 $fuellfarbe = $6; 3080 } 3081 $linienstaerke = 0.2; 3082 3083 if ( defined $7 ) { 3084 $linienstaerke = $8; 3085 $linienart = $9; 3086 } 3087 $farbe = $11 if ( defined $10 ); 3088 if ( defined $12 ) { $parameter = $13; } 3089 3090 $x = $14; 3091 $y = $15; 3092 $dx = $16; 3093 $dy = $17; 3094 $text = ""; 3095 $text = $19 if ( defined $18 ); 3096 $textwinkel = 0; 3097 $textausrichtung = "auf"; 3098 3099 if ( defined $20 ) { 3100 $textwinkel = $21; 3101 $textausrichtung = $22; 3102 } 3103 saeule( $layer, $x, $y, $dx, $dy, $farbe, $fuellart, $fuellfarbe, $linienart, 3104 $linienstaerke, $text, $textwinkel, $textausrichtung, "s", $parameter ); 3105 3106 } 3107 elsif ( $zeile =~ 3108 /^balken( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+) r=([-0-9\.]+),([-0-9\.]+)( text=\"([^\"]*)\")?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 3109 ) 3110 { 3111 setbalken(); 3112 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 3113 "" ); 3114 $layer = $2 if ( defined $1 ); 3115 3116 if ( defined $3 ) { 3117 $farbe = $4; 3118 $fuellart = $5; 3119 $fuellfarbe = $6; 3120 } 3121 $linienstaerke = 0.2; 3122 3123 if ( defined $7 ) { 3124 $linienstaerke = $8; 3125 $linienart = $9; 3126 } 3127 $farbe = $11 if ( defined $10 ); 3128 3129 if ( defined $12 ) { $parameter = $13; } 3130 3131 $x = $14; 3132 $y = $15; 3133 $dy = $16; 3134 $dx = $17; 3135 $text = ""; 3136 $text = $19 if ( defined $18 ); 3137 $textwinkel = 0; 3138 $textausrichtung = "auf"; 3139 3140 if ( defined $20 ) { 3141 $textwinkel = $21; 3142 $textausrichtung = $22; 3143 } 3144 saeule( $layer, $x, $y, $dx, $dy, $farbe, $fuellart, $fuellfarbe, $linienart, 3145 $linienstaerke, $text, $textwinkel, $textausrichtung, "b", $parameter ); 3146 3147 } 3148 3149 # Zeichnen von mehreren Sauelen 3150 elsif ( $zeile =~ 3151 /^saeulendiagramm( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( p=([-0-9\.]+),([-0-9\.]+))?( r=([-0-9\.]+),([-0-9\.]+))?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 3152 ) 3153 { 3154 $n = $j = 0; 3155 setsaeule(); 3156 3157 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 3158 "" ); 3159 $layer = $2 if ( defined $1 ); 3160 3161 if ( defined $3 ) { 3162 $farbe = $4; 3163 $fuellart = $5; 3164 $fuellfarbe = $6; 3165 } 3166 $linienstaerke = 0.2; 3167 3168 if ( defined $7 ) { 3169 $linienstaerke = $8; 3170 $linienart = $9; 3171 } 3172 $farbe = $11 if ( defined $10 ); 3173 if ( defined $12 ) { $parameter = $13; } 3174 3175 $x = 0; 3176 $y = 0; 3177 if ( defined $14 ) { 3178 $x = $15; 3179 $y = $16; 3180 } 3181 $dx = 1; 3182 $abstand = 1; 3183 if ( defined $17 ) { 3184 $dx = $18; 3185 $abstand = $19; 3186 } 3187 $textwinkel = 90; 3188 $textausrichtung = "auf"; 3189 if ( defined $20 ) { 3190 $textwinkel = $21; 3191 $textausrichtung = $22; 3192 } 3193 $x2 = $x1; 3194 $y2 = $y1; 3195 $endeerreicht = 0; 3196 $inzeile = 0; 3197 $merkei = $i; 3198 while (( !$endeerreicht ) 3199 && ( $i < $eingabedateizeilen - 1 ) ) 3200 { 3201 $i++; 3202 $hilfszeile = $eingabedatei[$i]; 3203 if ( $hilfszeile =~ /^ende$/i ) { 3204 $endeerreicht = 1; 3205 3206 } 3207 elsif ( $hilfszeile =~ 3208 /^([-0-9\.]+)( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( r=([-0-9\.]+),([-0-9\.]+))?( text=\"([^\"]*)\")?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 3209 ) 3210 { 3211 if ( getrelativ() == 1 ) { 3212 $absolut += $1; 3213 $j++; 3214 setmarkierung( "Prozent", "y" ); 3215 } 3216 else { 3217 $absolut = $absolut; 3218 $j++; 3219 } 3220 } 3221 else { 3222 kommentar( $layer, "Kaputte Zeile" ); 3223 $endeerreicht = 1; 3224 3225 } 3226 } 3227 3228 if ( $absolut == 1 ) { $absolut = $absolut; } 3229 else { $absolut = $absolut / 100; } 3230 $endeerreicht = 0; 3231 $inzeile = 0; 3232 $i = $merkei; 3233 3234 while (( !$endeerreicht ) 3235 && ( $i < $eingabedateizeilen - 1 ) ) 3236 { 3237 $i++; 3238 $hilfszeile = $eingabedatei[$i]; 3239 if ( $hilfszeile =~ /^ende$/i ) { 3240 $endeerreicht = 1; 3241 3242 } 3243 elsif ( $hilfszeile =~ 3244 /^([-0-9\.]+)( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( r=([-0-9\.]+),([-0-9\.]+))?( text=\"([^\"]*)\")?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 3245 ) 3246 { 3247 $dy = $1; 3248 $farbeersatz = $farbe; 3249 $fuellartersatz = $fuellart; 3250 $fuellfarbeersatz = $fuellfarbe; 3251 $parameterersatz = $parameter; 3252 if ( defined $2 ) { 3253 $farbeersatz = $3; 3254 $fuellartersatz = $4; 3255 $fuellfarbeersatz = $5; 3256 } 3257 if ( $farbverlauf == 1 ) { 3258 $fuellfarbeersatz = farbverlauf( $fuellfarbe, $i ); 3259 } 3260 else { $fuellfarbeersatz = $fuellfarbeersatz; } 3261 3262 $linienstaerkeersatz = $linienstaerke; 3263 $linienartersatz = $linienart; 3264 if ( defined $6 ) { 3265 $linienstaerkeersatz = $7; 3266 $linienartersatz = $8; 3267 } 3268 $farbe = $10 if ( defined $9 ); 3269 if ( defined $11 ) { $parameterersatz = $12; } 3270 3271 $dxersatz = $dx; 3272 $abstandersatz = $abstand; 3273 if ( defined $13 ) { 3274 $dxersatz = $14; 3275 $abstandersatz = $15; 3276 } 3277 $text = ""; 3278 $text = $17 if ( defined $16 ); 3279 $textwinkelersatz = $textwinkel; 3280 $textausrichtungersatz = $textausrichtung; 3281 if ( defined $18 ) { 3282 $textwinkelersatz = $19; 3283 $textausrichtungersatz = $20; 3284 } 3285 $inzeile++; 3286 saeule( 3287 $layer, $x, $y, 3288 $dxersatz, $dy / $absolut, $farbeersatz, 3289 $fuellartersatz, $fuellfarbeersatz, $linienartersatz, 3290 $linienstaerkeersatz, $text, $textwinkelersatz, 3291 $textausrichtungersatz, "s", $parameterersatz 3292 ); 3293 $x = $x + $dxersatz + $abstandersatz; 3294 } 3295 else { 3296 kommentar( $layer, "Kaputte Zeile" ); 3297 $endeerreicht = 1; 3298 3299 } 3300 } 3301 3302 if ( !$endeerreicht ) { 3303 printf("%Keine sinnvollen Daten\n"); 3304 } 3305 } 3306 3307 # Zeichnen von mehreren Sauelen 3308 elsif ( $zeile =~ 3309 /^saeulendiagramm( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( r=([-0-9\.]+))?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 3310 ) 3311 { 3312 $n = $j = 0; 3313 setsaeule(); 3314 3315 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 3316 "" ); 3317 $layer = $2 if ( defined $1 ); 3318 3319 if ( defined $3 ) { 3320 $farbe = $4; 3321 $fuellart = $5; 3322 $fuellfarbe = $6; 3323 } 3324 $linienstaerke = 0.2; 3325 3326 if ( defined $7 ) { 3327 $linienstaerke = $8; 3328 $linienart = $9; 3329 } 3330 $farbe = $11 if ( defined $10 ); 3331 if ( defined $12 ) { $parameter = $13; } 3332 3333 $breite = 1; 3334 if ( defined $14 ) { 3335 $breite = $15; 3336 } 3337 $textwinkel = 90; 3338 $textausrichtung = "auf"; 3339 if ( defined $16 ) { 3340 $textwinkel = $17; 3341 $textausrichtung = $18; 3342 } 3343 $endeerreicht = 0; 3344 $inzeile = 0; 3345 $merkei = $i; 3346 while (( !$endeerreicht ) 3347 && ( $i < $eingabedateizeilen - 1 ) ) 3348 { 3349 $i++; 3350 $hilfszeile = $eingabedatei[$i]; 3351 if ( $hilfszeile =~ /^ende$/i ) { 3352 $endeerreicht = 1; 3353 3354 } 3355 elsif ( $hilfszeile =~ 3356 /^([-0-9\.]+),([-0-9\.]+)( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( r=([-0-9\.]+))?( text=\"([^\"]*)\")?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 3357 ) 3358 { 3359 if ( getrelativ() == 1 ) { 3360 $absolut += $2; 3361 $j++; 3362 setmarkierung( "Prozent", "y" ); 3363 } 3364 else { 3365 $absolut = $absolut; 3366 $j++; 3367 } 3368 } 3369 else { 3370 kommentar( $layer, "Kaputte Zeile" ); 3371 $endeerreicht = 1; 3372 3373 } 3374 } 3375 3376 if ( $absolut == 1 ) { $absolut = $absolut; } 3377 else { $absolut = $absolut / 100; } 3378 $endeerreicht = 0; 3379 $inzeile = 0; 3380 $i = $merkei; 3381 3382 while (( !$endeerreicht ) 3383 && ( $i < $eingabedateizeilen - 1 ) ) 3384 { 3385 $i++; 3386 $hilfszeile = $eingabedatei[$i]; 3387 if ( $hilfszeile =~ /^ende$/i ) { 3388 $endeerreicht = 1; 3389 3390 } 3391 elsif ( $hilfszeile =~ 3392 /^([-0-9\.]+),([-0-9\.]+)( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( r=([-0-9\.]+))?( text=\"([^\"]*)\")?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 3393 ) 3394 { 3395 $x = $1; 3396 $dy = $2; 3397 $farbeersatz = $farbe; 3398 $fuellartersatz = $fuellart; 3399 $fuellfarbeersatz = $fuellfarbe; 3400 $parameterersatz = $parameter; 3401 if ( defined $3 ) { 3402 $farbeersatz = $4; 3403 $fuellartersatz = $5; 3404 $fuellfarbeersatz = $6; 3405 } 3406 if ( $farbverlauf == 1 ) { 3407 $fuellfarbeersatz = farbverlauf( $fuellfarbe, $i ); 3408 } 3409 else { $fuellfarbeersatz = $fuellfarbeersatz; } 3410 3411 $linienstaerkeersatz = $linienstaerke; 3412 $linienartersatz = $linienart; 3413 if ( defined $7 ) { 3414 $linienstaerkeersatz = $8; 3415 $linienartersatz = $9; 3416 } 3417 $farbe = $11 if ( defined $10 ); 3418 if ( defined $12 ) { $parameterersatz = $13; } 3419 3420 $breiteersatz = $breite; 3421 if ( defined $14 ) { 3422 $breiteersatz = $15; 3423 } 3424 $text = ""; 3425 $text = $17 if ( defined $16 ); 3426 $textwinkelersatz = $textwinkel; 3427 $textausrichtungersatz = $textausrichtung; 3428 if ( defined $18 ) { 3429 $textwinkelersatz = $19; 3430 $textausrichtungersatz = $20; 3431 } 3432 $inzeile++; 3433 saeule( 3434 $layer, $x - $breiteersatz / 2, 3435 0, $breiteersatz, 3436 $dy / $absolut, $farbeersatz, 3437 $fuellartersatz, $fuellfarbeersatz, 3438 $linienartersatz, $linienstaerkeersatz, 3439 $text, $textwinkelersatz, 3440 $textausrichtungersatz, "s", 3441 $parameterersatz 3442 ); 3443 } 3444 else { 3445 kommentar( $layer, "Kaputte Zeile" ); 3446 $endeerreicht = 1; 3447 3448 } 3449 } 3450 3451 if ( !$endeerreicht ) { 3452 printf("%Keine sinnvollen Daten\n"); 3453 } 3454 } 3455 3456 elsif ( $zeile =~ 3457 /^saeulendiagrammdreieck( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( p=([-0-9\.]+),([-0-9\.]+))?( r=([-0-9\.]+),([-0-9\.]+))?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 3458 ) 3459 { 3460 setsaeule(); 3461 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 3462 "" ); 3463 $layer = $2 if ( defined $1 ); 3464 3465 if ( defined $3 ) { 3466 $farbe = $4; 3467 $fuellart = $5; 3468 $fuellfarbe = $6; 3469 } 3470 $linienstaerke = 0.2; 3471 3472 if ( defined $7 ) { 3473 $linienstaerke = $8; 3474 $linienart = $9; 3475 } 3476 $farbe = $11 if ( defined $10 ); 3477 if ( defined $12 ) { $parameter = $13; } 3478 3479 $x = 0; 3480 $y = 0; 3481 if ( defined $14 ) { 3482 $x = $15; 3483 $y = $16; 3484 } 3485 $dx = 1; 3486 $abstand = 1; 3487 if ( defined $17 ) { 3488 $dx = $18; 3489 $abstand = $19; 3490 } 3491 $textwinkel = 90; 3492 $textausrichtung = "auf"; 3493 if ( defined $20 ) { 3494 $textwinkel = $21; 3495 $textausrichtung = $22; 3496 } 3497 $x2 = $x1; 3498 $y2 = $y1; 3499 $endeerreicht = 0; 3500 $inzeile = 0; 3501 while (( !$endeerreicht ) 3502 && ( $i < $eingabedateizeilen - 1 ) ) 3503 { 3504 $i++; 3505 $hilfszeile = $eingabedatei[$i]; 3506 if ( $hilfszeile =~ /^ende$/i ) { 3507 $endeerreicht = 1; 3508 3509 } 3510 elsif ( $hilfszeile =~ 3511 /^([-0-9\.]+)( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( r=([-0-9\.]+),([-0-9\.]+))?( text=\"([^\"]*)\")?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 3512 ) 3513 { 3514 $dy = $1; 3515 $farbeersatz = $farbe; 3516 $fuellartersatz = $fuellart; 3517 $fuellfarbeersatz = $fuellfarbe; 3518 $parameterersatz = $parameter; 3519 if ( defined $2 ) { 3520 $farbeersatz = $3; 3521 $fuellartersatz = $4; 3522 $fuellfarbeersatz = $5; 3523 } 3524 $linienstaerkeersatz = $linienstaerke; 3525 $linienartersatz = $linienart; 3526 if ( defined $6 ) { 3527 $linienstaerkeersatz = $7; 3528 $linienartersatz = $8; 3529 } 3530 $farbe = $10 if ( defined $9 ); 3531 if ( defined $11 ) { $parameterersatz = $12; } 3532 3533 $dxersatz = $dx; 3534 $abstandersatz = $abstand; 3535 if ( defined $13 ) { 3536 $dxersatz = $14; 3537 $abstandersatz = $15; 3538 } 3539 $text = ""; 3540 $text = $17 if ( defined $16 ); 3541 $textwinkelersatz = $textwinkel; 3542 $textausrichtungersatz = $textausrichtung; 3543 if ( defined $18 ) { 3544 $textwinkelersatz = $19; 3545 $textausrichtungersatz = $20; 3546 } 3547 $inzeile++; 3548 saeuledreieck( 3549 $layer, $x, $y, 3550 $dxersatz, $dy, $farbeersatz, 3551 $fuellartersatz, $fuellfarbeersatz, $linienartersatz, 3552 $linienstaerkeersatz, $text, $textwinkelersatz, 3553 $textausrichtungersatz, "s", $parameterersatz 3554 ); 3555 $x = $x + $dxersatz + $abstandersatz; 3556 } 3557 else { 3558 kommentar( $layer, "Kaputte Zeile" ); 3559 $endeerreicht = 1; 3560 3561 } 3562 } 3563 if ( !$endeerreicht ) { printf("%Keine sinnvollen Daten\n"); } 3564 } 3565 3566 elsif ( $zeile =~ 3567 /^saeulendiagrammdreieck( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( r=([-0-9\.]+))?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 3568 ) 3569 { 3570 $n = $j = 0; 3571 setsaeule(); 3572 3573 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 3574 "" ); 3575 $layer = $2 if ( defined $1 ); 3576 3577 if ( defined $3 ) { 3578 $farbe = $4; 3579 $fuellart = $5; 3580 $fuellfarbe = $6; 3581 } 3582 $linienstaerke = 0.2; 3583 3584 if ( defined $7 ) { 3585 $linienstaerke = $8; 3586 $linienart = $9; 3587 } 3588 $farbe = $11 if ( defined $10 ); 3589 if ( defined $12 ) { $parameter = $13; } 3590 3591 $breite = 1; 3592 if ( defined $14 ) { 3593 $breite = $15; 3594 } 3595 $textwinkel = 90; 3596 $textausrichtung = "auf"; 3597 if ( defined $16 ) { 3598 $textwinkel = $17; 3599 $textausrichtung = $18; 3600 } 3601 $endeerreicht = 0; 3602 $inzeile = 0; 3603 $merkei = $i; 3604 while (( !$endeerreicht ) 3605 && ( $i < $eingabedateizeilen - 1 ) ) 3606 { 3607 $i++; 3608 $hilfszeile = $eingabedatei[$i]; 3609 if ( $hilfszeile =~ /^ende$/i ) { 3610 $endeerreicht = 1; 3611 3612 } 3613 elsif ( $hilfszeile =~ 3614 /^([-0-9\.]+),([-0-9\.]+)( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( r=([-0-9\.]+))?( text=\"([^\"]*)\")?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 3615 ) 3616 { 3617 if ( getrelativ() == 1 ) { 3618 $absolut += $2; 3619 $j++; 3620 setmarkierung( "Prozent", "y" ); 3621 } 3622 else { 3623 $absolut = $absolut; 3624 $j++; 3625 } 3626 } 3627 else { 3628 kommentar( $layer, "Kaputte Zeile" ); 3629 $endeerreicht = 1; 3630 3631 } 3632 } 3633 3634 if ( $absolut == 1 ) { $absolut = $absolut; } 3635 else { $absolut = $absolut / 100; } 3636 $endeerreicht = 0; 3637 $inzeile = 0; 3638 $i = $merkei; 3639 3640 while (( !$endeerreicht ) 3641 && ( $i < $eingabedateizeilen - 1 ) ) 3642 { 3643 $i++; 3644 $hilfszeile = $eingabedatei[$i]; 3645 if ( $hilfszeile =~ /^ende$/i ) { 3646 $endeerreicht = 1; 3647 3648 } 3649 elsif ( $hilfszeile =~ 3650 /^([-0-9\.]+),([-0-9\.]+)( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( r=([-0-9\.]+))?( text=\"([^\"]*)\")?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 3651 ) 3652 { 3653 $x = $1; 3654 $dy = $2; 3655 $farbeersatz = $farbe; 3656 $fuellartersatz = $fuellart; 3657 $fuellfarbeersatz = $fuellfarbe; 3658 $parameterersatz = $parameter; 3659 if ( defined $3 ) { 3660 $farbeersatz = $4; 3661 $fuellartersatz = $5; 3662 $fuellfarbeersatz = $6; 3663 } 3664 if ( $farbverlauf == 1 ) { 3665 $fuellfarbeersatz = farbverlauf( $fuellfarbe, $i ); 3666 } 3667 else { $fuellfarbeersatz = $fuellfarbeersatz; } 3668 3669 $linienstaerkeersatz = $linienstaerke; 3670 $linienartersatz = $linienart; 3671 if ( defined $7 ) { 3672 $linienstaerkeersatz = $8; 3673 $linienartersatz = $9; 3674 } 3675 $farbe = $11 if ( defined $10 ); 3676 if ( defined $12 ) { $parameterersatz = $13; } 3677 3678 $breiteersatz = $breite; 3679 if ( defined $14 ) { 3680 $breiteersatz = $15; 3681 } 3682 $text = ""; 3683 $text = $17 if ( defined $16 ); 3684 $textwinkelersatz = $textwinkel; 3685 $textausrichtungersatz = $textausrichtung; 3686 if ( defined $18 ) { 3687 $textwinkelersatz = $19; 3688 $textausrichtungersatz = $20; 3689 } 3690 $inzeile++; 3691 saeuledreieck( 3692 $layer, $x - $breiteersatz / 2, 3693 0, $breiteersatz, 3694 $dy / $absolut, $farbeersatz, 3695 $fuellartersatz, $fuellfarbeersatz, 3696 $linienartersatz, $linienstaerkeersatz, 3697 $text, $textwinkelersatz, 3698 $textausrichtungersatz, "s", 3699 $parameterersatz 3700 ); 3701 } 3702 else { 3703 kommentar( $layer, "Kaputte Zeile" ); 3704 $endeerreicht = 1; 3705 3706 } 3707 } 3708 3709 if ( !$endeerreicht ) { 3710 printf("%Keine sinnvollen Daten\n"); 3711 } 3712 } 3713 3714 elsif ( $zeile =~ 3715 /^saeulendiagrammgestapelt( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( p=([-0-9\.]+),([-0-9\.]+))?( r=([-0-9\.]+),([-0-9\.]+))?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 3716 ) 3717 { 3718 setsaeule(); 3719 standard( 10, getlinienart(), 0.2, getfarbe(), "", getfuellfarbe(), "", "" ); 3720 $layer = $2 if ( defined $1 ); 3721 3722 if ( defined $3 ) { 3723 $farbe = $4; 3724 $fuellart = $5; 3725 $fuellfarbe = $6; 3726 } 3727 3728 if ( defined $7 ) { 3729 $linienstaerke = $8; 3730 $linienart = $9; 3731 } 3732 $farbe = $11 if ( defined $10 ); 3733 if ( defined $12 ) { $parameter = $13; } 3734 3735 $x = 0; 3736 $y = 0; 3737 if ( defined $14 ) { 3738 $x = $15; 3739 $y = $16; 3740 } 3741 $dx = 1; 3742 $hoehe = 10; 3743 if ( defined $17 ) { 3744 $dx = $18; 3745 $hoehe = $19; 3746 } 3747 $textwinkel = 90; 3748 $textausrichtung = "auf"; 3749 if ( defined $20 ) { 3750 $textwinkel = $21; 3751 $textausrichtung = $22; 3752 } 3753 $x2 = $x1; 3754 $y2 = $y1; 3755 $endeerreicht = 0; 3756 $absolutwert = $n = $j = 0; 3757 $inzeile = 0; 3758 $merkei = $i; 3759 while (( !$endeerreicht ) 3760 && ( $i < $eingabedateizeilen - 1 ) ) 3761 { 3762 $i++; 3763 $hilfszeile = $eingabedatei[$i]; 3764 if ( $hilfszeile =~ /^ende$/i ) { 3765 $endeerreicht = 1; 3766 3767 } 3768 elsif ( $hilfszeile =~ 3769 /^([-0-9\.]+)( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-za0-9!]+))?( parameter=\"([^\"]*)\")?( text=\"([^\"]*)\")?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 3770 ) 3771 { 3772 if ( getrelativ() == 1 ) { 3773 $absolutwert = $absolutwert + $1; 3774 setmarkierung( "Prozent", "y" ); 3775 $j++; 3776 } 3777 else { 3778 $absolutwert = 1; 3779 $j++; 3780 } 3781 } 3782 else { 3783 kommentar( $layer, "Kaputte Zeile" ); 3784 $endeerreicht = 1; 3785 } 3786 } 3787 $i = $merkei; 3788 $endeerreicht = 0; 3789 $inzeile = 0; 3790 if ( $absolutwert == 1 ) { $absolutwert = $absolutwert; } 3791 else { $absolutwert = $absolutwert / 100; } 3792 while (( !$endeerreicht ) 3793 && ( $i < $eingabedateizeilen - 1 ) ) 3794 { 3795 $i++; 3796 $hilfszeile = $eingabedatei[$i]; 3797 if ( $hilfszeile =~ /^ende$/i ) { 3798 $endeerreicht = 1; 3799 } 3800 elsif ( $hilfszeile =~ 3801 /^([-0-9\.]+)( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-za0-9!]+))?( parameter=\"([^\"]*)\")?( text=\"([^\"]*)\")?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 3802 ) 3803 { 3804 $dy = $1 / $absolutwert; 3805 $farbeersatz = $farbe; 3806 $fuellartersatz = $fuellart; 3807 $fuellfarbeersatz = $fuellfarbe; 3808 $parameterersatz = $parameter; 3809 if ( defined $2 ) { 3810 $farbeersatz = $3; 3811 $fuellartersatz = $4; 3812 $fuellfarbeersatz = $5; 3813 } 3814 3815 if ( $fuellfarbeersatz eq $fuellfarbe ) { 3816 if ( $farbverlauf == 1 ) { 3817 $fuellfarbeersatz = farbverlauf( $fuellfarbe, $i ); 3818 } 3819 else { $fuellfarbeersatz = $fuellfarbeersatz; } 3820 } 3821 $linienstaerkeersatz = $linienstaerke; 3822 $linienartersatz = $linienart; 3823 if ( defined $6 ) { 3824 $linienstaerkeersatz = $7; 3825 $linienartersatz = $8; 3826 } 3827 $farbe = $10 if ( defined $9 ); 3828 if ( defined $11 ) { $parameterersatz = $12; } 3829 3830 $text = ""; 3831 $text = $14 if ( defined $13 ); 3832 $textwinkelersatz = $textwinkel; 3833 $textausrichtungersatz = $textausrichtung; 3834 if ( defined $15 ) { 3835 $textwinkelersatz = $16; 3836 $textausrichtungersatz = $17; 3837 } 3838 $inzeile++; 3839 achsengraph( $x + $dx + $dx / 2, $y + $dy ); 3840 saeule( 3841 $layer, $x, $y, 3842 $dx, $dy, $farbeersatz, 3843 $fuellartersatz, $fuellfarbeersatz, $linienartersatz, 3844 $linienstaerkeersatz, $text, $textwinkelersatz, 3845 $textausrichtungersatz, "s", $parameterersatz 3846 ); 3847 $y = $y + $dy; 3848 } 3849 else { 3850 kommentar( $layer, "Kaputte Zeile" ); 3851 $endeerreicht = 1; 3852 } 3853 } 3854 if ( !$endeerreicht ) { printf("%Keine sinnvollen Daten\n"); } 3855 } 3856 elsif ( $zeile =~ 3857 /^tortendiagramm( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( p=([-0-9\.]+),([-0-9\.]+))?( r=([0-9\.]+),([0-9\.]+))?(,([0-9\.]+))?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 3858 ) 3859 { 3860 standard( 10, getlinienart(), 0.2, getfarbe(), "", getfuellfarbe(), "", "" ); 3861 $n = 0; 3862 $j = 0; 3863 $layer = $2 if ( defined $1 ); 3864 3865 if ( defined $3 ) { 3866 $farbe = $4; 3867 $fuellart = $5; 3868 $fuellfarbe = $6; 3869 } 3870 3871 if ( defined $7 ) { 3872 $linienstaerke = $8; 3873 $linienart = $9; 3874 } 3875 $farbe = $11 if ( defined $10 ); 3876 if ( defined $12 ) { $parameter = $13; } 3877 3878 $x1 = 0; 3879 $y1 = 0; 3880 if ( defined $14 ) { 3881 $x1 = $15; 3882 $y1 = $16; 3883 } 3884 $radius = 2; 3885 $abstand = 0; 3886 if ( defined $17 ) { 3887 $radius = $18; 3888 $abstand = $19; 3889 } 3890 $startwinkel = 0; 3891 $startwinkel = $21 if ( defined $20 ); 3892 $textwinkel = 0; 3893 $textausrichtung = "auf"; 3894 if ( defined $22 ) { 3895 $textwinkel = $23; 3896 $textausrichtung = $24; 3897 } 3898 $x2 = $x1; 3899 $y2 = $y1; 3900 $endeerreicht = 0; 3901 $inzeile = 0; 3902 $absolutwert = $n = $j = 0; 3903 $merkei = $i; 3904 while (( !$endeerreicht ) 3905 && ( $i < $eingabedateizeilen - 1 ) ) 3906 { 3907 $i++; 3908 $hilfszeile = $eingabedatei[$i]; 3909 if ( $hilfszeile =~ /^ende$/i ) { $endeerreicht = 1; } 3910 elsif ( $hilfszeile =~ 3911 /^([-0-9\.]+)( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( r=([0-9\.]+),([0-9\.]+))?( text=\"([^\"]*)\")?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 3912 ) 3913 { 3914 $absolutwert = $absolutwert + $1; 3915 $j++; 3916 } 3917 else { $endeerreicht = 1; } 3918 } 3919 $endeerreicht = 0; 3920 $inzeile = 0; 3921 $i = $merkei; 3922 3923 $winkelstart = $startwinkel; 3924 while (( !$endeerreicht ) 3925 && ( $i < $eingabedateizeilen - 1 ) ) 3926 { 3927 $i++; 3928 $hilfszeile = $eingabedatei[$i]; 3929 if ( $hilfszeile =~ /^ende$/i ) { $endeerreicht = 1; } 3930 elsif ( $hilfszeile =~ 3931 /^([-0-9\.]+)( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( r=([0-9\.]+),([0-9\.]+))?( text=\"([^\"]*)\")?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 3932 ) 3933 { 3934 $wert = $1; 3935 $farbeersatz = $farbe; 3936 $fuellartersatz = $fuellart; 3937 3938 $fuellfarbeersatz = $fuellfarbe; 3939 $parameterersatz = $parameter; 3940 if ( defined $2 ) { 3941 $farbeersatz = $3; 3942 $fuellartersatz = $4; 3943 $fuellfarbeersatz = $5; 3944 } 3945 3946 if ( $fuellfarbeersatz eq $fuellfarbe ) { 3947 if ( $farbverlauf == 1 ) { 3948 $fuellfarbeersatz = farbverlauf( $fuellfarbe, $i ); 3949 } 3950 else { $fuellfarbeersatz = $fuellfarbeersatz; } 3951 } 3952 3953 $linienstaerkeersatz = $linienstaerke; 3954 $linienartersatz = $linienart; 3955 if ( defined $6 ) { 3956 $linienstaerkeersatz = $7; 3957 $linienartersatz = $8; 3958 } 3959 $farbe = $10 if ( defined $9 ); 3960 if ( defined $11 ) { $parameterersatz = $12; } 3961 3962 $radiusersatz = $radius; 3963 $abstandersatz = $abstand; 3964 if ( defined $13 ) { 3965 $radiusersatz = $14; 3966 $abstandersatz = $15; 3967 } 3968 $text = ""; 3969 $text = $17 if ( defined $16 ); 3970 $textwinkelersatz = $textwinkel; 3971 $textausrichtungersatz = $textausrichtung; 3972 if ( defined $18 ) { 3973 $textwinkelersatz = $19; 3974 $textausrichtungersatz = $20; 3975 } 3976 $winkel = sprintf( "%0.4f", ( ( $wert / $absolutwert ) * 360 ) ); 3977 $inzeile++; 3978 3979 torte( 3980 $layer, $x2, $y2, 3981 $winkel, $winkelstart, $radiusersatz, 3982 $abstandersatz, $farbe, $fuellartersatz, 3983 $fuellfarbeersatz, $linienartersatz, $linienstaerkeersatz, 3984 $text, $textwinkelersatz, $textausrichtungersatz, 3985 $parameterersatz 3986 ); 3987 $winkelstart = $winkelstart + $winkel; 3988 } 3989 else { 3990 kommentar( $layer, "Kaputte Zeile" ); 3991 $endeerreicht = 1; 3992 } 3993 } 3994 if ( !$endeerreicht ) { printf("%Keine sinnvollen Daten\n"); } 3995 } 3996 elsif ( $zeile =~ 3997 /^ringdiagramm( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( p=([-0-9\.]+),([-0-9\.]+))?( r=([0-9\.]+),([0-9\.]+))?(,([0-9\.]+))?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 3998 ) 3999 { 4000 $abstand = 0; 4001 standard( 10, getlinienart(), 0.2, getfarbe(), "", getfuellfarbe(), "", "" ); 4002 $layer = $2 if ( defined $1 ); 4003 4004 if ( defined $3 ) { 4005 $farbe = $4; 4006 $fuellart = $5; 4007 $fuellfarbe = $6; 4008 } 4009 4010 if ( defined $7 ) { 4011 $linienstaerke = $8; 4012 $linienart = $9; 4013 } 4014 $farbe = $11 if ( defined $10 ); 4015 if ( defined $12 ) { $parameter = $13; } 4016 4017 $x1 = 0; 4018 $y1 = 0; 4019 if ( defined $14 ) { 4020 $x1 = $15; 4021 $y1 = $16; 4022 } 4023 $radius = 2; 4024 $dicke = 0; 4025 if ( defined $17 ) { 4026 $radius = $18; 4027 $dicke = $19; 4028 } 4029 $startwinkel = 0; 4030 $startwinkel = $21 if ( defined $20 ); 4031 $textwinkel = 0; 4032 $textausrichtung = "auf"; 4033 if ( defined $22 ) { 4034 $textwinkel = $23; 4035 $textausrichtung = $24; 4036 } 4037 $x2 = $x1; 4038 $y2 = $y1; 4039 $endeerreicht = 0; 4040 $inzeile = 0; 4041 $absolutwert = $n = $j = 0; 4042 $merkei = $i; 4043 while (( !$endeerreicht ) 4044 && ( $i < $eingabedateizeilen - 1 ) ) 4045 { 4046 $i++; 4047 $hilfszeile = $eingabedatei[$i]; 4048 if ( $hilfszeile =~ /^ende$/i ) { 4049 $endeerreicht = 1; 4050 } 4051 elsif ( $hilfszeile =~ 4052 /^([-0-9\.]+)( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( r=([0-9\.]+),([0-9\.]+),([0-9\.]+))?( text=\"([^\"]*)\")?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 4053 ) 4054 { 4055 $absolutwert = $absolutwert + $1; 4056 $j++; 4057 } 4058 else { $endeerreicht = 1; } 4059 } 4060 $endeerreicht = 0; 4061 $inzeile = 0; 4062 $i = $merkei; 4063 $winkelstart = $startwinkel; 4064 while (( !$endeerreicht ) 4065 && ( $i < $eingabedateizeilen - 1 ) ) 4066 { 4067 $i++; 4068 $hilfszeile = $eingabedatei[$i]; 4069 if ( $hilfszeile =~ /^ende$/i ) { 4070 $endeerreicht = 1; 4071 } 4072 elsif ( $hilfszeile =~ 4073 /^([-0-9\.]+)( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( r=([0-9\.]+),([0-9\.]+),([0-9\.]+))?( text=\"([^\"]*)\")?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 4074 ) 4075 { 4076 $wert = $1; 4077 $farbeersatz = $farbe; 4078 $fuellartersatz = $fuellart; 4079 $fuellfarbeersatz = $fuellfarbe; 4080 $parameterersatz = $parameter; 4081 if ( defined $2 ) { 4082 $farbeersatz = $3; 4083 $fuellartersatz = $4; 4084 $fuellfarbeersatz = $5; 4085 } 4086 4087 if ( $fuellfarbeersatz eq $fuellfarbe ) { 4088 if ( $farbverlauf == 1 ) { 4089 $fuellfarbeersatz = farbverlauf( $fuellfarbe, $i ); 4090 } 4091 else { $fuellfarbeersatz = $fuellfarbeersatz; } 4092 } 4093 4094 $linienstaerkeersatz = $linienstaerke; 4095 $linienartersatz = $linienart; 4096 if ( defined $6 ) { 4097 $linienstaerkeersatz = $7; 4098 $linienartersatz = $8; 4099 } 4100 $farbe = $10 if ( defined $9 ); 4101 if ( defined $11 ) { $parameterersatz = $12; } 4102 4103 $radiusersatz = $radius; 4104 $dickeersatz = $dicke; 4105 $abstandersatz = $abstand; 4106 if ( defined $13 ) { 4107 $radiusersatz = $14; 4108 $dickeersatz = $15; 4109 $abstandersatz = $16; 4110 } 4111 $text = ""; 4112 $text = $18 if ( defined $17 ); 4113 $textwinkelersatz = $textwinkel; 4114 $textausrichtungersatz = $textausrichtung; 4115 if ( defined $19 ) { 4116 $textwinkelersatz = $20; 4117 $textausrichtungersatz = $21; 4118 } 4119 $winkel = sprintf( "%0.4f", ( ( $wert / $absolutwert ) * 360 ) ); 4120 $inzeile++; 4121 ringdiagramm( 4122 $layer, $x2, $y2, 4123 $winkel, $winkelstart, $radiusersatz, 4124 $dickeersatz, $abstandersatz, $farbe, 4125 $fuellartersatz, $fuellfarbeersatz, $linienartersatz, 4126 $linienstaerkeersatz, $text, $textwinkelersatz, 4127 $textausrichtungersatz, $parameterersatz 4128 ); 4129 $winkelstart = $winkelstart + $winkel; 4130 } 4131 else { 4132 kommentar( $layer, "Kaputte Zeile" ); 4133 $endeerreicht = 1; 4134 } 4135 } 4136 if ( !$endeerreicht ) { 4137 printf("%Keine sinnvollen Daten\n"); 4138 } 4139 } 4140 elsif ( $zeile =~ 4141 /^balkendiagramm( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( p=([-0-9\.]+),([-0-9\.]+))?( r=([-0-9\.]+),([-0-9\.]+))?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 4142 ) 4143 { 4144 setbalken(); 4145 standard( 10, getlinienart(), 0.2, getfarbe(), "", getfuellfarbe(), "", "" ); 4146 $layer = $2 if ( defined $1 ); 4147 4148 if ( defined $3 ) { 4149 $farbe = $4; 4150 $fuellart = $5; 4151 $fuellfarbe = $6; 4152 } 4153 4154 if ( defined $7 ) { 4155 $linienstaerke = $8; 4156 $linienart = $9; 4157 } 4158 $farbe = $11 if ( defined $10 ); 4159 if ( defined $12 ) { $parameter = $13; } 4160 4161 $x1 = 0; 4162 $y1 = 0; 4163 if ( defined $14 ) { 4164 $x1 = $15; 4165 $y1 = $16; 4166 } 4167 $dy = 1; 4168 $abstand = 1; 4169 if ( defined $17 ) { 4170 $dy = $18; 4171 $abstand = $19; 4172 } 4173 $textwinkel = 0; 4174 $textausrichtung = "auf"; 4175 if ( defined $20 ) { 4176 $textwinkel = $21; 4177 $textausrichtung = $22; 4178 } 4179 $x = $x1; 4180 $y = $y1; 4181 $endeerreicht = 0; 4182 $inzeile = 0; 4183 $merkei = $i; 4184 while ( ( !$endeerreicht ) && ( $i < $eingabedateizeilen - 1 ) ) { 4185 $i++; 4186 $hilfszeile = $eingabedatei[$i]; 4187 if ( $hilfszeile =~ /^ende$/i ) { $endeerreicht = 1; } 4188 elsif ( $hilfszeile =~ 4189 /^([-0-9\.]+)( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( r=([-0-9\.]+),([-0-9\.]+))?( text=\"([^\"]*)\")?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 4190 ) 4191 { 4192 if ( getrelativ() == 1 ) { 4193 $absolut += $1; 4194 $j++; 4195 setmarkierung( "Prozent", "x" ); 4196 } 4197 else { 4198 $absolut = $absolut; 4199 $j++; 4200 } 4201 4202 } 4203 else { 4204 kommentar( $layer, "Kaputte Zeile" ); 4205 $endeerreicht = 1; 4206 } 4207 } 4208 $endeerreicht = 0; 4209 $inzeile = 0; 4210 $i = $merkei; 4211 if ( $absolut == 1 ) { $absolut = $absolut; } 4212 else { $absolut = $absolut / 100; } 4213 while ( ( !$endeerreicht ) && ( $i < $eingabedateizeilen - 1 ) ) { 4214 $i++; 4215 $hilfszeile = $eingabedatei[$i]; 4216 if ( $hilfszeile =~ /^ende$/i ) { $endeerreicht = 1; } 4217 elsif ( $hilfszeile =~ 4218 /^([-0-9\.]+)( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( r=([-0-9\.]+),([-0-9\.]+))?( text=\"([^\"]*)\")?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 4219 ) 4220 { 4221 $dx = $1; 4222 $farbeersatz = $farbe; 4223 $fuellartersatz = $fuellart; 4224 $fuellfarbeersatz = $fuellfarbe; 4225 $parameterersatz = $parameter; 4226 if ( defined $2 ) { 4227 $farbeersatz = $3; 4228 $fuellartersatz = $4; 4229 $fuellfarbeersatz = $5; 4230 } 4231 4232 if ( $fuellfarbeersatz eq $fuellfarbe ) { 4233 if ( $farbverlauf == 1 ) { 4234 $fuellfarbeersatz = farbverlauf( $fuellfarbe, $i ); 4235 } 4236 else { $fuellfarbeersatz = $fuellfarbeersatz; } 4237 } 4238 4239 $linienstaerkeersatz = $linienstaerke; 4240 $linienartersatz = $linienart; 4241 if ( defined $6 ) { 4242 $linienstaerkeersatz = $7; 4243 $linienartersatz = $8; 4244 } 4245 $farbe = $10 if ( defined $9 ); 4246 if ( defined $11 ) { $parameterersatz = $12; } 4247 $dyersatz = $dy; 4248 $abstandersatz = $abstand; 4249 if ( defined $13 ) { 4250 $dyersatz = $14; 4251 $abstandersatz = $15; 4252 } 4253 $text = ""; 4254 $text = $17 if ( defined $16 ); 4255 $textwinkelersatz = $textwinkel; 4256 $textausrichtungersatz = $textausrichtung; 4257 4258 if ( defined $18 ) { 4259 $textwinkelersatz = $19; 4260 $textausrichtungersatz = $20; 4261 } 4262 $inzeile++; 4263 saeule( 4264 $layer, $x, $y, 4265 $dx / $absolut, $dyersatz, $farbeersatz, 4266 $fuellartersatz, $fuellfarbeersatz, $linienartersatz, 4267 $linienstaerkeersatz, $text, $textwinkelersatz, 4268 $textausrichtungersatz, "b", $parameterersatz 4269 ); 4270 $y = $y + $dyersatz + $abstandersatz; 4271 } 4272 else { 4273 kommentar( $layer, "Kaputte Zeile" ); 4274 $endeerreicht = 1; 4275 } 4276 } 4277 4278 if ( !$endeerreicht ) { 4279 printf("%Keine sinnvollen Daten\n"); 4280 } 4281 $absolut = 1; 4282 } 4283 4284 elsif ( $zeile =~ 4285 /^balkendiagramm( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( r=([-0-9\.]+))?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 4286 ) 4287 { 4288 setbalken(); 4289 standard( 10, getlinienart(), 0.2, getfarbe(), "", getfuellfarbe(), "", "" ); 4290 $layer = $2 if ( defined $1 ); 4291 4292 if ( defined $3 ) { 4293 $farbe = $4; 4294 $fuellart = $5; 4295 $fuellfarbe = $6; 4296 } 4297 4298 if ( defined $7 ) { 4299 $linienstaerke = $8; 4300 $linienart = $9; 4301 } 4302 $farbe = $11 if ( defined $10 ); 4303 if ( defined $12 ) { $parameter = $13; } 4304 4305 $hoehe = 1; 4306 if ( defined $14 ) { $hoehe = $15; } 4307 $textwinkel = 0; 4308 $textausrichtung = "auf"; 4309 if ( defined $16 ) { 4310 $textwinkel = $17; 4311 $textausrichtung = $18; 4312 } 4313 $endeerreicht = 0; 4314 $inzeile = 0; 4315 $merkei = $i; 4316 while ( ( !$endeerreicht ) && ( $i < $eingabedateizeilen - 1 ) ) { 4317 $i++; 4318 $hilfszeile = $eingabedatei[$i]; 4319 if ( $hilfszeile =~ /^ende$/i ) { $endeerreicht = 1; } 4320 elsif ( $hilfszeile =~ 4321 /^([-0-9\.]+),([-0-9\.]+)( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( r=([-0-9\.]+))?( text=\"([^\"]*)\")?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 4322 ) 4323 { 4324 if ( getrelativ() == 1 ) { 4325 $absolut += $1; 4326 $j++; 4327 setmarkierung( "Prozent", "x" ); 4328 } 4329 else { 4330 $absolut = $absolut; 4331 $j++; 4332 } 4333 4334 } 4335 else { 4336 kommentar( $layer, "Kaputte Zeile" ); 4337 $endeerreicht = 1; 4338 } 4339 } 4340 $endeerreicht = 0; 4341 $inzeile = 0; 4342 $i = $merkei; 4343 if ( $absolut == 1 ) { $absolut = $absolut; } 4344 else { $absolut = $absolut / 100; } 4345 while ( ( !$endeerreicht ) && ( $i < $eingabedateizeilen - 1 ) ) { 4346 $i++; 4347 $hilfszeile = $eingabedatei[$i]; 4348 if ( $hilfszeile =~ /^ende$/i ) { $endeerreicht = 1; } 4349 elsif ( $hilfszeile =~ 4350 /^([-0-9\.]+),([-0-9\.]+)( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( r=([-0-9\.]+))?( text=\"([^\"]*)\")?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 4351 ) 4352 { 4353 $dx = $1; 4354 $y = $2; 4355 $farbeersatz = $farbe; 4356 $fuellartersatz = $fuellart; 4357 $fuellfarbeersatz = $fuellfarbe; 4358 $parameterersatz = $parameter; 4359 if ( defined $3 ) { 4360 $farbeersatz = $4; 4361 $fuellartersatz = $5; 4362 $fuellfarbeersatz = $6; 4363 } 4364 4365 if ( $fuellfarbeersatz eq $fuellfarbe ) { 4366 if ( $farbverlauf == 1 ) { 4367 $fuellfarbeersatz = farbverlauf( $fuellfarbe, $i ); 4368 } 4369 else { $fuellfarbeersatz = $fuellfarbeersatz; } 4370 } 4371 4372 $linienstaerkeersatz = $linienstaerke; 4373 $linienartersatz = $linienart; 4374 if ( defined $7 ) { 4375 $linienstaerkeersatz = $8; 4376 $linienartersatz = $9; 4377 } 4378 $farbe = $11 if ( defined $10 ); 4379 if ( defined $12 ) { $parameterersatz = $13; } 4380 $hoeheersatz = $hoehe; 4381 if ( defined $14 ) { 4382 $hoeheersatz = $15; 4383 } 4384 $text = ""; 4385 $text = $17 if ( defined $16 ); 4386 $textwinkelersatz = $textwinkel; 4387 $textausrichtungersatz = $textausrichtung; 4388 4389 if ( defined $18 ) { 4390 $textwinkelersatz = $19; 4391 $textausrichtungersatz = $20; 4392 } 4393 $inzeile++; 4394 saeule( 4395 $layer, 0, 4396 $y - $hoeheersatz / 2, $dx / $absolut, 4397 $hoeheersatz, $farbeersatz, 4398 $fuellartersatz, $fuellfarbeersatz, 4399 $linienartersatz, $linienstaerkeersatz, 4400 $text, $textwinkelersatz, 4401 $textausrichtungersatz, "b", 4402 $parameterersatz 4403 ); 4404 } 4405 else { 4406 kommentar( $layer, "Kaputte Zeile" ); 4407 $endeerreicht = 1; 4408 } 4409 } 4410 4411 if ( !$endeerreicht ) { 4412 printf("%Keine sinnvollen Daten\n"); 4413 } 4414 $absolut = 1; 4415 } 4416 4417 elsif ( $zeile =~ 4418 /^balkendiagrammdreieck( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( r=([-0-9\.]+))?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 4419 ) 4420 { 4421 setbalken(); 4422 standard( 10, getlinienart(), 0.2, getfarbe(), "", getfuellfarbe(), "", "" ); 4423 $layer = $2 if ( defined $1 ); 4424 4425 if ( defined $3 ) { 4426 $farbe = $4; 4427 $fuellart = $5; 4428 $fuellfarbe = $6; 4429 } 4430 4431 if ( defined $7 ) { 4432 $linienstaerke = $8; 4433 $linienart = $9; 4434 } 4435 $farbe = $11 if ( defined $10 ); 4436 if ( defined $12 ) { $parameter = $13; } 4437 4438 $hoehe = 1; 4439 if ( defined $14 ) { $hoehe = $15; } 4440 $textwinkel = 0; 4441 $textausrichtung = "auf"; 4442 if ( defined $16 ) { 4443 $textwinkel = $17; 4444 $textausrichtung = $18; 4445 } 4446 $endeerreicht = 0; 4447 $inzeile = 0; 4448 $merkei = $i; 4449 while ( ( !$endeerreicht ) && ( $i < $eingabedateizeilen - 1 ) ) { 4450 $i++; 4451 $hilfszeile = $eingabedatei[$i]; 4452 if ( $hilfszeile =~ /^ende$/i ) { $endeerreicht = 1; } 4453 elsif ( $hilfszeile =~ 4454 /^([-0-9\.]+),([-0-9\.]+)( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( r=([-0-9\.]+))?( text=\"([^\"]*)\")?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 4455 ) 4456 { 4457 if ( getrelativ() == 1 ) { 4458 $absolut += $1; 4459 $j++; 4460 setmarkierung( "Prozent", "x" ); 4461 } 4462 else { 4463 $absolut = $absolut; 4464 $j++; 4465 } 4466 4467 } 4468 else { 4469 kommentar( $layer, "Kaputte Zeile" ); 4470 $endeerreicht = 1; 4471 } 4472 } 4473 $endeerreicht = 0; 4474 $inzeile = 0; 4475 $i = $merkei; 4476 if ( $absolut == 1 ) { $absolut = $absolut; } 4477 else { $absolut = $absolut / 100; } 4478 while ( ( !$endeerreicht ) && ( $i < $eingabedateizeilen - 1 ) ) { 4479 $i++; 4480 $hilfszeile = $eingabedatei[$i]; 4481 if ( $hilfszeile =~ /^ende$/i ) { $endeerreicht = 1; } 4482 elsif ( $hilfszeile =~ 4483 /^([-0-9\.]+),([-0-9\.]+)( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( r=([-0-9\.]+))?( text=\"([^\"]*)\")?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 4484 ) 4485 { 4486 $dx = $1; 4487 $y = $2; 4488 $farbeersatz = $farbe; 4489 $fuellartersatz = $fuellart; 4490 $fuellfarbeersatz = $fuellfarbe; 4491 $parameterersatz = $parameter; 4492 if ( defined $3 ) { 4493 $farbeersatz = $4; 4494 $fuellartersatz = $5; 4495 $fuellfarbeersatz = $6; 4496 } 4497 4498 if ( $fuellfarbeersatz eq $fuellfarbe ) { 4499 if ( $farbverlauf == 1 ) { 4500 $fuellfarbeersatz = farbverlauf( $fuellfarbe, $i ); 4501 } 4502 else { $fuellfarbeersatz = $fuellfarbeersatz; } 4503 } 4504 4505 $linienstaerkeersatz = $linienstaerke; 4506 $linienartersatz = $linienart; 4507 if ( defined $7 ) { 4508 $linienstaerkeersatz = $8; 4509 $linienartersatz = $9; 4510 } 4511 $farbe = $11 if ( defined $10 ); 4512 if ( defined $12 ) { $parameterersatz = $13; } 4513 $hoeheersatz = $hoehe; 4514 if ( defined $14 ) { 4515 $hoeheersatz = $15; 4516 } 4517 $text = ""; 4518 $text = $17 if ( defined $16 ); 4519 $textwinkelersatz = $textwinkel; 4520 $textausrichtungersatz = $textausrichtung; 4521 4522 if ( defined $18 ) { 4523 $textwinkelersatz = $19; 4524 $textausrichtungersatz = $20; 4525 } 4526 $inzeile++; 4527 saeuledreieck( 4528 $layer, 0, 4529 $y - $hoeheersatz / 2, $dx / $absolut, 4530 $hoeheersatz, $farbeersatz, 4531 $fuellartersatz, $fuellfarbeersatz, 4532 $linienartersatz, $linienstaerkeersatz, 4533 $text, $textwinkelersatz, 4534 $textausrichtungersatz, "b", 4535 $parameterersatz 4536 ); 4537 } 4538 else { 4539 kommentar( $layer, "Kaputte Zeile" ); 4540 $endeerreicht = 1; 4541 } 4542 } 4543 4544 if ( !$endeerreicht ) { 4545 printf("%Keine sinnvollen Daten\n"); 4546 } 4547 $absolut = 1; 4548 } 4549 4550 elsif ( $zeile =~ 4551 /^balkendiagrammdreieck( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( p=([-0-9\.]+),([-0-9\.]+))?( r=([-0-9\.]+),([-0-9\.]+))?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 4552 ) 4553 { 4554 setbalken(); 4555 standard( 10, getlinienart(), 0.2, getfarbe(), "", getfuellfarbe(), "", "" ); 4556 $layer = $2 if ( defined $1 ); 4557 4558 if ( defined $3 ) { 4559 $farbe = $4; 4560 $fuellart = $5; 4561 $fuellfarbe = $6; 4562 } 4563 4564 if ( defined $7 ) { 4565 $linienstaerke = $8; 4566 $linienart = $9; 4567 } 4568 $farbe = $11 if ( defined $10 ); 4569 4570 if ( defined $12 ) { $parameter = $13; } 4571 4572 $x1 = 0; 4573 $y1 = 0; 4574 if ( defined $14 ) { 4575 $x1 = $15; 4576 $y1 = $16; 4577 } 4578 $dy = 1; 4579 $abstand = 1; 4580 if ( defined $17 ) { 4581 $dy = $18; 4582 $abstand = $19; 4583 } 4584 $textwinkel = 0; 4585 $textausrichtung = "auf"; 4586 if ( defined $20 ) { 4587 $textwinkel = $21; 4588 $textausrichtung = $22; 4589 } 4590 $x = $x1; 4591 $y = $y1; 4592 $endeerreicht = 0; 4593 $inzeile = 0; 4594 while (( !$endeerreicht ) 4595 && ( $i < $eingabedateizeilen - 1 ) ) 4596 { 4597 $i++; 4598 $hilfszeile = $eingabedatei[$i]; 4599 if ( $hilfszeile =~ /^ende$/i ) { 4600 $endeerreicht = 1; 4601 4602 } 4603 elsif ( $hilfszeile =~ 4604 /^([-0-9\.]+)( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( r=([-0-9\.]+),([-0-9\.]+))?( text=\"([^\"]*)\")?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 4605 ) 4606 { 4607 $dx = $1; 4608 $farbeersatz = $farbe; 4609 $fuellartersatz = $fuellart; 4610 $fuellfarbeersatz = $fuellfarbe; 4611 $parameterersatz = $parameter; 4612 if ( defined $2 ) { 4613 $farbeersatz = $3; 4614 $fuellartersatz = $4; 4615 $fuellfarbeersatz = $5; 4616 } 4617 $linienstaerkeersatz = $linienstaerke; 4618 $linienartersatz = $linienart; 4619 if ( defined $6 ) { 4620 $linienstaerkeersatz = $7; 4621 $linienartersatz = $8; 4622 } 4623 $farbe = $10 if ( defined $9 ); 4624 if ( defined $11 ) { $parameterersatz = $12; } 4625 4626 $dyersatz = $dy; 4627 $abstandersatz = $abstand; 4628 if ( defined $13 ) { 4629 $dyersatz = $14; 4630 $abstandersatz = $15; 4631 } 4632 $text = ""; 4633 $text = $17 if ( defined $16 ); 4634 $textwinkelersatz = $textwinkel; 4635 $textausrichtungersatz = $textausrichtung; 4636 if ( defined $18 ) { 4637 $textwinkelersatz = $19; 4638 $textausrichtungersatz = $20; 4639 } 4640 $inzeile++; 4641 saeuledreieck( 4642 $layer, $x, $y, 4643 $dx, $dyersatz, $farbeersatz, 4644 $fuellartersatz, $fuellfarbeersatz, $linienartersatz, 4645 $linienstaerkeersatz, $text, $textwinkelersatz, 4646 $textausrichtungersatz, "b", $parameterersatz 4647 ); 4648 $y = $y + $dyersatz + $abstandersatz; 4649 } 4650 else { 4651 kommentar( $layer, "Kaputte Zeile" ); 4652 $endeerreicht = 1; 4653 } 4654 } 4655 if ( !$endeerreicht ) { printf("%Keine sinnvollen Daten\n"); } 4656 } 4657 elsif ( $zeile =~ 4658 /^balkendiagrammgestapelt( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( p=([-0-9\.]+),([-0-9\.]+))?( r=([-0-9\.]+),([-0-9\.]+))?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 4659 ) 4660 { 4661 setbalken(); 4662 standard( 10, getlinienart(), 0.2, getfarbe(), "", getfuellfarbe(), "", "" ); 4663 $layer = $2 if ( defined $1 ); 4664 4665 if ( defined $3 ) { 4666 $farbe = $4; 4667 $fuellart = $5; 4668 $fuellfarbe = $6; 4669 } 4670 4671 if ( defined $7 ) { 4672 $linienstaerke = $8; 4673 $linienart = $9; 4674 } 4675 $farbe = $11 if ( defined $10 ); 4676 if ( defined $12 ) { $parameter = $13; } 4677 4678 $x = 0; 4679 $y = 0; 4680 if ( defined $14 ) { 4681 $x = $15; 4682 $y = $16; 4683 } 4684 $dy = 1; 4685 $breite = 10; 4686 if ( defined $17 ) { 4687 $dy = $18; 4688 $breite = $19; 4689 } 4690 $textwinkel = 90; 4691 $textausrichtung = "auf"; 4692 if ( defined $20 ) { 4693 $textwinkel = $21; 4694 $textausrichtung = $22; 4695 } 4696 $x2 = $x1; 4697 $y2 = $y1; 4698 $endeerreicht = 0; 4699 $absolutwert = $n = $j = 0; 4700 $inzeile = 0; 4701 $merkei = $i; 4702 while (( !$endeerreicht ) 4703 && ( $i < $eingabedateizeilen - 1 ) ) 4704 { 4705 $i++; 4706 $hilfszeile = $eingabedatei[$i]; 4707 if ( $hilfszeile =~ /^ende$/i ) { 4708 $endeerreicht = 1; 4709 } 4710 elsif ( $hilfszeile =~ 4711 /^([-0-9\.]+)( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-za0-9!]+))?( parameter=\"([^\"]*)\")?( text=\"([^\"]*)\")?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 4712 ) 4713 { 4714 if ( getrelativ() == 1 ) { 4715 $absolutwert = $absolutwert + $1; 4716 setmarkierung( "Prozent", "x" ); 4717 $j++; 4718 } 4719 else { 4720 $absolutwert = 1; 4721 $j++; 4722 } 4723 } 4724 else { 4725 kommentar( $layer, "Kaputte Zeile" ); 4726 $endeerreicht = 1; 4727 } 4728 } 4729 $i = $merkei; 4730 $endeerreicht = 0; 4731 $inzeile = 0; 4732 4733 if ( $absolutwert == 1 ) { $absolutwert = $absolutwert; } 4734 else { 4735 $absolutwert = $absolutwert / 100; 4736 } 4737 while (( !$endeerreicht ) 4738 && ( $i < $eingabedateizeilen - 1 ) ) 4739 { 4740 $i++; 4741 $hilfszeile = $eingabedatei[$i]; 4742 if ( $hilfszeile =~ /^ende$/i ) { 4743 $endeerreicht = 1; 4744 4745 } 4746 elsif ( $hilfszeile =~ 4747 /^([-0-9\.]+)( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-za0-9!]+))?( parameter=\"([^\"]*)\")?( text=\"([^\"]*)\")?( ausrichtung=([0-9\.]+),(([a-z]+)|([-0-9\.]+)))?$/i 4748 ) 4749 { 4750 $dx = $1 / $absolutwert; 4751 $farbeersatz = $farbe; 4752 $fuellartersatz = $fuellart; 4753 $fuellfarbeersatz = $fuellfarbe; 4754 $parameterersatz = $parameter; 4755 if ( defined $2 ) { 4756 $farbeersatz = $3; 4757 $fuellartersatz = $4; 4758 $fuellfarbeersatz = $5; 4759 } 4760 4761 if ( $fuellfarbeersatz eq $fuellfarbe ) { 4762 if ( $farbverlauf == 1 ) { 4763 $fuellfarbeersatz = farbverlauf( $fuellfarbe, $i ); 4764 } 4765 else { $fuellfarbeersatz = $fuellfarbeersatz; } 4766 } 4767 $linienstaerkeersatz = $linienstaerke; 4768 $linienartersatz = $linienart; 4769 if ( defined $6 ) { 4770 $linienstaerkeersatz = $7; 4771 $linienartersatz = $8; 4772 } 4773 $farbe = $10 if ( defined $9 ); 4774 if ( defined $11 ) { $parameterersatz = $12; } 4775 4776 $text = ""; 4777 $text = $14 if ( defined $13 ); 4778 $textwinkelersatz = $textwinkel; 4779 $textausrichtungersatz = $textausrichtung; 4780 if ( defined $15 ) { 4781 $textwinkelersatz = $16; 4782 $textausrichtungersatz = $17; 4783 } 4784 $inzeile++; 4785 achsengraph( $x + $dx, $y + $dy + $dy / 2 ); 4786 saeule( 4787 $layer, $x, $y, 4788 $dx, $dy, $farbeersatz, 4789 $fuellartersatz, $fuellfarbeersatz, $linienartersatz, 4790 $linienstaerkeersatz, $text, $textwinkelersatz, 4791 $textausrichtungersatz, "b", $parameterersatz 4792 ); 4793 $x = $x + $dx; 4794 } 4795 else { 4796 kommentar( $layer, "Kaputte Zeile" ); 4797 $endeerreicht = 1; 4798 } 4799 } 4800 if ( !$endeerreicht ) { printf("%Keine sinnvollen Daten\n"); } 4801 } 4802 4803 elsif ( $zeile =~ 4804 /^piktogramm( layer=([0-9]+))?( parameter=\"([^\"]*)\")?( p=([-0-9\.]+),([-0-9\.]+))?( r=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+),([-0-9\.]+))?( ausrichtung=([-0-9\.]+),([-a-z0-9!]+))?$/i 4805 ) 4806 { 4807 setpikto(); 4808 4809 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 4810 "" ); 4811 $layer = $2 if ( defined $1 ); 4812 kommentar( $layer, "Ein Bilddiagramm zeichnen" ); 4813 4814 if ( defined $3 ) { $parameter = $4; } 4815 4816 $x1 = 0; 4817 $y1 = 0; 4818 if ( defined $5 ) { 4819 $x1 = $6; 4820 $y1 = $7; 4821 } 4822 $breite = 1; 4823 $winkel = 1; 4824 $abstandx = 1; 4825 $abstandy = 1; 4826 if ( defined $8 ) { 4827 $breite = $9; 4828 $winkel = $10; 4829 $abstandx = $11; 4830 $abstandy = $12; 4831 } 4832 $textwinkel = 0; 4833 $textausrichtung = "auf"; 4834 if ( defined $13 ) { 4835 $textwinkel = $14; 4836 $textausrichtung = $15; 4837 } 4838 4839 $x = $x1; 4840 $y = $y1; 4841 $endeerreicht = 0; 4842 4843 while (( !$endeerreicht ) 4844 && ( $i < $eingabedateizeilen - 1 ) ) 4845 { 4846 $i++; 4847 $hilfszeile = $eingabedatei[$i]; 4848 4849 if ( $hilfszeile =~ /^ende$/i ) { 4850 $endeerreicht = 1; 4851 4852 } 4853 elsif ( $hilfszeile =~ 4854 /^([-0-9\.]+)( r=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+),([-0-9\.]+))?( text=\"([^\"]*)\")?( ausrichtung=([-0-9\.]+),([-a-z0-9!]+))? \"([^\"]*)\"$/i 4855 ) 4856 { 4857 $anzahl = $1; 4858 $breiteersatz = $breite; 4859 $winkelersatz = $winkel; 4860 $abstandxersatz = $abstandx; 4861 $abstandyersatz = $abstandy; 4862 4863 if ( defined $2 ) { 4864 $breiteersatz = $3; 4865 $winkelersatz = $4; 4866 $abstandxersatz = $5; 4867 $abstandyersatz = $6; 4868 4869 } 4870 4871 $text = ""; 4872 $text = $8 if ( defined $7 ); 4873 $textwinkelersatz = $textwinkel; 4874 $textausrichtungersatz = $textausrichtung; 4875 if ( defined $9 ) { 4876 $textwinkelersatz = $10; 4877 $textausrichtungersatz = $11; 4878 } 4879 $bild = $12; 4880 4881 setachsengraph( $x, $y, $x + $breiteersatz, $y + $abstandyersatz ); 4882 4883 bilddiagramm( $layer, $bild, $anzahl, $x, $y, $breiteersatz, $winkelersatz, 4884 $abstandxersatz, $text, $textwinkelersatz, $textausrichtungersatz, 4885 $parameter ); 4886 $y = $y + $abstandyersatz + bildhoeheberechnet( $bild, $breiteersatz ); 4887 4888 } 4889 else { 4890 kommentar( $layer, "Kaputte Zeile" ); 4891 $endeerreicht = 1; 4892 } 4893 } 4894 if ( !$endeerreicht ) { 4895 printf("%Keine sinnvollen Daten\n"); 4896 } 4897 } 4898 4899 elsif ( $zeile =~ 4900 /^legende( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( p=([-0-9\.]+),([-0-9\.]+))?( r=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+))?$/i 4901 ) 4902 { 4903 standard( 10, getlinienart(), 0.2, getfarbe(), "", getfuellfarbe(), "", "" ); 4904 $layer = $2 if ( defined $1 ); 4905 4906 if ( defined $3 ) { 4907 $farbe = $4; 4908 $fuellart = $5; 4909 $fuellfarbe = $6; 4910 } 4911 if ( defined $7 ) { 4912 $linienstaerke = $8; 4913 $linienart = $9; 4914 } 4915 $farbe = $11 if ( defined $10 ); 4916 if ( defined $12 ) { $parameter = $13; } 4917 4918 $x = 0; 4919 $y = 0; 4920 if ( defined $14 ) { 4921 $x = $15; 4922 $y = $16; 4923 } 4924 $dx = 1; 4925 $dy = 1; 4926 $abstand = 1; 4927 if ( defined $17 ) { 4928 $dx = $18; 4929 $dy = $19; 4930 $abstand = $20; 4931 } 4932 $endeerreicht = 0; 4933 $inzeile = 0; 4934 while (( !$endeerreicht ) 4935 && ( $i < $eingabedateizeilen - 1 ) ) 4936 { 4937 $i++; 4938 $hilfszeile = $eingabedatei[$i]; 4939 if ( $hilfszeile =~ /^ende$/i ) { 4940 $endeerreicht = 1; 4941 4942 } 4943 elsif ( $hilfszeile =~ 4944 /^text=\"([^\"]*)\"( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-za0-9!]+))?( parameter=\"([^\"]*)\")?$/i 4945 ) 4946 { 4947 $text = $1; 4948 $farbeersatz = $farbe; 4949 $fuellartersatz = $fuellart; 4950 $fuellfarbeersatz = $fuellfarbe; 4951 $parameterersatz = $parameter; 4952 if ( defined $2 ) { 4953 $farbeersatz = $3; 4954 $fuellartersatz = $4; 4955 $fuellfarbeersatz = $5; 4956 } 4957 4958 if ( $fuellfarbeersatz eq $fuellfarbe ) { 4959 4960 if ( $farbverlauf == 1 ) { 4961 $fuellfarbeersatz = farbverlauf( $fuellfarbe, $i ); 4962 } 4963 else { $fuellfarbeersatz = $fuellfarbeersatz; } 4964 } 4965 4966 $linienstaerkeersatz = $linienstaerke; 4967 $linienartersatz = $linienart; 4968 if ( defined $6 ) { 4969 $linienstaerkeersatz = $7; 4970 $linienartersatz = $8; 4971 } 4972 $farbe = $10 if ( defined $9 ); 4973 if ( defined $11 ) { 4974 $parameterersatz = $12; 4975 } 4976 4977 $inzeile++; 4978 saeule( 4979 $layer, $x, 4980 $y, $dx, 4981 $dy, $farbeersatz, 4982 $fuellartersatz, $fuellfarbeersatz, 4983 $linienartersatz, $linienstaerkeersatz, 4984 $text, 0, 4985 "rechts", "b", 4986 $parameterersatz 4987 ); 4988 $y = $y - $dy - $abstand; 4989 } 4990 else { 4991 kommentar( $layer, "Kaputte Zeile" ); 4992 $endeerreicht = 1; 4993 } 4994 } 4995 if ( !$endeerreicht ) { printf("%Keine sinnvollen Daten\n"); } 4996 } 4997 4998 elsif ( $zeile =~ 4999 /^linie( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,\"([^\"]*)\")?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))?$/i 5000 ) 5001 { 5002 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 5003 "" ); 5004 $layer = $2 if ( defined $1 ); 5005 $farbe = $4 if ( defined $3 ); 5006 5007 if ( defined $5 ) { 5008 $linienstaerke = $6; 5009 $linienart = $7; 5010 } 5011 5012 $pfeilart = $9 if ( defined $8 ); 5013 5014 if ( defined $10 ) { $parameter = $11; } 5015 5016 $x1 = $12; 5017 $y1 = $13; 5018 $z1 = ""; 5019 $z1 = $15 if ( defined $14 ); 5020 $x2 = $16; 5021 $y2 = $17; 5022 $z2 = ""; 5023 $z2 = $19 if ( defined $18 ); 5024 5025 linie( $layer, $x1, $y1, $z1, $x2, $y2, $z2, $linienart, $linienstaerke, $farbe, 5026 $parameter, $pfeilart ); 5027 5028 } 5029 5030 elsif ( $zeile =~ 5031 /^linie( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,\"([^\"]*)\")?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? text=\"([^\"]*)\"(,([-0-9\.]+))?(,([-a-z0-9!]+))?(,([-0-9\.]+))?(,([-0-9\.]+))?(,([-0-9\.]+))?$/i 5032 ) 5033 { 5034 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 5035 "" ); 5036 $layer = $2 if ( defined $1 ); 5037 $farbe = $4 if ( defined $3 ); 5038 5039 if ( defined $5 ) { 5040 $linienstaerke = $6; 5041 $linienart = $7; 5042 } 5043 5044 $pfeilart = $9 if ( defined $8 ); 5045 5046 if ( defined $10 ) { $parameter = $11; } 5047 5048 $x1 = $12; 5049 $y1 = $13; 5050 $z1 = ""; 5051 $z1 = $15 if ( defined $14 ); 5052 $x2 = $16; 5053 $y2 = $17; 5054 $z2 = ""; 5055 $z2 = $19 if ( defined $18 ); 5056 $text = $20; 5057 $winkel = 0; 5058 $winkel = $22 if ( defined $21 ); 5059 $ausrichtung = 0; 5060 $ausrichtung = $24 if ( defined $23 ); 5061 $abstandx = 0.2; 5062 $abstandx = $26 if ( defined $25 ); 5063 $abstandy = $abstandx; 5064 5065 $abstandy = $28 if ( defined $27 ); 5066 $abstandz = $abstandx; 5067 $abstandz = $30 if ( defined $29 ); 5068 5069 linietext( 5070 $layer, $x1, $y1, $z1, $x2, 5071 $y2, $z2, $abstandx, $abstandy, $abstandz, 5072 $text, $winkel, $ausrichtung, $linienart, $linienstaerke, 5073 $farbe, $parameter, $pfeilart 5074 ); 5075 5076 } 5077 5078 elsif ( $zeile =~ 5079 /^linie( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,\"([^\"]*)\")?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? r=([-0-9\.]+)( text=\"([^\"]*)\"(,([-0-9\.]+))?(,([-a-z0-9!]+))?(,([-0-9\.]+))?(,([-0-9\.]+))?(,([-0-9\.]+))?)?$/i 5080 ) 5081 { 5082 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 5083 "" ); 5084 $layer = $2 if ( defined $1 ); 5085 $farbe = $4 if ( defined $3 ); 5086 5087 if ( defined $5 ) { 5088 $linienstaerke = $6; 5089 $linienart = $7; 5090 } 5091 5092 $pfeilart = $9 if ( defined $8 ); 5093 5094 if ( defined $10 ) { $parameter = $11; } 5095 5096 $x1 = $12; 5097 $y1 = $13; 5098 $z1 = ""; 5099 $z1 = $15 if ( defined $14 ); 5100 $x2 = $16; 5101 $y2 = $17; 5102 $z2 = ""; 5103 $z2 = $19 if ( defined $18 ); 5104 $abstand = $20; 5105 $text = ""; 5106 $abstandx = 0.2; 5107 $ausrichtung = 0; 5108 $winkel = 0; 5109 $abstandy = $abstandz = $abstandx; 5110 if ( defined $21 ) { 5111 $text = $22; 5112 5113 $winkel = $24 if ( defined $23 ); 5114 5115 $ausrichtung = $26 if ( defined $25 ); 5116 5117 $abstandx = $28 if ( defined $27 ); 5118 5119 $abstandy = $30 if ( defined $29 ); 5120 5121 $abstandz = $32 if ( defined $31 ); 5122 } 5123 5124 linietextabstand( 5125 $layer, $x1, $y1, $z1, $x2, 5126 $y2, $z2, $abstand, $abstandx, $abstandy, 5127 $abstandz, $text, $winkel, $ausrichtung, $linienart, 5128 $linienstaerke, $farbe, $parameter, $pfeilart 5129 ); 5130 5131 } 5132 5133 elsif ( $zeile =~ 5134 /^linie( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,\"([^\"]*)\")?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? r=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? r=([-0-9\.]+)( text=\"([^\"]*)\"(,([-0-9\.]+))?(,([-a-z0-9!]+))?(,([-0-9\.]+))?(,([-0-9\.]+))?(,([-0-9\.]+))?)?$/i 5135 ) 5136 { 5137 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 5138 "" ); 5139 $layer = $2 if ( defined $1 ); 5140 $farbe = $4 if ( defined $3 ); 5141 5142 if ( defined $5 ) { 5143 $linienstaerke = $6; 5144 $linienart = $7; 5145 } 5146 5147 $pfeilart = $9 if ( defined $8 ); 5148 5149 if ( defined $10 ) { $parameter = $11; } 5150 5151 $x1 = $12; 5152 $y1 = $13; 5153 $z1 = ""; 5154 $z1 = $15 if ( defined $14 ); 5155 $laenge = $16; 5156 $w1 = $17; 5157 $w2 = 0; 5158 $w2 = $19 if ( defined $18 ); 5159 $abstand = $20; 5160 $text = ""; 5161 $abstandx = 0.2; 5162 $ausrichtung = 0; 5163 $winkel = 0; 5164 $abstandy = $abstandz = $abstandx; 5165 if ( defined $21 ) { 5166 $text = $22; 5167 5168 $winkel = $24 if ( defined $23 ); 5169 5170 $ausrichtung = $26 if ( defined $25 ); 5171 5172 $abstandx = $28 if ( defined $27 ); 5173 5174 $abstandy = $30 if ( defined $29 ); 5175 5176 $abstandz = $32 if ( defined $31 ); 5177 } 5178 5179 liniepolartextabstand( 5180 $layer, $x1, $y1, $z1, $laenge, 5181 $w1, $w2, $abstand, $abstandx, $abstandy, 5182 $abstandz, $text, $winkel, $ausrichtung, $linienart, 5183 $linienstaerke, $farbe, $parameter, $pfeilart 5184 ); 5185 5186 } 5187 5188 elsif ( $zeile =~ 5189 /^linie( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,\"([^\"]*)\")?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? r=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? text=\"([^\"]*)\"(,([-0-9\.]+))?(,([-a-z0-9!]+))?(,([-0-9\.]+))?(,([-0-9\.]+))?(,([-0-9\.]+))?$/i 5190 ) 5191 { 5192 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 5193 "" ); 5194 $layer = $2 if ( defined $1 ); 5195 $farbe = $4 if ( defined $3 ); 5196 5197 if ( defined $5 ) { 5198 $linienstaerke = $6; 5199 $linienart = $7; 5200 } 5201 5202 $pfeilart = $9 if ( defined $8 ); 5203 5204 if ( defined $10 ) { $parameter = $11; } 5205 5206 $x1 = $12; 5207 $y1 = $13; 5208 $z1 = ""; 5209 $z1 = $15 if ( defined $14 ); 5210 5211 $laenge = $16; 5212 $w1 = $17; 5213 $w2 = 0; 5214 $w2 = $19 if ( defined $18 ); 5215 5216 $text = $20; 5217 $winkel = 0; 5218 $winkel = $22 if ( defined $21 ); 5219 $ausrichtung = 0; 5220 $ausrichtung = $24 if ( defined $23 ); 5221 $abstandx = 0.2; 5222 $abstandx = $26 if ( defined $25 ); 5223 $abstandy = $abstandx; 5224 5225 $abstandy = $28 if ( defined $27 ); 5226 $abstandz = $abstandx; 5227 $abstandz = $30 if ( defined $29 ); 5228 5229 linietextpolar( 5230 $layer, $x1, $y1, $z1, $laenge, 5231 $w1, $w2, $abstandx, $abstandy, $abstandz, 5232 $text, $winkel, $ausrichtung, $linienart, $linienstaerke, 5233 $farbe, $parameter, $pfeilart 5234 ); 5235 } 5236 5237 elsif ( $zeile =~ 5238 /^linie( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,\"([^\"]*)\")?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? r=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))?$/i 5239 ) 5240 { 5241 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 5242 "" ); 5243 $layer = $2 if ( defined $1 ); 5244 $farbe = $4 if ( defined $3 ); 5245 5246 if ( defined $5 ) { 5247 $linienstaerke = $6; 5248 $linienart = $7; 5249 } 5250 5251 $pfeilart = $9 if ( defined $8 ); 5252 if ( defined $10 ) { $parameter = $11; } 5253 5254 $x1 = $12; 5255 $y1 = $13; 5256 $z1 = ""; 5257 $z1 = $15 if ( defined $14 ); 5258 $laenge = $16; 5259 $w1 = $17; 5260 $w2 = ""; 5261 $w2 = $19 if ( defined $18 ); 5262 liniepolar( 5263 $layer, $x1, $y1, $z1, 5264 $laenge, $w1, $w2, $linienart, 5265 $linienstaerke, $farbe, $parameter, $pfeilart 5266 ); 5267 } 5268 5269 elsif ( $zeile =~ 5270 /^vlinie( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,\"([^\"]*)\")?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? r=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? text=\"([^\"]*)\"(,([-0-9\.]+))?(,([-a-z0-9!]+))?(,([-0-9\.]+))?(,([-0-9\.]+))?(,([-0-9\.]+))?$/i 5271 ) 5272 { 5273 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 5274 "" ); 5275 $layer = $2 if ( defined $1 ); 5276 $farbe = $4 if ( defined $3 ); 5277 5278 if ( defined $5 ) { 5279 $linienstaerke = $6; 5280 $linienart = $7; 5281 } 5282 5283 $pfeilart = $9 if ( defined $8 ); 5284 5285 if ( defined $10 ) { $parameter = $11; } 5286 5287 $x1 = $12; 5288 $y1 = $13; 5289 $z1 = ""; 5290 $z2 = ""; 5291 $z1 = $15 if ( defined $14 ); 5292 5293 $x2 = $x1 + $16; 5294 $y2 = $y1 + $17; 5295 $z2 = $z1 + $19 if ( defined $18 ); 5296 5297 $text = $20; 5298 $winkel = 0; 5299 $winkel = $22 if ( defined $21 ); 5300 $ausrichtung = 0; 5301 $ausrichtung = $24 if ( defined $23 ); 5302 $abstandx = 0.2; 5303 $abstandx = $26 if ( defined $25 ); 5304 $abstandy = $abstandx; 5305 5306 $abstandy = $28 if ( defined $27 ); 5307 $abstandz = $abstandx; 5308 $abstandz = $30 if ( defined $29 ); 5309 5310 linietext( 5311 $layer, $x1, $y1, $z1, $x2, 5312 $y2, $z2, $abstandx, $abstandy, $abstandz, 5313 $text, $winkel, $ausrichtung, $linienart, $linienstaerke, 5314 $farbe, $parameter, $pfeilart 5315 ); 5316 } 5317 5318 elsif ( $zeile =~ 5319 /^vektor( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,\"([^\"]*)\")?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))?$/i 5320 ) 5321 { 5322 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "->", 5323 "" ); 5324 $layer = $2 if ( defined $1 ); 5325 $farbe = $4 if ( defined $3 ); 5326 5327 if ( defined $5 ) { 5328 $linienstaerke = $6; 5329 $linienart = $7; 5330 } 5331 $pfeilart = $9 if ( defined $8 ); 5332 5333 if ( defined $10 ) { $parameter = $11; } 5334 5335 $x1 = $12; 5336 $y1 = $13; 5337 $z1 = ""; 5338 $z1 = $15 if ( defined $14 ); 5339 $x2 = $16; 5340 $y2 = $17; 5341 $z2 = ""; 5342 $z2 = $19 if ( defined $18 ); 5343 5344 linie( $layer, $x1, $y1, $z1, $x2, $y2, $z2, $linienart, $linienstaerke, $farbe, 5345 $parameter, $pfeilart ); 5346 5347 } 5348 5349 elsif ( $zeile =~ 5350 /^vektor( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,\"([^\"]*)\")?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? text=\"([^\"]*)\"(,([-0-9\.]+))?(,([-a-z0-9!]+))?(,([-0-9\.]+))?(,([-0-9\.]+))?(,([-0-9\.]+))?$/i 5351 ) 5352 { 5353 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "->", 5354 "" ); 5355 $layer = $2 if ( defined $1 ); 5356 $farbe = $4 if ( defined $3 ); 5357 5358 if ( defined $5 ) { 5359 $linienstaerke = $6; 5360 $linienart = $7; 5361 } 5362 $pfeilart = $9 if ( defined $8 ); 5363 5364 if ( defined $10 ) { $parameter = $11; } 5365 5366 $x1 = $12; 5367 $y1 = $13; 5368 $z1 = ""; 5369 $z1 = $15 if ( defined $14 ); 5370 $x2 = $16; 5371 $y2 = $17; 5372 $z2 = ""; 5373 $z2 = $19 if ( defined $18 ); 5374 $text = $20; 5375 $winkel = 0; 5376 $winkel = $22 if ( defined $21 ); 5377 $ausrichtung = 0; 5378 $ausrichtung = $24 if ( defined $23 ); 5379 $abstandx = 0.2; 5380 $abstandx = $26 if ( defined $25 ); 5381 $abstandy = $abstandx; 5382 5383 $abstandy = $28 if ( defined $27 ); 5384 $abstandz = $abstandx; 5385 $abstandz = $30 if ( defined $29 ); 5386 5387 linietext( 5388 $layer, $x1, $y1, $z1, $x2, 5389 $y2, $z2, $abstandx, $abstandy, $abstandz, 5390 $text, $winkel, $ausrichtung, $linienart, $linienstaerke, 5391 $farbe, $parameter, $pfeilart 5392 ); 5393 5394 } 5395 5396 elsif ( $zeile =~ 5397 /^vektor( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,\"([^\"]*)\")?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? r=([-0-9\.]+)( text=\"([^\"]*)\"(,([-0-9\.]+))?(,([-a-z0-9!]+))?(,([-0-9\.]+))?(,([-0-9\.]+))?(,([-0-9\.]+))?)?$/i 5398 ) 5399 { 5400 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "->", 5401 "" ); 5402 $layer = $2 if ( defined $1 ); 5403 $farbe = $4 if ( defined $3 ); 5404 5405 if ( defined $5 ) { 5406 $linienstaerke = $6; 5407 $linienart = $7; 5408 } 5409 $pfeilart = $9 if ( defined $8 ); 5410 5411 if ( defined $10 ) { $parameter = $11; } 5412 5413 $x1 = $12; 5414 $y1 = $13; 5415 $z1 = ""; 5416 $z1 = $15 if ( defined $14 ); 5417 $x2 = $16; 5418 $y2 = $17; 5419 $z2 = ""; 5420 $z2 = $19 if ( defined $18 ); 5421 $abstand = $20; 5422 $text = ""; 5423 $abstandx = 0.2; 5424 $ausrichtung = 0; 5425 $winkel = 0; 5426 $abstandy = $abstandz = $abstandx; 5427 if ( defined $21 ) { 5428 $text = $22; 5429 5430 $winkel = $24 if ( defined $23 ); 5431 5432 $ausrichtung = $26 if ( defined $25 ); 5433 5434 $abstandx = $28 if ( defined $27 ); 5435 5436 $abstandy = $30 if ( defined $29 ); 5437 5438 $abstandz = $32 if ( defined $31 ); 5439 } 5440 5441 linietextabstand( 5442 $layer, $x1, $y1, $z1, $x2, 5443 $y2, $z2, $abstand, $abstandx, $abstandy, 5444 $abstandz, $text, $winkel, $ausrichtung, $linienart, 5445 $linienstaerke, $farbe, $parameter, $pfeilart 5446 ); 5447 5448 } 5449 5450 elsif ( $zeile =~ 5451 /^vektor( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,\"([^\"]*)\")?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? r=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? r=([-0-9\.]+)( text=\"([^\"]*)\"(,([-0-9\.]+))?(,([-a-z0-9!]+))?(,([-0-9\.]+))?(,([-0-9\.]+))?(,([-0-9\.]+))?)?$/i 5452 ) 5453 { 5454 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "->", 5455 "" ); 5456 $layer = $2 if ( defined $1 ); 5457 $farbe = $4 if ( defined $3 ); 5458 5459 if ( defined $5 ) { 5460 $linienstaerke = $6; 5461 $linienart = $7; 5462 } 5463 $pfeilart = $9 if ( defined $8 ); 5464 5465 if ( defined $10 ) { $parameter = $11; } 5466 5467 $x1 = $12; 5468 $y1 = $13; 5469 $z1 = ""; 5470 $z1 = $15 if ( defined $14 ); 5471 $laenge = $16; 5472 $w1 = $17; 5473 $w2 = 0; 5474 $w2 = $19 if ( defined $18 ); 5475 $abstand = $20; 5476 $text = ""; 5477 $abstandx = 0.2; 5478 $ausrichtung = 0; 5479 $winkel = 0; 5480 $abstandy = $abstandz = $abstandx; 5481 if ( defined $21 ) { 5482 $text = $22; 5483 5484 $winkel = $24 if ( defined $23 ); 5485 5486 $ausrichtung = $26 if ( defined $25 ); 5487 5488 $abstandx = $28 if ( defined $27 ); 5489 5490 $abstandy = $30 if ( defined $29 ); 5491 5492 $abstandz = $32 if ( defined $31 ); 5493 } 5494 5495 liniepolartextabstand( 5496 $layer, $x1, $y1, $z1, $laenge, 5497 $w1, $w2, $abstand, $abstandx, $abstandy, 5498 $abstandz, $text, $winkel, $ausrichtung, $linienart, 5499 $linienstaerke, $farbe, $parameter, $pfeilart 5500 ); 5501 5502 } 5503 5504 elsif ( $zeile =~ 5505 /^vektor( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,\"([^\"]*)\")?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? r=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? text=\"([^\"]*)\"(,([-0-9\.]+))?(,([-a-z0-9!]+))?(,([-0-9\.]+))?(,([-0-9\.]+))?(,([-0-9\.]+))?$/i 5506 ) 5507 { 5508 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "->", 5509 "" ); 5510 $layer = $2 if ( defined $1 ); 5511 $farbe = $4 if ( defined $3 ); 5512 5513 if ( defined $5 ) { 5514 $linienstaerke = $6; 5515 $linienart = $7; 5516 } 5517 $pfeilart = $9 if ( defined $8 ); 5518 5519 if ( defined $10 ) { $parameter = $11; } 5520 5521 $x1 = $12; 5522 $y1 = $13; 5523 $z1 = ""; 5524 $z1 = $15 if ( defined $14 ); 5525 5526 $laenge = $16; 5527 $w1 = $17; 5528 $w2 = 0; 5529 $w2 = $19 if ( defined $18 ); 5530 5531 $text = $20; 5532 $winkel = 0; 5533 $winkel = $22 if ( defined $21 ); 5534 $ausrichtung = 0; 5535 $ausrichtung = $24 if ( defined $23 ); 5536 $abstandx = 0.2; 5537 $abstandx = $26 if ( defined $25 ); 5538 $abstandy = $abstandx; 5539 5540 $abstandy = $28 if ( defined $27 ); 5541 $abstandz = $abstandx; 5542 $abstandz = $30 if ( defined $29 ); 5543 5544 linietextpolar( 5545 $layer, $x1, $y1, $z1, $laenge, 5546 $w1, $w2, $abstandx, $abstandy, $abstandz, 5547 $text, $winkel, $ausrichtung, $linienart, $linienstaerke, 5548 $farbe, $parameter, $pfeilart 5549 ); 5550 } 5551 5552 elsif ( $zeile =~ 5553 /^vektor( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,\"([^\"]*)\")?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? r=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))?$/i 5554 ) 5555 { 5556 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "->", 5557 "" ); 5558 $layer = $2 if ( defined $1 ); 5559 $farbe = $4 if ( defined $3 ); 5560 5561 if ( defined $5 ) { 5562 $linienstaerke = $6; 5563 $linienart = $7; 5564 } 5565 5566 $pfeilart = $9 if ( defined $8 ); 5567 if ( defined $10 ) { $parameter = $11; } 5568 5569 $x1 = $12; 5570 $y1 = $13; 5571 $z1 = ""; 5572 $z1 = $15 if ( defined $14 ); 5573 $laenge = $16; 5574 $w1 = $17; 5575 $w2 = ""; 5576 $w2 = $19 if ( defined $18 ); 5577 liniepolar( 5578 $layer, $x1, $y1, $z1, 5579 $laenge, $w1, $w2, $linienart, 5580 $linienstaerke, $farbe, $parameter, $pfeilart 5581 ); 5582 } 5583 5584 elsif ( $zeile =~ 5585 /^vlinie( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,\"([^\"]*)\")?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? r=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? text=\"([^\"]*)\"(,([-0-9\.]+))?(,([-a-z0-9!]+))?(,([-0-9\.]+))?(,([-0-9\.]+))?(,([-0-9\.]+))?$/i 5586 ) 5587 { 5588 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 5589 "" ); 5590 $layer = $2 if ( defined $1 ); 5591 $farbe = $4 if ( defined $3 ); 5592 5593 if ( defined $5 ) { 5594 $linienstaerke = $6; 5595 $linienart = $7; 5596 } 5597 5598 $pfeilart = $9 if ( defined $8 ); 5599 5600 if ( defined $10 ) { $parameter = $11; } 5601 5602 $x1 = $12; 5603 $y1 = $13; 5604 $z1 = ""; 5605 $z1 = $15 if ( defined $14 ); 5606 5607 $x2 = $x1 + $16; 5608 $y2 = $y1 + $17; 5609 $z2 = $z1 + $19 if ( defined $18 ); 5610 5611 $text = $20; 5612 $winkel = 0; 5613 $winkel = $22 if ( defined $21 ); 5614 $ausrichtung = 0; 5615 $ausrichtung = $24 if ( defined $23 ); 5616 $abstandx = 0.2; 5617 $abstandx = $26 if ( defined $25 ); 5618 $abstandy = $abstandx; 5619 5620 $abstandy = $28 if ( defined $27 ); 5621 $abstandz = $abstandx; 5622 $abstandz = $30 if ( defined $29 ); 5623 5624 linietext( 5625 $layer, $x1, $y1, $z1, $x2, 5626 $y2, $z2, $abstandx, $abstandy, $abstandz, 5627 $text, $winkel, $ausrichtung, $linienart, $linienstaerke, 5628 $farbe, $parameter, $pfeilart 5629 ); 5630 } 5631 5632 elsif ( $zeile =~ 5633 /^vlinie( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,\"([^\"]*)\")?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? r=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))?$/i 5634 ) 5635 { 5636 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 5637 "" ); 5638 $layer = $2 if ( defined $1 ); 5639 $farbe = $4 if ( defined $3 ); 5640 5641 if ( defined $5 ) { 5642 $linienstaerke = $6; 5643 $linienart = $7; 5644 } 5645 5646 $pfeilart = $9 if ( defined $8 ); 5647 5648 if ( defined $10 ) { $parameter = $11; } 5649 5650 $x1 = $12; 5651 $y1 = $13; 5652 $z1 = ""; 5653 $z1 = $15 if ( defined $14 ); 5654 5655 $x2 = $x1 + $16; 5656 $y2 = $y1 + $17; 5657 $z2 = $z1 + $19 if ( defined $18 ); 5658 5659 linie( $layer, $x1, $y1, $z1, $x2, $y2, $z2, $linienart, $linienstaerke, $farbe, 5660 $parameter, $pfeilart ); 5661 } 5662 5663 elsif ( $zeile =~ 5664 /^liniepolar( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,\"([^\"]*)\")?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? r=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))?$/i 5665 ) 5666 { 5667 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "-", 5668 "" ); 5669 $layer = $2 if ( defined $1 ); 5670 $farbe = $4 if ( defined $3 ); 5671 5672 if ( defined $5 ) { 5673 $linienstaerke = $6; 5674 $linienart = $7; 5675 } 5676 $pfeilart = $9 if ( defined $8 ); 5677 if ( defined $10 ) { $parameter = $11; } 5678 5679 $x1 = $12; 5680 $y1 = $13; 5681 $z1 = ""; 5682 $z1 = $15 if ( defined $14 ); 5683 $laenge = $16; 5684 $w1 = $17; 5685 $w2 = ""; 5686 $w2 = $19 if ( defined $18 ); 5687 liniepolar( 5688 $layer, $x1, $y1, $z1, 5689 $laenge, $w1, $w2, $linienart, 5690 $linienstaerke, $farbe, $parameter, $pfeilart 5691 ); 5692 } 5693 5694 elsif ( $zeile =~ 5695 /^gerade( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,\"([^\"]*)\")?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? r=([-0-9\.]+),([-0-9\.]+)$/i 5696 ) 5697 { 5698 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 5699 "" ); 5700 $layer = $2 if ( defined $1 ); 5701 $farbe = $4 if ( defined $3 ); 5702 5703 if ( defined $5 ) { 5704 $linienstaerke = $6; 5705 $linienart = $7; 5706 } 5707 5708 $pfeilart = $9 if ( defined $8 ); 5709 5710 if ( defined $10 ) { $parameter = $11; } 5711 5712 $x1 = $12; 5713 $y1 = $13; 5714 $z1 = ""; 5715 $z1 = $15 if ( defined $14 ); 5716 $x2 = $16; 5717 $y2 = $17; 5718 $z2 = ""; 5719 $z2 = $19 if ( defined $18 ); 5720 $r1 = $20; 5721 $r2 = $21; 5722 setachsengraph3d( 0, 0, 0, 0, 0, 0 ); 5723 minmax3d( 0, 0, 0, 0, 0, 0 ); 5724 gerade( $layer, $x1, $y1, $z1, $x2, $y2, $z2, $r1, $r2, $farbe, $linienart, 5725 $linienstaerke, $parameter, $pfeilart ); 5726 5727 } 5728 5729 elsif ( $zeile =~ 5730 /^ebene( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))?( r=([-0-9\.]+),([-0-9\.]+))?( r=([-0-9\.]+),([-0-9\.]+))?$/i 5731 ) 5732 { 5733 5734 setachsengraph3d( 0, 0, 0, 0, 0, 0 ); 5735 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 5736 "" ); 5737 $layer = $2 if ( defined $1 ); 5738 5739 if ( defined $3 ) { 5740 $farbe = $4; 5741 $fuellart = $5; 5742 $fuellfarbe = $6; 5743 } 5744 5745 if ( defined $7 ) { 5746 $linienstaerke = $8; 5747 $linienart = $9; 5748 } 5749 $farbe = $11 if ( defined $10 ); 5750 if ( defined $12 ) { $parameter = $13; } 5751 5752 $x1 = $14; 5753 $y1 = $15; 5754 $z1 = ""; 5755 $z1 = $17 if ( defined $16 ); 5756 $x2 = $18; 5757 $y2 = $19; 5758 $z2 = ""; 5759 $z2 = $21 if ( defined $20 ); 5760 5761 $x3 = $22; 5762 $y3 = $23; 5763 $z3 = ""; 5764 $z3 = $25 if ( defined $24 ); 5765 5766 if ( defined $26 ) { 5767 $r1 = $27; 5768 $r2 = $28; 5769 } 5770 else { 5771 $r1 = 0; 5772 $r2 = 1; 5773 } 5774 5775 if ( defined $29 ) { 5776 $r3 = $30; 5777 $r4 = $31; 5778 } 5779 else { 5780 $r3 = 0; 5781 $r4 = 1; 5782 5783 } 5784 5785 kommentar( $layer, "Eine Ebene zeichnen" ); 5786 5787 ebene( $layer, $x1, $y1, $z1, $x2, $y2, $z2, $x3, $y3, $z3, $r1, $r2, $r3, $r4, $farbe, 5788 $fuellart, $fuellfarbe, $linienart, $linienstaerke, $parameter ); 5789 5790 } 5791 5792 elsif ( $zeile =~ 5793 /^ebene( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))?( r=([-0-9\.]+),([-0-9\.]+))?( r=([-0-9\.]+),([-0-9\.]+))?$/i 5794 ) 5795 { 5796 5797 setachsengraph3d( 0, 0, 0, 0, 0, 0 ); 5798 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 5799 "" ); 5800 $layer = $2 if ( defined $1 ); 5801 5802 if ( defined $3 ) { 5803 $farbe = $4; 5804 $fuellart = $5; 5805 $fuellfarbe = $6; 5806 } 5807 5808 if ( defined $7 ) { 5809 $linienstaerke = $8; 5810 $linienart = $9; 5811 } 5812 $farbe = $11 if ( defined $10 ); 5813 if ( defined $12 ) { $parameter = $13; } 5814 5815 $x1 = $14; 5816 $y1 = $15; 5817 $z1 = ""; 5818 $z1 = $17 if ( defined $16 ); 5819 $x2 = $18; 5820 $y2 = $19; 5821 $z2 = ""; 5822 $z2 = $21 if ( defined $20 ); 5823 if ( defined $22 ) { 5824 $r1 = $23; 5825 $r2 = $24; 5826 } 5827 else { 5828 $r1 = 0; 5829 $r2 = 1; 5830 } 5831 5832 if ( defined $25 ) { 5833 $r3 = $26; 5834 $r4 = $27; 5835 } 5836 else { 5837 $r3 = 0; 5838 $r4 = 1; 5839 5840 } 5841 5842 kommentar( $layer, "Eine Ebene zeichnen" ); 5843 5844 ebenenormal( $layer, $x1, $y1, $z1, $x2, $y2, $z2, $r1, $r2, $r3, $r4, $farbe, 5845 $fuellart, $fuellfarbe, $linienart, $linienstaerke, $parameter ); 5846 5847 } 5848 5849 elsif ( $zeile =~ 5850 /^ebene( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? [k|r]=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))?(,([-0-9\.]+))?$/i 5851 ) 5852 { 5853 5854 setachsengraph3d( 0, 0, 0, 0, 0, 0 ); 5855 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 5856 "" ); 5857 $layer = $2 if ( defined $1 ); 5858 5859 if ( defined $3 ) { 5860 $farbe = $4; 5861 $fuellart = $5; 5862 $fuellfarbe = $6; 5863 } 5864 5865 if ( defined $7 ) { 5866 $linienstaerke = $8; 5867 $linienart = $9; 5868 } 5869 $farbe = $11 if ( defined $10 ); 5870 if ( defined $12 ) { $parameter = $13; } 5871 5872 $a = $14; 5873 $b = $15; 5874 $c = $16; 5875 $d = $17; 5876 $n1 = $n2 = 1; 5877 if ( defined $18 ) { $n1 = $19; } 5878 if ( defined $20 ) { $n2 = $21; } 5879 5880 kommentar( $layer, 5881 "Die Ebene " . $a . "x+" . $b . "y+" . $c . "z=" . $d . " zeichnen" ); 5882 5883 ebenekform( 5884 $layer, $a, $b, $c, $d, $n1, $n2, $farbe, $fuellart, 5885 $fuellfarbe, $linienart, $linienstaerke, $parameter 5886 5887 ); 5888 5889 } 5890 5891 elsif ( $zeile =~ 5892 /^quader( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+) r=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+),([-0-9\.]+))?$/i 5893 ) 5894 { 5895 5896 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 5897 "" ); 5898 $layer = $2 if ( defined $1 ); 5899 5900 if ( defined $3 ) { 5901 $farbe = $4; 5902 $fuellart = $5; 5903 $fuellfarbe = $6; 5904 } 5905 5906 if ( defined $7 ) { 5907 $linienstaerke = $8; 5908 $linienart = $9; 5909 } 5910 $farbe = $11 if ( defined $10 ); 5911 if ( defined $12 ) { $parameter = $13; } 5912 5913 $x1 = $14; 5914 $y1 = $15; 5915 $z1 = $16; 5916 $a = $17; 5917 $b = $18; 5918 $c = $19; 5919 5920 $w1 = $w2 = 0; 5921 if ( defined $20 ) { 5922 $w1 = $21; 5923 $w2 = $22; 5924 } 5925 5926 quader( 5927 $layer, $x1, $y1, $z1, $a, $b, $c, $w1, $w2, $farbe, 5928 $fuellart, 5929 $fuellfarbe, $linienart, $linienstaerke, 5930 $parameter 5931 5932 ); 5933 5934 } 5935 5936 elsif ( $zeile =~ 5937 /^pyramide( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+) r=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+),([-0-9\.]+))?$/i 5938 ) 5939 { 5940 5941 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 5942 "" ); 5943 $layer = $2 if ( defined $1 ); 5944 5945 if ( defined $3 ) { 5946 $farbe = $4; 5947 $fuellart = $5; 5948 $fuellfarbe = $6; 5949 } 5950 5951 if ( defined $7 ) { 5952 $linienstaerke = $8; 5953 $linienart = $9; 5954 } 5955 $farbe = $11 if ( defined $10 ); 5956 if ( defined $12 ) { $parameter = $13; } 5957 5958 $x1 = $14; 5959 $y1 = $15; 5960 $z1 = $16; 5961 $a = $17; 5962 $b = $18; 5963 $c = $19; 5964 $w1 = $w2 = 0; 5965 5966 if ( defined $20 ) { 5967 $w1 = $21; 5968 $w2 = $22; 5969 } 5970 5971 kommentar( $layer, "Eine Pyramide zeichnen" ); 5972 5973 pyramide( 5974 $layer, $x1, $y1, $z1, $a, $b, $c, $w1, $w2, $farbe, 5975 $fuellart, 5976 $fuellfarbe, $linienart, $linienstaerke, $parameter 5977 5978 ); 5979 5980 } 5981 5982 elsif ( $zeile =~ 5983 /^pyramidestumpf( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+) r=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+),([-0-9\.]+))?$/i 5984 ) 5985 { 5986 5987 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 5988 "" ); 5989 $layer = $2 if ( defined $1 ); 5990 5991 if ( defined $3 ) { 5992 $farbe = $4; 5993 $fuellart = $5; 5994 $fuellfarbe = $6; 5995 } 5996 5997 if ( defined $7 ) { 5998 $linienstaerke = $8; 5999 $linienart = $9; 6000 } 6001 $farbe = $11 if ( defined $10 ); 6002 if ( defined $12 ) { $parameter = $13; } 6003 6004 $x1 = $14; 6005 $y1 = $15; 6006 $z1 = $16; 6007 $a = $17; 6008 $b = $18; 6009 $c = $19; 6010 $abgeschnitten = $20; 6011 $w1 = $w2 = 0; 6012 6013 if ( defined $21 ) { 6014 $w1 = $22; 6015 $w2 = $23; 6016 } 6017 6018 kommentar( $layer, "Einen Pyramidenstumpf zeichnen" ); 6019 6020 pyramidestumpf( 6021 $layer, $x1, $y1, $z1, $a, $b, $c, $abgeschnitten, $w1, $w2, 6022 $farbe, 6023 $fuellart, 6024 $fuellfarbe, $linienart, $linienstaerke, $parameter 6025 6026 ); 6027 6028 } 6029 6030 elsif ( $zeile =~ 6031 /^kegel( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+) r=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))?$/i 6032 ) 6033 { 6034 6035 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 6036 "" ); 6037 $layer = $2 if ( defined $1 ); 6038 6039 if ( defined $3 ) { 6040 $farbe = $4; 6041 $fuellart = $5; 6042 $fuellfarbe = $6; 6043 } 6044 6045 if ( defined $7 ) { 6046 $linienstaerke = $8; 6047 $linienart = $9; 6048 } 6049 $farbe = $11 if ( defined $10 ); 6050 if ( defined $12 ) { $parameter = $13; } 6051 6052 $x1 = $14; 6053 $y1 = $15; 6054 $z1 = $16; 6055 $a = $17; 6056 $b = $18; 6057 6058 $w1 = 90; 6059 if ( defined $19 ) { $w1 = $20; } 6060 6061 kommentar( $layer, "Einen Kegel zeichnen" ); 6062 6063 kegel( 6064 $layer, $x1, $y1, $z1, $a, $b, $w1, $farbe, 6065 $fuellart, 6066 $fuellfarbe, $linienart, $linienstaerke, $parameter 6067 6068 ); 6069 6070 } 6071 6072 elsif ( $zeile =~ 6073 /^kegelstumpf( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+) r=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))?$/i 6074 ) 6075 { 6076 6077 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 6078 "" ); 6079 $layer = $2 if ( defined $1 ); 6080 6081 if ( defined $3 ) { 6082 $farbe = $4; 6083 $fuellart = $5; 6084 $fuellfarbe = $6; 6085 } 6086 6087 if ( defined $7 ) { 6088 $linienstaerke = $8; 6089 $linienart = $9; 6090 } 6091 $farbe = $11 if ( defined $10 ); 6092 if ( defined $12 ) { $parameter = $13; } 6093 6094 $x1 = $14; 6095 $y1 = $15; 6096 $z1 = $16; 6097 $r = $17; 6098 $c = $18; 6099 $abgeschnitten = $19; 6100 6101 $w1 = 30; 6102 if ( defined $20 ) { $w1 = $21; } 6103 6104 kommentar( $layer, "Einen Kegelstumpf zeichnen" ); 6105 6106 kegelstumpf( 6107 $layer, $x1, $y1, $z1, $r, $c, $abgeschnitten, $w1, $farbe, 6108 $fuellart, 6109 $fuellfarbe, $linienart, $linienstaerke, $parameter 6110 6111 ); 6112 6113 } 6114 6115 elsif ( $zeile =~ 6116 /^zylinder( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+) r=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))?$/i 6117 ) 6118 { 6119 6120 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 6121 "" ); 6122 $layer = $2 if ( defined $1 ); 6123 6124 if ( defined $3 ) { 6125 $farbe = $4; 6126 $fuellart = $5; 6127 $fuellfarbe = $6; 6128 } 6129 6130 if ( defined $7 ) { 6131 $linienstaerke = $8; 6132 $linienart = $9; 6133 } 6134 $farbe = $11 if ( defined $10 ); 6135 if ( defined $12 ) { $parameter = $13; } 6136 6137 $x1 = $14; 6138 $y1 = $15; 6139 $z1 = $16; 6140 $a = $17; 6141 $b = $18; 6142 6143 $w1 = 30; 6144 if ( defined $19 ) { $w1 = $20; } 6145 kommentar( $layer, "Einen Zylinder zeichnen" ); 6146 6147 zylinder( 6148 $layer, $x1, $y1, $z1, $a, $b, $w1, $farbe, 6149 $fuellart, 6150 $fuellfarbe, $linienart, $linienstaerke, $parameter 6151 6152 ); 6153 6154 } 6155 6156 elsif ( $zeile =~ 6157 /^kugel( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+) r=([-0-9\.]+)$/i 6158 ) 6159 { 6160 set3dpstricks(1); 6161 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 6162 "" ); 6163 $layer = $2 if ( defined $1 ); 6164 6165 if ( defined $3 ) { 6166 $farbe = $4; 6167 $fuellart = $5; 6168 $fuellfarbe = $6; 6169 } 6170 6171 if ( defined $7 ) { 6172 $linienstaerke = $8; 6173 $linienart = $9; 6174 } 6175 $farbe = $11 if ( defined $10 ); 6176 if ( defined $12 ) { $parameter = $13; } 6177 6178 $x = $14; 6179 $y = $15; 6180 $z = $16; 6181 $r = $17; 6182 6183 kommentar( $layer, "Eine Kugel zeichnen" ); 6184 6185 kugel( 6186 $layer, $x, $y, $z, $r, $farbe, $fuellart, 6187 $fuellfarbe, $linienart, $linienstaerke, $parameter 6188 6189 ); 6190 6191 } 6192 6193 elsif ( $zeile =~ 6194 /^kreis( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),(["a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)( r=([-0-9\.]+))?( text=\"([^\"]*)\"(,([-0-9\.]+))?(,([a-z0-9!]+))?)?$/i 6195 ) 6196 { 6197 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 6198 "" ); 6199 $layer = $2 if ( defined $1 ); 6200 6201 if ( defined $3 ) { 6202 $farbe = $4; 6203 $fuellart = $5; 6204 $fuellfarbe = $6; 6205 } 6206 6207 if ( defined $7 ) { 6208 $linienstaerke = $8; 6209 $linienart = $9; 6210 } 6211 $farbe = $11 if ( defined $10 ); 6212 6213 if ( defined $12 ) { $parameter = $13; } 6214 6215 $x = $14; 6216 $y = $15; 6217 $radius = 1; 6218 $radius = $17 if ( defined $16 ); 6219 6220 kreis( 6221 $layer, $x, $y, $radius, $farbe, 6222 $fuellart, $fuellfarbe, $linienart, $linienstaerke, $parameter 6223 ); 6224 $winkel = 0; 6225 $ausrichtung = "c"; 6226 if ( defined $18 ) { 6227 $text = $19; 6228 6229 $winkel = $21 if ( defined $20 ); 6230 6231 $ausrichtung = $23 if ( defined $22 ); 6232 6233 beschriftung( $layer, $farbe, $x, $y, $winkel, $ausrichtung, $text ); 6234 6235 } 6236 6237 } 6238 6239 elsif ( $zeile =~ 6240 /^kreisskala( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,\"([^\"]*)\")?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)( r=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+))?$/i 6241 ) 6242 { 6243 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "-", 6244 "" ); 6245 $layer = $2 if ( defined $1 ); 6246 6247 $farbe = $4 if ( defined $3 ); 6248 6249 if ( defined $5 ) { 6250 $linienstaerke = $6; 6251 $linienart = $7; 6252 } 6253 $pfeilart = $9 if ( defined $8 ); 6254 if ( defined $10 ) { $parameter = $11; } 6255 6256 $x = $12; 6257 $y = $13; 6258 $radius = 1; 6259 $laenge = 0.2; 6260 $winkel = 180; 6261 if ( defined $14 ) { 6262 $radius = $15; 6263 $laenge = $16; 6264 $winkel = $17; 6265 } 6266 6267 kreisskala( 6268 $layer, $x, $y, $radius, 6269 $laenge, $winkel, $farbe, $linienart, 6270 $linienstaerke, $parameter, $pfeilart 6271 ); 6272 6273 } 6274 6275 elsif ( $zeile =~ 6276 /^ellipse( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)( r=([-0-9\.]+),([-0-9\.]+))?$/i 6277 ) 6278 { 6279 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 6280 "" ); 6281 $layer = $2 if ( defined $1 ); 6282 6283 if ( defined $3 ) { 6284 $farbe = $4; 6285 $fuellart = $5; 6286 $fuellfarbe = $6; 6287 } 6288 6289 if ( defined $7 ) { 6290 $linienstaerke = $8; 6291 $linienart = $9; 6292 } 6293 $farbe = $11 if ( defined $10 ); 6294 if ( defined $12 ) { $parameter = $13; } 6295 6296 $x = $14; 6297 $y = $15; 6298 $radius1 = 1; 6299 $radius2 = 1; 6300 6301 if ( defined $16 ) { 6302 $radius1 = $17; 6303 $radius2 = $18; 6304 } 6305 ellipse( 6306 $layer, $x, $y, $radius1, 6307 $radius2, $farbe, $fuellart, $fuellfarbe, 6308 $linienart, $linienstaerke, $parameter 6309 ); 6310 6311 } 6312 6313 elsif ( $zeile =~ 6314 /^ellipse( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+) r=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+) r=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+)( r=([-0-9\.]+),([-0-9\.]+))?$/i 6315 ) 6316 { 6317 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 6318 "" ); 6319 $layer = $2 if ( defined $1 ); 6320 6321 if ( defined $3 ) { 6322 $farbe = $4; 6323 $fuellart = $5; 6324 $fuellfarbe = $6; 6325 } 6326 6327 if ( defined $7 ) { 6328 $linienstaerke = $8; 6329 $linienart = $9; 6330 } 6331 $farbe = $11 if ( defined $10 ); 6332 if ( defined $12 ) { $parameter = $13; } 6333 6334 $x = $14; 6335 $y = $15; 6336 $z = $16; 6337 6338 $r1 = $17; 6339 $r2 = $18; 6340 $r3 = $19; 6341 $r4 = $20; 6342 $r5 = $21; 6343 $r6 = $22; 6344 6345 $w1 = 0; 6346 $w2 = 360; 6347 if ( defined $23 ) { 6348 $w1 = $24; 6349 $w2 = $25; 6350 } 6351 6352 ellipse3d( $layer, $x, $y, $z, $r1, $r2, $r3, $r4, $r5, $r6, $w1, $w2, $farbe, 6353 $fuellart, $fuellfarbe, $linienart, $linienstaerke, $parameter ); 6354 6355 } 6356 6357 elsif ( $zeile =~ 6358 /^kreis( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+) r=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+)( r=([-0-9\.]+),([-0-9\.]+))?$/i 6359 ) 6360 { 6361 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 6362 "" ); 6363 $layer = $2 if ( defined $1 ); 6364 6365 if ( defined $3 ) { 6366 $farbe = $4; 6367 $fuellart = $5; 6368 $fuellfarbe = $6; 6369 } 6370 6371 if ( defined $7 ) { 6372 $linienstaerke = $8; 6373 $linienart = $9; 6374 } 6375 $farbe = $11 if ( defined $10 ); 6376 if ( defined $12 ) { $parameter = $13; } 6377 6378 $x = $14; 6379 $y = $15; 6380 $z = $16; 6381 6382 $r1 = $17; 6383 $r2 = $18; 6384 $r3 = $19; 6385 6386 $w1 = 0; 6387 $w2 = 360; 6388 if ( defined $20 ) { 6389 $w1 = $21; 6390 $w2 = $22; 6391 } 6392 6393 kreis3d( $layer, $x, $y, $z, $r1, $r2, $r3, $w1, $w2, $farbe, $fuellart, $fuellfarbe, 6394 $linienart, $linienstaerke, $parameter ); 6395 6396 } 6397 6398 elsif ( $zeile =~ 6399 /^kreisbogen( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)( r=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+))?( geschlossen)?( pfeil)?$/i 6400 ) 6401 { 6402 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 6403 "" ); 6404 $layer = $2 if ( defined $1 ); 6405 6406 if ( defined $3 ) { 6407 $farbe = $4; 6408 $fuellart = $5; 6409 $fuellfarbe = $6; 6410 } 6411 6412 if ( defined $7 ) { 6413 $linienstaerke = $8; 6414 $linienart = $9; 6415 } 6416 $farbe = $11 if ( defined $10 ); 6417 if ( defined $12 ) { $parameter = $13; } 6418 6419 $x = $14; 6420 $y = $15; 6421 $radius = 1; 6422 $winkel1 = 0; 6423 $winkel2 = 360; 6424 6425 if ( defined $16 ) { 6426 $radius = $17; 6427 $winkel1 = $18; 6428 $winkel2 = $19; 6429 } 6430 $geschlossen = "nein"; 6431 $geschlossen = "ja" if ( defined $20 ); 6432 $pfeil = ""; 6433 $pfeil = "->" if ( defined $21 ); 6434 kreisbogen( 6435 $layer, $linienart, $linienstaerke, $x, $y, 6436 $radius, $winkel1, $winkel2, $farbe, $fuellart, 6437 $fuellfarbe, $geschlossen, $parameter, $pfeil 6438 ); 6439 6440 } 6441 6442 elsif ( $zeile =~ 6443 /^ellipsebogen( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)( r=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+),([-0-9\.]+))?( geschlossen)?( pfeil)?$/i 6444 ) 6445 { 6446 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 6447 "" ); 6448 $layer = $2 if ( defined $1 ); 6449 6450 if ( defined $3 ) { 6451 $farbe = $4; 6452 $fuellart = $5; 6453 $fuellfarbe = $6; 6454 } 6455 6456 if ( defined $7 ) { 6457 $linienstaerke = $8; 6458 $linienart = $9; 6459 } 6460 $farbe = $11 if ( defined $10 ); 6461 if ( defined $12 ) { $parameter = $13; } 6462 6463 $x = $14; 6464 $y = $15; 6465 $radius1 = 1; 6466 $radius2 = 1; 6467 6468 $winkel1 = 0; 6469 $winkel2 = 360; 6470 6471 if ( defined $16 ) { 6472 $radius1 = $17; 6473 $radius2 = $18; 6474 $winkel1 = $19; 6475 $winkel2 = $20; 6476 } 6477 $geschlossen = "nein"; 6478 $geschlossen = "ja" if ( defined $21 ); 6479 $pfeil = ""; 6480 $pfeil = "->" if ( defined $22 ); 6481 ellipsebogen( 6482 $layer, $linienart, $linienstaerke, $x, $y, 6483 $radius1, $radius2, $winkel1, $winkel2, $farbe, 6484 $fuellart, $fuellfarbe, $geschlossen, $parameter, $pfeil 6485 ); 6486 6487 } 6488 6489 elsif ( $zeile =~ 6490 /^ring( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)( r=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+),([-0-9\.]+))?$/i 6491 ) 6492 { 6493 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 6494 "" ); 6495 $layer = $2 if ( defined $1 ); 6496 6497 if ( defined $3 ) { 6498 $farbe = $4; 6499 $fuellart = $5; 6500 $fuellfarbe = $6; 6501 } 6502 6503 if ( defined $7 ) { 6504 $linienstaerke = $8; 6505 $linienart = $9; 6506 } 6507 $farbe = $11 if ( defined $10 ); 6508 if ( defined $12 ) { $parameter = $13; } 6509 6510 $x = $14; 6511 $y = $15; 6512 $radius = 1; 6513 $dicke = 1; 6514 $winkel1 = 0; 6515 $winkel2 = 360; 6516 6517 if ( defined $16 ) { 6518 $radius = $17; 6519 $dicke = $18; 6520 $winkel1 = $19; 6521 $winkel2 = $20; 6522 } 6523 6524 kommentar( $layer, "Einen Ring zeichnen" ); 6525 ring( 6526 $layer, $linienart, $linienstaerke, $x, $y, 6527 $radius, $dicke, $winkel1, $winkel2, $farbe, 6528 $fuellart, $fuellfarbe, $parameter 6529 ); 6530 6531 } 6532 elsif ( $zeile =~ 6533 /^rechteck( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)( r=([-0-9\.]+)(,([-0-9\.]+))?(,([-0-9\.]+))?)?$/i 6534 ) 6535 { 6536 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 6537 "" ); 6538 $layer = $2 if ( defined $1 ); 6539 6540 if ( defined $3 ) { 6541 $farbe = $4; 6542 $fuellart = $5; 6543 $fuellfarbe = $6; 6544 } 6545 6546 if ( defined $7 ) { 6547 $linienstaerke = $8; 6548 $linienart = $9; 6549 } 6550 $farbe = $11 if ( defined $10 ); 6551 if ( defined $12 ) { $parameter = $13; } 6552 6553 $x = $14; 6554 $y = $15; 6555 $breite = 1; 6556 $hoehe = $breite; 6557 6558 if ( defined $16 ) { 6559 $breite = $17; 6560 $hoehe = $breite; 6561 if ( defined $18 ) { $hoehe = $19; } 6562 } 6563 $winkel = 0; 6564 if ( defined $20 ) { $winkel = $21; } 6565 rechteck( 6566 $layer, $x, $y, $breite, 6567 $hoehe, $winkel, $farbe, $fuellart, 6568 $fuellfarbe, $linienart, $linienstaerke, $parameter 6569 ); 6570 } 6571 6572 elsif ( $zeile =~ 6573 /^parallelogramm( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)( r=([-0-9\.]+)(,([-0-9\.]+))?(,([-0-9\.]+))?(,([-0-9\.]+))?)?$/i 6574 ) 6575 { 6576 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 6577 "" ); 6578 $layer = $2 if ( defined $1 ); 6579 6580 if ( defined $3 ) { 6581 $farbe = $4; 6582 $fuellart = $5; 6583 $fuellfarbe = $6; 6584 } 6585 6586 if ( defined $7 ) { 6587 $linienstaerke = $8; 6588 $linienart = $9; 6589 } 6590 $farbe = $11 if ( defined $10 ); 6591 if ( defined $12 ) { $parameter = $13; } 6592 6593 $x = $14; 6594 $y = $15; 6595 $breite = 1; 6596 $hoehe = $breite; 6597 6598 if ( defined $16 ) { 6599 $breite = $17; 6600 $hoehe = $breite; 6601 if ( defined $18 ) { $hoehe = $19; } 6602 } 6603 $winkel1 = 0; 6604 $winkel2 = 90; 6605 if ( defined $20 ) { $winkel1 = $21; } 6606 if ( defined $22 ) { $winkel2 = $23; } 6607 parallelogramm( 6608 $layer, $x, $y, $breite, $hoehe, 6609 $winkel1, $winkel2, $farbe, $fuellart, $fuellfarbe, 6610 $linienart, $linienstaerke, $parameter 6611 ); 6612 } 6613 6614 elsif ( $zeile =~ 6615 /^dreieck( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)( r=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))?)?$/i 6616 ) 6617 { 6618 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 6619 "" ); 6620 $layer = $2 if ( defined $1 ); 6621 6622 if ( defined $3 ) { 6623 $farbe = $4; 6624 $fuellart = $5; 6625 $fuellfarbe = $6; 6626 } 6627 6628 if ( defined $7 ) { 6629 $linienstaerke = $8; 6630 $linienart = $9; 6631 } 6632 $farbe = $11 if ( defined $10 ); 6633 if ( defined $12 ) { $parameter = $13; } 6634 6635 $x = $14; 6636 $y = $15; 6637 $laenge = 1; 6638 $winkel = 1; 6639 6640 if ( defined $16 ) { 6641 $laenge = $17; 6642 $winkel = $18; 6643 } 6644 $winkel2 = 0; 6645 if ( defined $19 ) { $winkel2 = $20; } 6646 6647 dreieckrechtwinklig( 6648 $layer, $x, $y, $laenge, 6649 $winkel, $winkel2, $farbe, $fuellart, 6650 $fuellfarbe, $linienart, $linienstaerke, $parameter 6651 ); 6652 6653 } 6654 6655 elsif ( $zeile =~ 6656 /^dreieck( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)( r=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))?(,([-0-9\.]+))?)?$/i 6657 ) 6658 { 6659 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 6660 "" ); 6661 $layer = $2 if ( defined $1 ); 6662 6663 if ( defined $3 ) { 6664 $farbe = $4; 6665 $fuellart = $5; 6666 $fuellfarbe = $6; 6667 } 6668 6669 if ( defined $7 ) { 6670 $linienstaerke = $8; 6671 $linienart = $9; 6672 } 6673 $farbe = $11 if ( defined $10 ); 6674 if ( defined $12 ) { $parameter = $13; } 6675 6676 $x = $14; 6677 $y = $15; 6678 $breite = 1; 6679 $hoehe = 1; 6680 6681 if ( defined $16 ) { 6682 $breite = $17; 6683 $hoehe = $18; 6684 } 6685 $winkel1 = 90; 6686 if ( defined $19 ) { $winkel1 = $20; } 6687 6688 $winkel2 = 0; 6689 if ( defined $21 ) { $winkel2 = $22; } 6690 6691 dreieckbreitehoehe( 6692 $layer, $x, $y, $breite, $hoehe, 6693 $winkel1, $winkel2, $farbe, $fuellart, $fuellfarbe, 6694 $linienart, $linienstaerke, $parameter 6695 ); 6696 6697 } 6698 6699 elsif ( $zeile =~ 6700 /^dreieck( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+) p=([-0-9\.]+),([-0-9\.]+) r=([-0-9\.]+)$/i 6701 ) 6702 { 6703 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 6704 "" ); 6705 $layer = $2 if ( defined $1 ); 6706 6707 if ( defined $3 ) { 6708 $farbe = $4; 6709 $fuellart = $5; 6710 $fuellfarbe = $6; 6711 } 6712 6713 if ( defined $7 ) { 6714 $linienstaerke = $8; 6715 $linienart = $9; 6716 } 6717 $farbe = $11 if ( defined $10 ); 6718 if ( defined $12 ) { $parameter = $13; } 6719 6720 $x1 = $14; 6721 $y1 = $15; 6722 6723 $x2 = $16; 6724 $y2 = $17; 6725 6726 $winkel = $18; 6727 6728 if ( gethyp() == 1 ) { 6729 6730 dreieckrechtwinkligpunktehoehe( 6731 $layer, $x1, $y1, $x2, 6732 $y2, $winkel, $farbe, $fuellart, 6733 $fuellfarbe, $linienart, $linienstaerke, $parameter 6734 ); 6735 6736 } 6737 else { 6738 dreieckrechtwinkligpunkte( 6739 $layer, $x1, $y1, $x2, 6740 $y2, $winkel, $farbe, $fuellart, 6741 $fuellfarbe, $linienart, $linienstaerke, $parameter 6742 ); 6743 6744 } 6745 6746 } 6747 6748 elsif ( $zeile =~ 6749 /^pfeil( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)( r=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+),([-0-9\.]+))?)?$/i 6750 ) 6751 { 6752 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 6753 "" ); 6754 $layer = $2 if ( defined $1 ); 6755 6756 if ( defined $3 ) { 6757 $farbe = $4; 6758 $fuellart = $5; 6759 $fuellfarbe = $6; 6760 } 6761 6762 if ( defined $7 ) { 6763 $linienstaerke = $8; 6764 $linienart = $9; 6765 } 6766 $farbe = $11 if ( defined $10 ); 6767 if ( defined $12 ) { $parameter = $13; } 6768 6769 $x = $14; 6770 $y = $15; 6771 $breite = 1; 6772 $hoehe = 1; 6773 6774 if ( defined $16 ) { 6775 $hoehe = $18; 6776 $breite = $17; 6777 } 6778 6779 $pfeil = 0.2; 6780 $pfeillaenge = 1; 6781 6782 if ( defined $19 ) { 6783 $pfeil = $20; 6784 $pfeillaenge = $21; 6785 } 6786 6787 pfeil( 6788 $layer, $x, $y, $breite, $hoehe, 6789 $pfeil, $pfeillaenge, $farbe, $fuellart, $fuellfarbe, 6790 $linienart, $linienstaerke, $parameter 6791 ); 6792 } 6793 6794 elsif ( $zeile =~ 6795 /^pfeilknick( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)( r=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+),([-0-9\.]+))?)?$/i 6796 ) 6797 { 6798 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 6799 "" ); 6800 $layer = $2 if ( defined $1 ); 6801 6802 if ( defined $3 ) { 6803 $farbe = $4; 6804 $fuellart = $5; 6805 $fuellfarbe = $6; 6806 } 6807 6808 if ( defined $7 ) { 6809 $linienstaerke = $8; 6810 $linienart = $9; 6811 } 6812 $farbe = $11 if ( defined $10 ); 6813 if ( defined $12 ) { $parameter = $13; } 6814 6815 $x = $14; 6816 $y = $15; 6817 $breite = 1; 6818 $hoehe = 1; 6819 $breiteknick = 0.5; 6820 6821 if ( defined $16 ) { 6822 $breite = $17; 6823 $breiteknick = $18; 6824 $hoehe = $19; 6825 } 6826 6827 $pfeil = 0.2; 6828 $pfeillaenge = 1; 6829 6830 if ( defined $20 ) { 6831 $pfeil = $21; 6832 $pfeillaenge = $22; 6833 } 6834 6835 pfeilknick( 6836 $layer, $x, $y, $breite, $breiteknick, 6837 $hoehe, $pfeil, $pfeillaenge, $farbe, $fuellart, 6838 $fuellfarbe, $linienart, $linienstaerke, $parameter 6839 ); 6840 } 6841 6842 elsif ( $zeile =~ 6843 /^dreieck( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))?$/i 6844 ) 6845 { 6846 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 6847 "" ); 6848 $layer = $2 if ( defined $1 ); 6849 6850 if ( defined $3 ) { 6851 $farbe = $4; 6852 $fuellart = $5; 6853 $fuellfarbe = $6; 6854 } 6855 6856 if ( defined $7 ) { 6857 $linienstaerke = $8; 6858 $linienart = $9; 6859 } 6860 $farbe = $11 if ( defined $10 ); 6861 if ( defined $12 ) { $parameter = $13; } 6862 6863 $x1 = $14; 6864 $y1 = $15; 6865 $z1 = ""; 6866 6867 if ( defined $16 ) { $z1 = $17; } 6868 6869 $x2 = $18; 6870 $y2 = $19; 6871 6872 $z2 = ""; 6873 6874 if ( defined $20 ) { $z2 = $21; } 6875 6876 $x3 = $22; 6877 $y3 = $23; 6878 6879 $z3 = ""; 6880 6881 if ( defined $24 ) { $z3 = $25; } 6882 6883 kommentar( $layer, "Ein Dreieck zeichnen" ); 6884 dreieck( $layer, $x1, $y1, $z1, $x2, $y2, $z2, $x3, $y3, $z3, $farbe, $fuellart, 6885 $fuellfarbe, $linienart, $linienstaerke, $parameter ); 6886 6887 } 6888 6889 elsif ( $zeile =~ 6890 /^viereck( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))?$/i 6891 ) 6892 { 6893 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 6894 "" ); 6895 $layer = $2 if ( defined $1 ); 6896 6897 if ( defined $3 ) { 6898 $farbe = $4; 6899 $fuellart = $5; 6900 $fuellfarbe = $6; 6901 } 6902 6903 if ( defined $7 ) { 6904 $linienstaerke = $8; 6905 $linienart = $9; 6906 } 6907 $farbe = $11 if ( defined $10 ); 6908 if ( defined $12 ) { $parameter = $13; } 6909 6910 $x1 = $14; 6911 $y1 = $15; 6912 $z1 = ""; 6913 6914 if ( defined $16 ) { $z1 = $17; } 6915 6916 $x2 = $18; 6917 $y2 = $19; 6918 6919 $z2 = ""; 6920 6921 if ( defined $20 ) { $z2 = $21; } 6922 6923 $x3 = $22; 6924 $y3 = $23; 6925 6926 $z3 = ""; 6927 6928 if ( defined $24 ) { $z3 = $25; } 6929 6930 $x4 = $26; 6931 $y4 = $27; 6932 6933 $z4 = ""; 6934 6935 if ( defined $28 ) { $z4 = $29; } 6936 6937 viereck( $layer, $x1, $y1, $z1, $x2, $y2, $z2, $x3, $y3, $z3, $x4, $y4, $z4, $farbe, 6938 $fuellart, $fuellfarbe, $linienart, $linienstaerke, $parameter ); 6939 6940 } 6941 6942 elsif ( $zeile =~ 6943 /^neck( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+) r=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))?$/i 6944 ) 6945 { 6946 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 6947 "" ); 6948 $layer = $2 if ( defined $1 ); 6949 6950 if ( defined $3 ) { 6951 $farbe = $4; 6952 $fuellart = $5; 6953 $fuellfarbe = $6; 6954 } 6955 6956 if ( defined $7 ) { 6957 $linienstaerke = $8; 6958 $linienart = $9; 6959 } 6960 $farbe = $11 if ( defined $10 ); 6961 if ( defined $12 ) { $parameter = $13; } 6962 6963 $x1 = $14; 6964 $y1 = $15; 6965 6966 $anzahl = $16; 6967 $laenge = $17; 6968 6969 $winkel = 0; 6970 6971 if ( defined $18 ) { $winkel = $19; } 6972 6973 neck( 6974 $layer, $x1, $y1, $anzahl, 6975 $laenge, $winkel, $farbe, $fuellart, 6976 $fuellfarbe, $linienart, $linienstaerke, $parameter 6977 ); 6978 6979 } 6980 6981 elsif ( $zeile =~ 6982 /^winkel( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))? p=([-0-9\.]+),([-0-9\.]+) p=([-0-9\.]+),([-0-9\.]+) p=([-0-9\.]+),([-0-9\.]+)( r=([-0-9\.]+))?(,(i|a))?( text=\"([^\"]*)\")?$/i 6983 ) 6984 { 6985 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 6986 "" ); 6987 $layer = $2 if ( defined $1 ); 6988 6989 if ( defined $3 ) { 6990 $farbe = $4; 6991 $fuellart = $5; 6992 $fuellfarbe = $6; 6993 } 6994 6995 if ( defined $7 ) { 6996 $linienstaerke = $8; 6997 $linienart = $9; 6998 } 6999 $farbe = $11 if ( defined $10 ); 7000 $x = $12; 7001 $y = $13; 7002 $x2 = $14; 7003 $y2 = $15; 7004 $x3 = $16; 7005 $y3 = $17; 7006 $l1 = vektorbetrag( vektordifferenz( "x", $x, $y, 0, $x2, $y2, 0 ), 7007 vektordifferenz( "y", $x, $y, 0, $x2, $y2, 0 ), 0 ); 7008 $l2 = vektorbetrag( vektordifferenz( "x", $x3, $y3, 0, $x2, $y2, 0 ), 7009 vektordifferenz( "y", $x3, $y3, 0, $x2, $y2, 0 ), 0 ); 7010 $l3 = vektorbetrag( vektordifferenz( "x", $x, $y, 0, $x3, $y3, 0 ), 7011 vektordifferenz( "y", $x, $y, 0, $x3, $y3, 0 ), 0 ); 7012 $radius = minimum( $l1, $l2, $l3 ) / 3; 7013 $radius = $19 if ( defined $18 ); 7014 $winkelrichtung = "i"; 7015 $winkelrichtung = $21 if ( defined $20 ); 7016 $text = ""; 7017 $text = $23 if ( defined $22 ); 7018 winkel( $layer, $x, $y, $x2, $y2, $x3, $y3, $radius, $text, $winkelrichtung, $farbe, 7019 $fuellart, $fuellfarbe, $linienart, $linienstaerke, "" ); 7020 7021 } 7022 7023 elsif ( $zeile =~ 7024 /^winkel( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))? p=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+) p=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+) p=([-0-9\.]+),([-0-9\.]+),([-0-9\.]+)( r=([-0-9\.]+))?(,(i|a))?( text=\"([^\"]*)\")?$/i 7025 ) 7026 { 7027 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 7028 "" ); 7029 $layer = $2 if ( defined $1 ); 7030 7031 if ( defined $3 ) { 7032 $farbe = $4; 7033 $fuellart = $5; 7034 $fuellfarbe = $6; 7035 } 7036 7037 if ( defined $7 ) { 7038 $linienstaerke = $8; 7039 $linienart = $9; 7040 } 7041 $farbe = $11 if ( defined $10 ); 7042 $x = $12; 7043 $y = $13; 7044 $z = $14; 7045 $x2 = $15; 7046 $y2 = $16; 7047 $z2 = $17; 7048 7049 $x3 = $18; 7050 $y3 = $19; 7051 $z3 = $20; 7052 7053 $l1 = vektorbetrag( 7054 vektordifferenz( 7055 "x", 7056 x3d( $x, $y, $z ), 7057 y3d( $x, $y, $z ), 7058 0, 7059 x3d( $x2, $y2, $z2 ), 7060 y3d( $x2, $y2, $z2 ), 7061 0 7062 ), 7063 vektordifferenz( 7064 "y", 7065 x3d( $x, $y, $z ), 7066 y3d( $x, $y, $z ), 7067 0, 7068 x3d( $x2, $y2, $z2 ), 7069 y3d( $x2, $y2, $z2 ), 7070 0 7071 ), 7072 0 7073 ); 7074 $l2 = vektorbetrag( 7075 vektordifferenz( 7076 "x", 7077 x3d( $x3, $y3, $z3 ), 7078 y3d( $x3, $y3, $z3 ), 7079 0, 7080 x3d( $x2, $y2, $z2 ), 7081 y3d( $x2, $y2, $z2 ), 7082 0 7083 ), 7084 vektordifferenz( 7085 "y", 7086 x3d( $x3, $y3, $z3 ), 7087 y3d( $x3, $y3, $z3 ), 7088 0, 7089 x3d( $x2, $y2, $z2 ), 7090 y3d( $x2, $y2, $z2 ), 7091 0 7092 ), 7093 0 7094 ); 7095 $l3 = vektorbetrag( 7096 vektordifferenz( 7097 "x", 7098 x3d( $x, $y, $z ), 7099 y3d( $x, $y, $z ), 7100 0, 7101 x3d( $x3, $y3, $z3 ), 7102 y3d( $x3, $y3, $z3 ), 7103 0 7104 ), 7105 vektordifferenz( 7106 "y", 7107 x3d( $x, $y, $z ), 7108 y3d( $x, $y, $z ), 7109 0, 7110 x3d( $x3, $y3, $z3 ), 7111 y3d( $x3, $y3, $z3 ), 7112 0 7113 ), 7114 0 7115 ); 7116 $radius = minimum( $l1, $l2, $l3 ) / 3; 7117 $radius = $22 if ( defined $21 ); 7118 $winkelrichtung = "i"; 7119 $winkelrichtung = $24 if ( defined $23 ); 7120 $text = ""; 7121 $text = $26 if ( defined $25 ); 7122 winkel( 7123 $layer, x3d( $x, $y, $z ), 7124 y3d( $x, $y, $z ), x3d( $x2, $y2, $z2 ), 7125 y3d( $x2, $y2, $z2 ), x3d( $x3, $y3, $z3 ), 7126 y3d( $x3, $y3, $z3 ), $radius, 7127 $text, $winkelrichtung, 7128 $farbe, $fuellart, 7129 $fuellfarbe, $linienart, 7130 $linienstaerke, "" 7131 ); 7132 7133 } 7134 7135 elsif ( $zeile =~ /^pstricks( layer=([0-9]+))?$/i ) { 7136 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 7137 "" ); 7138 $layer = $2 if ( defined $1 ); 7139 my $endeerreicht = 0; 7140 my $hilfszeile; 7141 my $inzeile = 0; 7142 while (( !$endeerreicht ) 7143 && ( $i < $eingabedateizeilen - 1 ) ) 7144 { 7145 $i++; 7146 $hilfszeile = $eingabedatei[$i]; 7147 if ( $hilfszeile =~ /^ende$/i ) { $endeerreicht = 1; } 7148 elsif ( $hilfszeile ne "" ) { 7149 $inzeile++; 7150 pstricks( $layer, $hilfszeile ); 7151 } 7152 else { 7153 kommentar( $layer, "Kaputte Zeile" ); 7154 $endeerreicht = 1; 7155 } 7156 } 7157 if ( !$endeerreicht ) { printf("Keine sinnvollen Daten\n"); } 7158 else { } 7159 7160 } 7161 elsif ( $zeile =~ 7162 /^bild( layer=([0-9]+))? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? r=([-0-9\.]+)(,([-0-9\.]+))?(,([-0-9\.]+))? ([^\"]*)$/i 7163 ) 7164 { 7165 $layer = 10; 7166 $layer = $2 if ( defined $1 ); 7167 $x = $3; 7168 $y = $4; 7169 $z = ""; 7170 $z = $6 if ( defined $5 ); 7171 $breite = $7; 7172 $winkel = 0; 7173 $winkel = $9 if ( defined $8 ); 7174 $offset = 0; 7175 $offset = $11 if ( defined $10 ); 7176 $bild = $12; 7177 bild( $layer, $x, $y, $z, $breite, $winkel, $bild ); 7178 } 7179 elsif ( 7180 $zeile =~ 7181 7182 /^strichliste( layer=([0-9]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))? p=([-0-9\.]+),([-0-9\.]+) r=([-0-9\.]+),([-0-9\.]+) ([^\"]*)$/i 7183 ) 7184 { 7185 settexthier(""); 7186 7187 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 7188 "" ); 7189 $layer = $2 if ( defined $1 ); 7190 7191 if ( defined $3 ) { 7192 $linienstaerke = $4; 7193 $linienart = $5; 7194 } 7195 7196 if ( defined $6 ) { $farbe = $7; } 7197 $x = $8; 7198 $y = $9; 7199 $hoehe = $10; 7200 $abstand = $11, $wert = $12; 7201 strichliste( $layer, $x, $y, $wert, $hoehe, $abstand, $farbe, $linienstaerke, 7202 $linienart ); 7203 } 7204 7205 elsif ( $zeile =~ 7206 /^binomial( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? np=([0-9\.]+),([0-9\.]+)(,([a-z0-9!]+))?( b=([0-9\.]+),([0-9\.]+))$/i 7207 ) 7208 { 7209 7210 setpfeilart("->"); 7211 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "->", 7212 "" ); 7213 $layer = $2 if ( defined $1 ); 7214 7215 if ( defined $3 ) { 7216 $farbe = $4; 7217 $fuellart = $5; 7218 $fuellfarbe = $6; 7219 } 7220 7221 if ( defined $7 ) { 7222 $linienstaerke = $8; 7223 $linienart = $9; 7224 } 7225 $farbe = $11 if ( defined $10 ); 7226 if ( defined $12 ) { $parameter = $13; } 7227 7228 $nwert = $14; 7229 $pwert = $15; 7230 $aufsummiert = "nein"; 7231 if ( defined $16 ) { $aufsummiert = $17; } 7232 $breite = 1; 7233 $markierung = $nwert; 7234 7235 if ( defined $18 ) { 7236 $breite = $19; 7237 $markierung = $20; 7238 } 7239 7240 kommentar( $layer, "Die Binomialverteilung" ); 7241 7242 binomial( 7243 $layer, $nwert, $pwert, $aufsummiert, 7244 $breite, $farbe, $fuellart, $fuellfarbe, 7245 $linienart, $linienstaerke, $markierung, $parameter 7246 ); 7247 7248 } 7249 elsif ( $zeile =~ 7250 /^binomialteil( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? np=([0-9\.]+),([0-9\.]+),([0-9\.]+),([0-9\.]+)(,([a-z0-9!]+))?( b=([0-9\.]+),([0-9\.]+))$/i 7251 ) 7252 { 7253 setpfeilart("->"); 7254 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "->", 7255 "" ); 7256 $layer = $2 if ( defined $1 ); 7257 7258 if ( defined $3 ) { 7259 $farbe = $4; 7260 $fuellart = $5; 7261 $fuellfarbe = $6; 7262 } 7263 7264 if ( defined $7 ) { 7265 $linienstaerke = $8; 7266 $linienart = $9; 7267 } 7268 $farbe = $11 if ( defined $10 ); 7269 if ( defined $12 ) { $parameter = $13; } 7270 7271 $nwert = $14; 7272 $pwert = $15; 7273 $anfang = $16; 7274 $ende = $17; 7275 $aufsummiert = "nein"; 7276 7277 if ( defined $18 ) { $aufsummiert = $19; } 7278 $breite = 1; 7279 $markierung = $nwert; 7280 if ( defined $20 ) { 7281 $breite = $21; 7282 $markierung = $22; 7283 } 7284 kommentar( $layer, "Die Binomialverteilung teilweise gezeichnet" ); 7285 binomialteil( 7286 $layer, $nwert, $pwert, $anfang, $ende, 7287 $aufsummiert, $breite, $farbe, $fuellart, $fuellfarbe, 7288 $linienart, $linienstaerke, $markierung, $parameter 7289 ); 7290 7291 } 7292 7293 elsif ( $zeile =~ 7294 /^binomialstrich( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? np=([0-9\.]+),([0-9\.]+)(,([a-z0-9!]+))?( b=([0-9\.]+),([0-9\.]+))$/i 7295 ) 7296 { 7297 setpfeilart("->"); 7298 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "->", 7299 "" ); 7300 $layer = $2 if ( defined $1 ); 7301 7302 if ( defined $3 ) { 7303 $farbe = $4; 7304 $fuellart = $5; 7305 $fuellfarbe = $6; 7306 } 7307 7308 if ( defined $7 ) { 7309 $linienstaerke = $8; 7310 $linienart = $9; 7311 } 7312 $farbe = $11 if ( defined $10 ); 7313 if ( defined $12 ) { $parameter = $13; } 7314 7315 $nwert = $14; 7316 $pwert = $15; 7317 $aufsummiert = "nein"; 7318 if ( defined $16 ) { $aufsummiert = $17; } 7319 $breite = 1; 7320 $markierung = $nwert; 7321 7322 if ( defined $18 ) { 7323 $breite = $19; 7324 $markierung = $20; 7325 } 7326 7327 kommentar( $layer, "Die Binomialverteilung" ); 7328 7329 setbinostrich(); 7330 binomial( 7331 $layer, $nwert, $pwert, $aufsummiert, 7332 $breite, $farbe, $fuellart, $fuellfarbe, 7333 $linienart, $linienstaerke, $markierung, $parameter 7334 ); 7335 7336 } 7337 7338 elsif ( $zeile =~ 7339 /^binomialteilstrich( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? np=([0-9\.]+),([0-9\.]+),([0-9\.]+),([0-9\.]+)(,([a-z0-9!]+))?( b=([0-9\.]+),([0-9\.]+))$/i 7340 ) 7341 { 7342 setpfeilart("->"); 7343 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "->", 7344 "" ); 7345 $layer = $2 if ( defined $1 ); 7346 7347 if ( defined $3 ) { 7348 $farbe = $4; 7349 $fuellart = $5; 7350 $fuellfarbe = $6; 7351 } 7352 7353 if ( defined $7 ) { 7354 $linienstaerke = $8; 7355 $linienart = $9; 7356 } 7357 $farbe = $11 if ( defined $10 ); 7358 if ( defined $12 ) { $parameter = $13; } 7359 7360 $nwert = $14; 7361 $pwert = $15; 7362 $anfang = $16; 7363 $ende = $17; 7364 $aufsummiert = "nein"; 7365 7366 if ( defined $18 ) { $aufsummiert = $19; } 7367 $breite = 1; 7368 $markierung = $nwert; 7369 if ( defined $20 ) { 7370 $breite = $21; 7371 $markierung = $22; 7372 } 7373 kommentar( $layer, "Die Binomialverteilung teilweise gezeichnet" ); 7374 setbinostrich(); 7375 binomialteil( 7376 $layer, $nwert, $pwert, $anfang, $ende, 7377 $aufsummiert, $breite, $farbe, $fuellart, $fuellfarbe, 7378 $linienart, $linienstaerke, $markierung, $parameter 7379 ); 7380 7381 } 7382 7383 elsif ( $zeile =~ 7384 /^baumdiagramm( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")?( p=([-0-9\.]+),([-0-9\.]+))?$/i 7385 ) 7386 { 7387 standard( 10, getlinienart(), 0.2, getfarbe(), "", getfuellfarbe(), "", "" ); 7388 $layer = $2 if ( defined $1 ); 7389 7390 if ( defined $3 ) { 7391 $farbe = $4; 7392 $fuellart = $5; 7393 $fuellfarbe = $6; 7394 } 7395 7396 if ( defined $7 ) { 7397 $linienstaerke = $8; 7398 $linienart = $9; 7399 } 7400 $farbe = $11 if ( defined $10 ); 7401 if ( defined $12 ) { $parameter = $13; } 7402 7403 $x = 0; 7404 $y = 0; 7405 if ( defined $14 ) { 7406 $x = $15; 7407 $y = $16; 7408 } 7409 $text = ""; 7410 7411 $endeerreicht = 0; 7412 $inzeile = 0; 7413 while (( !$endeerreicht ) 7414 && ( $i < $eingabedateizeilen - 1 ) ) 7415 { 7416 $i++; 7417 $hilfszeile = $eingabedatei[$i]; 7418 if ( $hilfszeile =~ /^ende$/i ) { 7419 $endeerreicht = 1; 7420 7421 } 7422 elsif ( $hilfszeile =~ /^([^\"]*) -> ([^\"]*)$/i ) { 7423 knotenzuordnung( $1 . "->" . $2 ); 7424 $text = $text . $1 . "->" . $2 . ";"; 7425 7426 $inzeile++; 7427 7428 } 7429 else { 7430 kommentar( $layer, "Kaputte Zeile" ); 7431 $endeerreicht = 1; 7432 } 7433 } 7434 if ( !$endeerreicht ) { printf("%Keine sinnvollen Daten\n"); } 7435 else { 7436 baumdiagramm( 7437 $layer, $x, $y, $farbe, $fuellart, 7438 $fuellfarbe, $linienart, $linienstaerke, $parameter, $text 7439 ); 7440 } 7441 7442 } 7443 7444 elsif ( $zeile =~ 7445 /^uhr( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),([a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)( r=([-0-9\.]+),([-0-9\.]+))?$/i 7446 ) 7447 { 7448 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 7449 "" ); 7450 $layer = $2 if ( defined $1 ); 7451 7452 if ( defined $3 ) { 7453 $farbe = $4; 7454 $fuellart = $5; 7455 $fuellfarbe = $6; 7456 } 7457 7458 if ( defined $7 ) { 7459 $linienstaerke = $8; 7460 $linienart = $9; 7461 } 7462 $farbe = $11 if ( defined $10 ); 7463 if ( defined $12 ) { $parameter = $13; } 7464 7465 $x = $14; 7466 $y = $15; 7467 $radius = 1; 7468 $laenge = 0.2; 7469 7470 if ( defined $16 ) { 7471 $radius = $17; 7472 $laenge = $18; 7473 } 7474 uhr( 7475 $layer, $x, $y, $radius, 7476 $laenge, $farbe, $fuellart, $fuellfarbe, 7477 $linienart, $linienstaerke, $parameter 7478 ); 7479 7480 } 7481 7482 elsif ( $zeile =~ 7483 /^uhrzeit( layer=([0-9]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+) r=([-0-9\.]+)(,([-0-9\.]+))?(,([-0-9\.]+))?(,([-0-9\.]+))?$/i 7484 ) 7485 { 7486 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 7487 "" ); 7488 $layer = $2 if ( defined $1 ); 7489 7490 if ( defined $3 ) { 7491 $linienstaerke = $4; 7492 $linienart = $5; 7493 } 7494 $farbe = $7 if ( defined $6 ); 7495 7496 if ( defined $8 ) { $parameter = $9; } 7497 7498 $x = $10; 7499 $y = $11; 7500 7501 $stunde = ""; 7502 $minute = ""; 7503 $sekunde = ""; 7504 7505 $radius = $12; 7506 $stunde = $14 if ( defined $13 ); 7507 $minute = $16 if ( defined $15 ); 7508 $sekunde = $18 if ( defined $17 ); 7509 7510 uhrzeit( 7511 $layer, $x, $y, $radius, 7512 $stunde, $minute, $sekunde, $farbe, 7513 $linienart, $linienstaerke, $parameter 7514 ); 7515 7516 } 7517 7518 elsif ( $zeile =~ 7519 /^knoten( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( parameter=\"([^\"]*)\")? p=([-0-9\.]+),([-0-9\.]+)(,([-0-9\.]+))? r=\"([^\"]*)\",\"([^\"]*)\"(,\"([^\"]*)\")?$/i 7520 ) 7521 { 7522 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 7523 "" ); 7524 $layer = $2 if ( defined $1 ); 7525 7526 $farbe = $4 if ( defined $3 ); 7527 if ( defined $6 ) { $parameter = $5; } 7528 7529 $x = $7; 7530 $y = $8; 7531 $z = ""; 7532 $z = $10 if ( defined $9 ); 7533 7534 $text = $12; 7535 $name = $11; 7536 7537 $art = "rnode"; 7538 $art = $14 if ( defined $13 ); 7539 7540 knoten( $layer, $farbe, $x, $y, $z, $name, $text, $art, $parameter ); 7541 7542 } 7543 7544 elsif ( $zeile =~ 7545 /^linie( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,\"([^\"]*)\")?( parameter=\"([^\"]*)\")? p=\"([^\"]*)\" p=\"([^\"]*)\"$/i 7546 ) 7547 { 7548 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 7549 "" ); 7550 $layer = $2 if ( defined $1 ); 7551 $farbe = $4 if ( defined $3 ); 7552 7553 if ( defined $5 ) { 7554 $linienstaerke = $6; 7555 $linienart = $7; 7556 } 7557 7558 $pfeilart = $9 if ( defined $8 ); 7559 7560 if ( defined $10 ) { 7561 $parameter1 = $11; 7562 } 7563 else { 7564 $parameter1 = ""; 7565 } 7566 $name1 = $12; 7567 $name2 = $13; 7568 7569 knotenverbindung( 7570 $layer, $name1, $name2, "", 7571 $linienart, $linienstaerke, $farbe, $parameter1, 7572 "", $pfeilart 7573 ); 7574 } 7575 7576 elsif ( $zeile =~ 7577 /^linie( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,\"([^\"]*)\")?( parameter=\"([^\"]*)\")? p=\"([^\"]*)\" p=\"([^\"]*)\" text=\"([^\"]*)(,\"([^\"]*)\")?\"$/i 7578 ) 7579 { 7580 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 7581 "" ); 7582 $layer = $2 if ( defined $1 ); 7583 $farbe = $4 if ( defined $3 ); 7584 7585 if ( defined $5 ) { 7586 $linienstaerke = $6; 7587 $linienart = $7; 7588 } 7589 7590 $pfeilart = $9 if ( defined $8 ); 7591 7592 if ( defined $10 ) { 7593 $parameter1 = $11; 7594 } 7595 else { 7596 $parameter1 = ""; 7597 } 7598 $name1 = $12; 7599 $name2 = $13; 7600 $text = $14; 7601 $parameter2 = ""; 7602 $parameter2 = $16 if ( defined $15 ); 7603 7604 knotenverbindung( 7605 $layer, $name1, $name2, $text, $linienart, 7606 $linienstaerke, $farbe, $parameter1, $parameter2, $pfeilart 7607 ); 7608 } 7609 7610 elsif ( $zeile =~ 7611 /^kreis( layer=([0-9]+))?( farbe=([a-zaeoeue0-9!]+),(["a-z0-9!]+),([a-z0-9!]+))?( linie=([0-9\.]+),([a-z0-9!]+))?(,([a-zaeoeue0-9!]+))?(,\"([^\"]*)\")?( parameter=\"([^\"]*)\")? p=\"([^\"]*)\"( r=([-0-9\.]+))?( text=\"([^\"]*)\"(,([-0-9\.]+))?(,([a-z0-9!]+))?)?$/i 7612 ) 7613 { 7614 standard( 10, getlinienart(), getlinienstaerke(), getfarbe(), "", getfuellfarbe(), "", 7615 "" ); 7616 $layer = $2 if ( defined $1 ); 7617 7618 if ( defined $3 ) { 7619 $farbe = $4; 7620 $fuellart = $5; 7621 $fuellfarbe = $6; 7622 } 7623 7624 if ( defined $7 ) { 7625 $linienstaerke = $8; 7626 $linienart = $9; 7627 } 7628 $farbe = $11 if ( defined $10 ); 7629 7630 $pfeilart = $13 if ( defined $12 ); 7631 7632 if ( defined $14 ) { $parameter = $15; } 7633 7634 $name1 = $16; 7635 $radius = 1; 7636 $radius = $18 if ( defined $17 ); 7637 $text = ""; 7638 $winkel = 0; 7639 $ausrichtung = 0; 7640 if ( defined $19 ) { 7641 $text = $20; 7642 7643 $winkel = $22 if ( defined $21 ); 7644 7645 $ausrichtung = $24 if ( defined $23 ); 7646 } 7647 7648 knotenkreis( 7649 $layer, $name1, $text, $winkel, 7650 $radius, $farbe, $fuellart, $fuellfarbe, 7651 $linienart, $linienstaerke, $pfeilart, $parameter 7652 ); 7653 7654 } 7655 7656 elsif ( $zeile =~ /^usepackage=\"([^\"]*)\",\"([^\"]*)\"$/i ) { 7657 usepackage( $1, $2 ); 7658 } 7659 elsif ( $zeile =~ /^definition=\"([^\"]*)\"$/i ) { 7660 pstricks( 105, $1 ); 7661 } 7662 elsif ( $zeile =~ /^inhalt=\"([^\"]*)\"$/i ) { kommentar( 102, $1 ); } 7663 7664 elsif ( $zeile =~ /^inhalt$/i ) { 7665 7666 $endeerreicht = 0; 7667 $inzeile = 0; 7668 while (( !$endeerreicht ) 7669 && ( $i < $eingabedateizeilen - 1 ) ) 7670 { 7671 $i++; 7672 $hilfszeile = $eingabedatei[$i]; 7673 if ( $hilfszeile =~ /^ende$/i ) { $endeerreicht = 1; } 7674 elsif ( $hilfszeile =~ /^(.*)$/i ) { 7675 kommentar( 102, $1 ); 7676 $inzeile++; 7677 } 7678 7679 else { 7680 kommentar( $layer, "Kaputte Zeile" ); 7681 $endeerreicht = 1; 7682 } 7683 } 7684 if ( !$endeerreicht ) { printf("Keine sinnvollen Daten\n"); } 7685 else { 7686 abstand($layer); 7687 7688 } 7689 } 7690 elsif ( $zeile =~ /^schreibe=\"([^\"]*)\"$/i ) { 7691 $name = $1; 7692 $endeerreicht = 0; 7693 $inzeile = 0; 7694 while (( !$endeerreicht ) 7695 && ( $i < $eingabedateizeilen - 1 ) ) 7696 { 7697 $i++; 7698 $hilfszeile = $eingabedatei[$i]; 7699 if ( $hilfszeile =~ /^ende$/i ) { $endeerreicht = 1; } 7700 elsif ( $hilfszeile =~ /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) { 7701 $x = $1; 7702 $y = $2; 7703 setachsengraph( $x, $y, $x, $y ); 7704 if ( $inzeile == 0 ) { oeffnedatei($name); } 7705 $inzeile++; 7706 schreibedaten( $name, $x, $y ); 7707 } 7708 else { 7709 kommentar( $layer, "Kaputte Zeile" ); 7710 $endeerreicht = 1; 7711 } 7712 } 7713 if ( !$endeerreicht ) { printf("Keine sinnvollen Daten\n"); } 7714 else { schliessedatei($name); } 7715 } 7716 7717 elsif ( $zeile =~ /^([-0-9\.]+)[,|;| , | ; ]([-0-9\.]+)$/i ) { 7718 setachsengraph( $1, $2, $1, $2 ); 7719 minmax( $1, $2, $1, $2 ); 7720 } 7721 7722 # Alle anderen Befehle sind Schrott 7723 else { printf( "%% Unbekannter Befehl '%s'\n", $zeile ); } 7724 } 7725 } 7726 setgitterbild(1); 7727 setachsenbild(99); 7728 7729 $leer = 1; 7730 for ( $layer = 0 ; $layer <= 100 ; $layer++ ) { 7731 for ( $i = 0 ; $i < $ausgabedateizeilen[$layer] ; $i++ ) { $leer = 0; } 7732 } 7733 if ( $leer == 0 ) { 7734 kopfdatei(); 7735 fussdatei(); 7736 for ( $layer = 101 ; $layer <= 113 ; $layer++ ) { 7737 for ( $i = 0 ; $i < $ausgabedateizeilen[$layer] ; $i++ ) { 7738 printf( "%s \n", $ausgabedatei[$layer][$i] ); 7739 } 7740 } 7741 for ( $layer = 0 ; $layer <= 100 ; $layer++ ) { 7742 for ( $i = 0 ; $i < $ausgabedateizeilen[$layer] ; $i++ ) { 7743 printf( "%s \n", $ausgabedatei[$layer][$i] ); 7744 } 7745 } 7746 } 7747 else { printf("%% Die Datei ist leer \n"); } |
A.2 Das Modul für Koordinatensysteme
achsen-pm.pm |
---|
1 ################################################################## 2 # Modul fuer Koordinaten-Achsen 3 # 4 # Letzte Aenderung: 10.01.2012 5 ##################################################################<> 6 use POSIX qw /floor ceil/; 7 use Math::Trig; 8 use strict; 9 use warnings; 10 my ( 11 $xachsetrue, $yachsetrue, $xminachse, $yminachse, $xmaxachse, 12 $ymaxachse, $xschritt, $yschritt, $xskala, $yskala, 13 $xtext, $ytext, $xmark, $ymark, $zmark 14 ); 15 16 $xachsetrue = $yachsetrue = 0; 17 ################################################################## 18 # Achsen zeichnen: 19 # wurden die einzelnen Achsen schon aufgerufen? 20 # Wurden die Achsen gezeichnet? 21 ################################################################## 22 sub achsengezeichnet { 23 my ($xodery) = @_; 24 if ( $xodery eq "x" ) { 25 if ( getachsenzeichnen("x") == 0 ) { return 0; } 26 else { return 1; } 27 } 28 elsif ( $xodery eq "y" ) { 29 if ( getachsenzeichnen("y") == 0 ) { return 0; } 30 else { return 1; } 31 } 32 else { return "ERROR"; } 33 } 34 35 my $achsenart = "->"; 36 37 sub setachsenart { 38 my ($achsenarthier) = @_; 39 $achsenart = $achsenarthier; 40 } 41 42 my $subticks = 0; 43 44 sub setsubticks { 45 my ($ticks) = @_; 46 $subticks = $ticks; 47 } 48 49 sub getsubticks { return $subticks; } 50 51 sub getachsenart { return $achsenart; } 52 53 sub setachsenzeichnen { 54 my ( $wert, $xodery ) = @_; 55 if ( $xodery eq "x" ) { $xachsetrue = $wert; } 56 if ( $xodery eq "y" ) { $yachsetrue = $wert; } 57 } 58 59 sub getachsenzeichnen { 60 my ($xodery) = @_; 61 if ( $xodery eq "x" ) { return $xachsetrue; } 62 if ( $xodery eq "y" ) { return $yachsetrue; } 63 } 64 65 $xmark = $ymark = $zmark = ""; 66 67 sub setmarkierung { 68 my ( $wert, $xyz ) = @_; 69 if ( $xyz eq "x" ) { $xmark = $wert; } 70 if ( $xyz eq "y" ) { $ymark = $wert; } 71 if ( $xyz eq "z" ) { $zmark = $wert; } 72 } 73 74 sub getmarkierung { 75 my ($xyz) = @_; 76 if ( $xyz eq "x" ) { return $xmark; } 77 if ( $xyz eq "y" ) { return $ymark; } 78 if ( $xyz eq "z" ) { return $zmark; } 79 } 80 81 sub setschritt { 82 my ( $schritt, $xodery ) = @_; 83 if ( $xodery eq "x" ) { $xschritt = $schritt; } 84 if ( $xodery eq "y" ) { $yschritt = $schritt; } 85 } 86 87 sub getschritt { 88 my ($xodery) = @_; 89 if ( $xodery eq "x" ) { return $xschritt; } 90 if ( $xodery eq "y" ) { return $yschritt; } 91 } 92 93 sub setskala { 94 my ( $schritt, $xodery ) = @_; 95 if ( $xodery eq "x" ) { $xskala = $schritt; } 96 if ( $xodery eq "y" ) { $yskala = $schritt; } 97 } 98 99 sub getskala { 100 my ($xodery) = @_; 101 if ( $xodery eq "x" ) { return $xskala; } 102 if ( $xodery eq "y" ) { return $yskala; } 103 } 104 105 sub settext { 106 my ( $schritt, $xodery ) = @_; 107 if ( $xodery eq "x" ) { $xtext = $schritt; } 108 if ( $xodery eq "y" ) { $ytext = $schritt; } 109 } 110 111 sub gettext { 112 my ($xodery) = @_; 113 if ( $xodery eq "x" ) { return $xtext; } 114 if ( $xodery eq "y" ) { return $ytext; } 115 } 116 117 sub setminmaxachsen { 118 my ( $min, $xodery, $minmax ) = @_; 119 if ( $xodery eq "x" ) { 120 if ( $minmax eq "min" ) { $xminachse = $min; } 121 else { $xmaxachse = $min; } 122 } 123 if ( $xodery eq "y" ) { 124 if ( $minmax eq "min" ) { $yminachse = $min; } 125 else { $ymaxachse = $min; } 126 } 127 } 128 ################################################################## 129 # Wie ist das Minimum und Maximum? 130 ################################################################## 131 sub getminmaxachsen { 132 my ( $xodery, $minmax ) = @_; 133 if ( $xodery eq "x" ) { 134 if ( $minmax eq "min" ) { return $xminachse; } 135 else { return $xmaxachse; } 136 } 137 if ( $xodery eq "y" ) { 138 if ( $minmax eq "min" ) { return $yminachse; } 139 else { return $ymaxachse; } 140 } 141 } 142 143 my ( $xmitte, $ymitte ); 144 $xmitte = $ymitte = 0; 145 146 sub setmitte { $xmitte = $ymitte = 1; } 147 148 sub achsenbeschriftung { 149 my ( $layer, $farbe, $xmax, $ymax, $xtext, $ytext ) = @_; 150 151 if ( $xmitte == 0 ) { 152 beschriftung( $layer, $farbe, $xmax, getschnitt("y") - 0.6 / getskalierung("y"), 153 0, 180, $xtext ); 154 } 155 else { 156 beschriftung( 157 $layer, $farbe, 158 getschnitt("x") + ( $xmax - getschnitt("x") ) / 2, 159 getschnitt("y") - 1 / getskalierung("y"), 160 0, "c", $xtext 161 ); 162 } 163 if ( $ymitte == 0 ) { 164 beschriftung( 165 $layer, $farbe, 166 getschnitt("x") + 0.2 / getskalierung("x"), 167 $ymax - 0.2 / getskalierung("y"), 168 0, 0, $ytext 169 ); 170 } 171 else { 172 beschriftung( 173 $layer, $farbe, 174 getschnitt("x") - 1.2 / getskalierung("x"), 175 getschnitt("y") + ( $ymax - getschnitt("y") ) / 2, 176 90, "c", $ytext 177 ); 178 } 179 180 } 181 182 my $pfeilartachsen = "->"; 183 184 sub setpfeilart { 185 my ($art) = @_; 186 $pfeilartachsen = $art; 187 } 188 189 sub getpfeilart { return $pfeilartachsen; } 190 191 sub xachse { 192 my ( 193 $layer, $farbe, $linienstaerke, $linienart, $xminachse, 194 $xmaxachse, $xschritt, $xskala, $xtext 195 ) = @_; 196 197 if ( achsengezeichnet("y") == 0 ) { 198 schnittsetzen( $xminachse, "x" ); 199 } 200 minmax( $xminachse - $xschritt, -1, $xmaxachse + $xschritt, 1 ); 201 achsen( 202 $layer, $farbe, $linienstaerke, $linienart, getpfeilart(), $xminachse, 203 $xmaxachse, 0, 0, $xschritt, $xskala, $xtext, 204 0, "keine", "" 205 ); 206 } 207 208 ################################################################## 209 # die y-Achse wird gezeichnet 210 ################################################################## 211 sub yachse { 212 my ( 213 $layer, $farbe, $linienstaerke, $linienart, $yminachse, 214 $ymaxachse, $yschritt, $yskala, $ytext 215 ) = @_; 216 217 minmax( -1, $yminachse - $yschritt, 1, $ymaxachse + $yschritt ); 218 219 achsen( 220 $layer, $farbe, $linienstaerke, $linienart, getpfeilart(), 0, 221 0, $yminachse, $ymaxachse, 0, $yskala, "", 222 $yschritt, $yskala, $ytext 223 ); 224 225 } 226 227 my ( $ystep, $xstep ); 228 229 $ystep = $xstep = 1; 230 231 sub achsen { 232 my ( 233 $layer, $farbe, $linienstaerke, $linienart, $pfeilart, 234 $xminachse, $xmaxachse, $yminachse, $ymaxachse, $xschritt, 235 $xskala, $xtext, $yschritt, $yskala, $ytext 236 ) = @_; 237 238 minmax( 239 $xminachse - $xschritt, 240 $yminachse - $yschritt, 241 $xmaxachse + $xschritt, 242 $ymaxachse + $yschritt 243 ); 244 245 $ystep = $yschritt; 246 $xstep = $xschritt; 247 248 if ( getmatheheft() == 1 ) { 249 setmatheheft(2); 250 matheheft( $layer, "lightgray", $xminachse, $yminachse, $xmaxachse, $ymaxachse ); 251 } 252 253 if ( getgitter() == 1 ) { 254 setgitter(2); 255 kariert( 256 1, "lightgray", 0.25, "solid", $xminachse, $yminachse, 257 $xmaxachse, $ymaxachse, $xschritt, 0, 0, $yschritt, 258 0, 0 259 ); 260 } 261 262 my ( $parameterweiter, $achsen ); 263 264 if ( $xminachse != $xmaxachse ) { 265 if ( $xschritt == 0 ) { 266 $xschritt = aufrunden( $xmaxachse * 10000, 1 ) / 10000; 267 $xschritt = schoenetabelle( $xmaxachse * 10000 ) / 10000; 268 } 269 } 270 271 if ( $yminachse != $ymaxachse ) { 272 if ( $yschritt == 0 ) { 273 $yschritt = aufrunden( $ymaxachse * 10000, 1 ) / 10000; 274 $yschritt = schoenetabelle( $ymaxachse * 10000 ) / 10000; 275 } 276 } 277 278 if ( $xminachse == $xmaxachse ) { 279 $achsen = "xAxis=false, showorigin=true,"; 280 } 281 elsif ( $yminachse == $ymaxachse ) { 282 $achsen = "yAxis=false, showorigin=true, "; 283 } 284 else { $achsen = "showorigin=false,"; } 285 setgrossskalierung( $xmaxachse - $xminachse, $ymaxachse - $yminachse ); 286 if ( $linienart eq "" ) { $linienart = "solid"; } 287 if ( $xskala eq "keine" ) { 288 289 $parameterweiter = 290 $achsen 291 . "comma, ticks=none, labels=none, subticks= " 292 . getsubticks() . ", Dx=" 293 . $xschritt . ", Dy=" 294 . $yschritt 295 . ", dx=0pt, dy=0pt, Ox=" 296 . getschnitt("x") . ", Oy=" 297 . getschnitt("y"); 298 299 } 300 elsif ( $xskala eq "nurstriche" ) { 301 $parameterweiter = 302 $achsen 303 . "comma, labels=none, subticks=" 304 . getsubticks() . ", Dx=" 305 . $xschritt . ", Dy=" 306 . $yschritt 307 . ", dx=0pt, dy=0pt, Ox=" 308 . getschnitt("x") . ", Oy=" 309 . getschnitt("y"); 310 311 } 312 elsif ( $xskala eq "nureins" ) { 313 xmarkierung( $layer, 1, 1, $farbe ); 314 ymarkierung( $layer, 1, 1, $farbe ); 315 $parameterweiter = 316 $achsen 317 . "comma, labels=none, subticks=0, Dx=" 318 . $xschritt . ", Dy=" 319 . $yschritt 320 . ", dx=0pt, dy=0pt, Ox=" 321 . getschnitt("x") . ", Oy=" 322 . getschnitt("y"); 323 324 } 325 else { 326 $parameterweiter = 327 $achsen 328 . "comma, subticks=" 329 . getsubticks() . ", Dx=" 330 . $xschritt . ", Dy=" 331 . $yschritt 332 . ", dx=0pt, dy=0pt, Ox=" 333 . getschnitt("x") . ", Oy=" 334 . getschnitt("y"); 335 } 336 337 if ( $xmitte == 1 ) { 338 achsenbeschriftung( $layer, $farbe, $xmaxachse, $ymaxachse, $xtext, $ytext ); 339 } 340 341 paar( getschnitt("x"), getschnitt("y") ); 342 paar( $xminachse, $yminachse ); 343 344 paar( $xmaxachse, $ymaxachse ); 345 346 if ( $xmitte == 0 ) { 347 textanhaengen( "[" . $xtext . ",-90][" . $ytext . ",0]" ); 348 } 349 350 if ( $linienstaerke > 0 ) { 351 befehlerzeugen( $layer, "psaxes", $farbe, $linienart, $linienstaerke, $parameterweiter, 352 $pfeilart, gettexthier() ); 353 } 354 355 settexthier(""); 356 357 setachsengraph( $xminachse, $yminachse, $xmaxachse, $ymaxachse ); 358 359 if ( $xskala eq "keine" ) { 360 minmax( $xminachse, $yminachse, $xmaxachse, $ymaxachse ); 361 } 362 else { 363 minmax( 364 $xminachse - $xschritt * 2, 365 $yminachse - $yschritt * 2, 366 $xmaxachse + $xschritt * 2, 367 $ymaxachse + $yschritt * 2 368 ); 369 } 370 } 371 372 sub schoenetabelle { 373 my ($obergrenze) = @_; 374 375 my ( 376 $schoen1, $schoen2, $schoen3, $kriterium1, $kriterium2, 377 $skalierung, $breite, $kandidat, $schritt, $skalenstrich, 378 $basis, $skalierung2, $i, $schoenerschritt 379 ); 380 381 $schoen1 = 1; 382 $schoen2 = 2; 383 $schoen3 = 5; 384 $kriterium1 = 5; 385 $kriterium2 = 12.5; 386 $schoenerschritt = 0; 387 388 $skalierung = 10**floor( logarithmus( $obergrenze, 10 ) ); 389 390 $breite = $obergrenze / $skalierung; 391 392 if ( $breite >= $schoen3 ) { $kandidat = $schoen3; } 393 else { 394 if ( $breite >= $schoen2 ) { $kandidat = $schoen2; } 395 else { $kandidat = $schoen1; } 396 } 397 $skalierung2 = $skalierung; 398 $basis = $kandidat; 399 for ( $i = 1 ; $i <= 15 ; $i++ ) { 400 401 $schritt = $skalierung2 * $basis; 402 $skalenstrich = $obergrenze / $schritt; 403 404 if ( ( $skalenstrich > $kriterium1 ) 405 && ( $skalenstrich < $kriterium2 ) ) 406 { 407 $schoenerschritt = $schritt; 408 } 409 410 if ( $basis == 1 ) { $skalierung2 = $skalierung2 / 10; } 411 else { $skalierung2 = $skalierung2; } 412 if ( $basis == $schoen3 ) { $basis = $schoen2; } 413 else { 414 if ( $basis == $schoen2 ) { $basis = $schoen1; } 415 else { $basis = $schoen3; } 416 } 417 } 418 419 return $schoenerschritt; 420 421 } 422 423 ################################################################## 424 # Achsen mit Bogenmass 425 ################################################################## 426 sub xachserad { 427 my ( $layer, $farbe, $linienstaerke, $linienart, $xminachse, $xmaxachse, $xschritt, $xtext ) = 428 @_; 429 minmax( $xminachse - $xschritt, -1, $xmaxachse + $xschritt, 1 ); 430 431 xyachserad( $layer, $farbe, $linienstaerke, $linienart, $xminachse, $xmaxachse, 0, 0, $xschritt, 432 $xtext, 0, 0, "", 1, "rad" ); 433 434 } 435 436 sub xyachserad { 437 my ( 438 $layer, $farbe, $linienstaerke, $linienart, $xminachse, 439 $xmaxachse, $yminachse, $ymaxachse, $xschritt, $xtext, 440 $yschritt, $yskala, $ytext, $xbruch, $rad 441 ) = @_; 442 443 my ( $label, $i, $mark, $zahl, $pi, $grad ); 444 445 if ( $rad eq "deg" ) { 446 $label = degtorad($xschritt); 447 $xminachse = degtorad($xminachse); 448 $xmaxachse = degtorad($xmaxachse); 449 $grad = "deg"; 450 } 451 elsif ( $rad eq "rad" ) { 452 $label = $xschritt; 453 $xminachse = $xminachse; 454 $xmaxachse = $xmaxachse; 455 $grad = "rad"; 456 } 457 elsif ( $rad eq "degtorad" ) { 458 $label = degtorad($xschritt); 459 $xminachse = degtorad($xminachse); 460 $xmaxachse = degtorad($xmaxachse); 461 $grad = "rad"; 462 } 463 else { 464 $label = $xschritt; 465 $xminachse = $xminachse; 466 $xmaxachse = $xmaxachse; 467 $grad = "deg"; 468 } 469 470 $pi = degtorad(180); 471 472 achsen( 473 $layer, $farbe, $linienstaerke, $linienart, 474 "->", $xminachse, $xmaxachse, $yminachse, 475 $ymaxachse, $xmaxachse * 2, $yskala, $xtext, 476 $yschritt, $yskala, $ytext 477 ); 478 479 for ( $i = 0 ; $i < $xmaxachse ; $i = $i + $label ) { 480 if ( $i != 0 ) { 481 482 if ( $xbruch == 1 ) { 483 if ( $grad eq "deg" ) { 484 $zahl = radtodeg($i); 485 $mark = "\$" . $zahl . "\^{\\circ}\$"; 486 $mark =~ tr/./,/s; 487 } 488 else { 489 $zahl = $i / $pi; 490 $mark = "\$" . $zahl . "\\pi\$"; 491 $mark =~ tr/./,/s; 492 } 493 } 494 else { 495 496 if ( $grad eq "deg" ) { 497 $zahl = radtodeg( $i * $xbruch ); 498 $mark = "\$" . $zahl . "\^{\\circ}\$"; 499 $mark =~ tr/./,/s; 500 } 501 else { 502 $zahl = $i / $pi * $xbruch; 503 $mark = "\$\\frac{" . $zahl . "}{" . $xbruch . "}\\pi\$"; 504 $mark =~ tr/./,/s; 505 } 506 507 } 508 xmarkierung( $layer, $i, $mark, $farbe ); 509 } 510 } 511 512 for ( $i = 0 ; $i > $xminachse ; $i = $i - $label ) { 513 if ( $i != 0 ) { 514 515 if ( $xbruch == 1 ) { 516 if ( $grad eq "deg" ) { 517 $zahl = abs( radtodeg($i) ); 518 $mark = "\$-" . $zahl . "\^{\\circ}\$"; 519 $mark =~ tr/./,/s; 520 } 521 else { 522 $zahl = abs( $i / $pi ); 523 $mark = "\$-" . $zahl . "\\pi\$"; 524 $mark =~ tr/./,/s; 525 } 526 } 527 else { 528 529 if ( $grad eq "deg" ) { 530 $zahl = abs( radtodeg( $i * $xbruch ) ); 531 $mark = "\$-" . $zahl . "\^{\\circ}\$"; 532 $mark =~ tr/./,/s; 533 } 534 else { 535 $zahl = abs( $i / $pi * $xbruch ); 536 $mark = "\$-\\frac{" . $zahl . "}{" . $xbruch . "}\\pi\$"; 537 $mark =~ tr/./,/s; 538 } 539 540 } 541 xmarkierung( $layer, $i, $mark, $farbe ); 542 } 543 } 544 } 545 546 ################################################################## 547 ### Markierungen an den Achsen 548 ################################################################## 549 550 my $xmarkierungkopf = 0; 551 552 sub xmarkierung { 553 my ( $layer, $x, $text, $farbe ) = @_; 554 minmax( $x, -$ystep / getskalierung("y"), $x, $ystep / getskalierung("y") ); 555 556 $text =~ tr/./,/s; 557 if ( $xmarkierungkopf == 0 ) { 558 pstricks( 559 105, "\\makeatletter\\newcommand{\\psxpoint}[3][black]{% 560 \\psline[linewidth=.5pt,linecolor=#1]{-}(#2,\\pst\@xticksizeB)(#2,\\pst\@xticksizeA) 561 \\rput[t](! #2 \\pst\@number\\pslabelsep \\pst\@number\\pst\@xticksizeB add 562 \\pst\@number\\psyunit div neg ){\\color{#1}#3}} 563 \\makeatother \n" 564 ); 565 $xmarkierungkopf = 1; 566 } 567 if ( $farbe eq "black" ) { 568 schreibeinarray( $layer, sprintf( "\\psxpoint{%g}{%s}", $x, $text ) ); 569 } 570 else { 571 schreibeinarray( $layer, sprintf( "\\psxpoint[%s]{%g}{%s}", $farbe, $x, $text ) ); 572 } 573 574 } 575 576 my $xmarkierungkopfohne = 0; 577 578 sub xmarkierungohne { 579 my ( $layer, $x, $text, $farbe ) = @_; 580 minmax( $x, -$ystep / getskalierung("y"), $x, $ystep / getskalierung("y") ); 581 582 $text =~ tr/./,/s; 583 if ( $xmarkierungkopfohne == 0 ) { 584 pstricks( 585 105, "\\makeatletter\\newcommand{\\psxpointohne}[3][black]{% 586 \\rput[t](! #2 \\pst\@number\\pslabelsep \\pst\@number\\pst\@xticksizeB add 587 \\pst\@number\\psyunit div neg ){\\color{#1}#3}} 588 \\makeatother \n" 589 ); 590 $xmarkierungkopfohne = 1; 591 } 592 if ( $farbe eq "black" ) { 593 schreibeinarray( $layer, sprintf( "\\psxpointohne{%g}{%s}", $x, $text ) ); 594 } 595 else { 596 schreibeinarray( $layer, sprintf( "\\psxpointohne[%s]{%g}{%s}", $farbe, $x, $text ) ); 597 } 598 } 599 600 sub xmarkierungstrahl { 601 my ( $layer, $x, $ylaenge, $text, $linienart, $linienstaerke, $farbe, $parameter ) = @_; 602 603 $text =~ tr/./,/s; 604 605 linie( 606 $layer, $x, $ylaenge / 2, 607 "", $x, -$ylaenge / 2, 608 "", $linienart, $linienstaerke, $farbe, $parameter, "" 609 ); 610 beschriftung( $layer, $farbe, $x, -( $ylaenge / 2 + $ylaenge / 4 ), 0, 270, $text ); 611 612 } 613 614 sub ymarkierungstrahl { 615 my ( $layer, $y, $xlaenge, $text, $linienart, $linienstaerke, $farbe, $parameter ) = @_; 616 617 $text =~ tr/./,/s; 618 619 linie( 620 $layer, $xlaenge / 2, 621 $y, "", -$xlaenge / 2, 622 $y, "", $linienart, $linienstaerke, $farbe, $parameter, "" 623 ); 624 beschriftung( $layer, $farbe, -( $xlaenge / 2 + $xlaenge / 4 ), $y, 0, 180, $text ); 625 626 } 627 628 my $xmarkierungkopfoben = 0; 629 630 sub xmarkierungoben { 631 my ( $layer, $x, $text, $farbe ) = @_; 632 minmax( $x, -1, $x, 1 ); 633 634 if ( $xmarkierungkopfoben == 0 ) { 635 pstricks( 636 105, "\\makeatletter\\newcommand{\\psxpointoben}[3][black]{% 637 \\psline[linewidth=.5pt,linecolor=#1]{-}(#2,\\pst\@xticksizeB)(#2,\\pst\@xticksizeA) 638 \\rput[b](! #2 \\pst\@number\\pslabelsep \\pst\@number\\pst\@xticksizeB add 639 \\pst\@number\\psyunit div ){\\color{#1}#3}} 640 \\makeatother \n" 641 ); 642 $xmarkierungkopfoben = 1; 643 } 644 if ( $farbe eq "black" ) { 645 schreibeinarray( $layer, sprintf( "\\psxpointoben{%g}{%s}", $x, $text ) ); 646 } 647 else { 648 schreibeinarray( $layer, sprintf( "\\psxpointoben[%s]{%g}{%s}", $farbe, $x, $text ) ); 649 } 650 651 } 652 653 my $xmulti = 0; 654 655 sub xmarkierungmulti { 656 my ( $layer, $x1, $x2, $schritt, $farbe ) = @_; 657 minmax( $x1, 0, $x2, 0 ); 658 659 my $dx = $x2 - $x1; 660 if ( $xmulti == 0 ) { 661 pstricks( 662 105, "\\makeatletter\\newcommand{\\psxpointstrich}[3][black]{% 663 \\psline[linewidth=.5pt,linecolor=#1]{-}(#2,\\pst\@xticksizeB)(#2,\\pst\@xticksizeA)} 664 \\makeatother" 665 ); 666 $xmulti = 1; 667 } 668 schreibeinarray( 669 $layer, 670 sprintf( 671 "\\multido{\\n=%g+%g}{%i}{\\psxpointstrich[%s]{\\n}{\\n+1}}", 672 $x1, $schritt, $dx, $farbe, 673 ) 674 ); 675 } 676 677 my $ymarkierungkopf = 0; 678 679 sub ymarkierung { 680 my ( $layer, $ywert, $text, $farbe ) = @_; 681 minmax( -$xstep / getskalierung("x"), $ywert, $xstep / getskalierung("x"), $ywert ); 682 683 if ( $ymarkierungkopf == 0 ) { 684 pstricks( 685 105, "\\makeatletter\\newcommand{\\psypoint}[3][black]{% 686 \\psline[linewidth=.5pt,linecolor=#1]{-}(\\pst\@yticksizeB,#2)(\\pst\@yticksizeA,#2) 687 \\rput[r](! \\pst\@number\\pslabelsep \\pst\@number\\pst\@yticksizeA sub 688 \\pst\@number\\psxunit div neg #2){\\color{#1}#3}} 689 \\makeatother 690 " 691 ); 692 $ymarkierungkopf = 1; 693 } 694 schreibeinarray( $layer, sprintf( "\\psypoint[%s]{%g}{%s}", $farbe, $ywert, $text ) ); 695 } 696 697 my $ymarkierungkopfohne = 0; 698 699 sub ymarkierungohne { 700 my ( $layer, $ywert, $text, $farbe ) = @_; 701 minmax( -$xstep / getskalierung("x"), $ywert, $xstep / getskalierung("x"), $ywert ); 702 703 if ( $ymarkierungkopfohne == 0 ) { 704 pstricks( 705 105, "\\makeatletter\\newcommand{\\psypointohne}[3][black]{% 706 \\rput[r](! \\pst\@number\\pslabelsep \\pst\@number\\pst\@yticksizeA sub 707 \\pst\@number\\psxunit div neg #2){\\color{#1}#3}} 708 \\makeatother 709 " 710 ); 711 $ymarkierungkopfohne = 1; 712 } 713 schreibeinarray( $layer, sprintf( "\\psypointohne[%s]{%g}{%s}", $farbe, $ywert, $text ) ); 714 715 } 716 717 my $ymarkierungkopfneu = 0; 718 719 sub ymarkierunglinks { 720 my ( $layer, $ywert, $text, $farbe ) = @_; 721 minmax( 0, $ywert, 0, $ywert ); 722 723 if ( $ymarkierungkopfneu == 0 ) { 724 pstricks( 725 105, "\\makeatletter\\newcommand{\\psypointlinks}[3][black]{% 726 \\psline[linewidth=.5pt,linecolor=#1]{-}(\\pst\@yticksizeB,#2)(\\pst\@yticksizeA,#2) 727 \\rput[l](! \\pst\@number\\pslabelsep \\pst\@number\\pst\@yticksizeA sub 728 \\pst\@number\\psxunit div #2){\\color{#1}#3}} 729 \\makeatother 730 " 731 ); 732 $ymarkierungkopfneu = 1; 733 } 734 schreibeinarray( $layer, sprintf( "\\psypointlinks[%s]{%g}{%s}", $farbe, $ywert, $text ) ); 735 736 } 737 738 sub markierung { 739 my ( 740 $layer, $func, $x, $y, $xtext, $ytext, 741 $farbe, $linienart, $linienstaerke, $striche, $parameter 742 ) = @_; 743 minmax( $x, $y, $x, $y ); 744 my $parameterweiter = ""; 745 if ( dreidimensional( $func, "y" ) == 0 ) { 746 if ( $striche =~ /x/ ) { 747 linie( $layer, $x, $y, "", $x, 0, "", $linienart, $linienstaerke, $farbe, $parameter, 748 "" ); 749 if ( $y < 0 ) { xmarkierungoben( $layer, $x, $xtext, $farbe ); } 750 else { xmarkierung( $layer, $x, $xtext, $farbe ); } 751 } 752 if ( $striche =~ /y/ ) { 753 linie( $layer, $x, $y, "", 0, $y, "", $linienart, $linienstaerke, $farbe, $parameter, 754 "" ); 755 if ( $x < 0 ) { ymarkierunglinks( $layer, $y, $ytext, $farbe ); } 756 else { ymarkierung( $layer, $y, $ytext, $farbe ); } 757 758 } 759 if ( $parameter eq "" ) { 760 $parameterweiter = "dotstyle=x, dotsize=1pt"; 761 } 762 else { $parameterweiter = $parameter; } 763 764 paar( $x, $y ); 765 befehlerzeugen( $layer, "psdot", $farbe, $linienart, $linienstaerke, $parameterweiter, "", 766 gettexthier() ); 767 768 } 769 else { 770 tripel( $x, $y, calcfunk3d( $func, "x", $x, "y", $y ) ); 771 if ( get3dpstricks() == 1 ) { 772 773 $parameterweiter = "drawCoor, dotstyle=x, dotsize=1pt,"; 774 $parameterweiter = $parameterweiter . " " . " " . $parameter; 775 befehlerzeugen( $layer, "pstThreeDDot", $farbe, $linienart, $linienstaerke, 776 $parameterweiter, "", gettexthier() ); 777 } 778 else { 779 $parameterweiter = "dotstyle=x, dotsize=1pt,"; 780 $parameterweiter = $parameterweiter . " " . " " . $parameter; 781 befehlerzeugen( $layer, "psdot", $farbe, $linienart, $linienstaerke, $parameterweiter, 782 "", gettexthier() ); 783 } 784 xmarkierung3d( $layer, $x, $xtext, $farbe ); 785 ymarkierung3d( $layer, $y, $ytext, $farbe ) 786 787 } 788 settexthier(""); 789 790 } 791 ################################################################## 792 # Pfeile an den Achsen 793 ################################################################## 794 sub xpfeil { 795 my ( $layer, $x, $ywert, $text, $farbe, $linienstaerke, $linienart ) = @_; 796 my $ywerttext; 797 798 if ( get3dzeichnen() == 1 ) { 799 linie( $layer, $x, $ywert, 0, $x, getschnitt("y"), 0, $linienart, $linienstaerke, $farbe, 800 "", "->" ); 801 if ( $ywert > 0 ) { 802 $ywerttext = $ywert + 0.1; 803 beschriftung( 804 $layer, $farbe, 805 x3d( $x, $ywerttext, 0 ), 806 y3d( $x, $ywerttext, 0 ), 807 0, 0, $text 808 ); 809 } 810 else { 811 $ywerttext = $ywert - 0.1; 812 beschriftung( 813 $layer, $farbe, 814 x3d( $x, $ywerttext, 0 ), 815 y3d( $x, $ywerttext, 0 ), 816 0, 180, $text 817 ); 818 } 819 } 820 else { 821 linie( $layer, $x, $ywert, "", $x, getschnitt("y"), "", $linienart, $linienstaerke, $farbe, 822 "", "->" ); 823 if ( $ywert > 0 ) { 824 $ywerttext = $ywert + 0.1; 825 beschriftung( $layer, $farbe, $x, $ywerttext, 0, 90, $text ); 826 } 827 else { 828 $ywerttext = $ywert - 0.3; 829 beschriftung( $layer, $farbe, $x, $ywerttext, 0, 90, $text ); 830 } 831 } 832 } 833 834 sub xpfeilkasten { 835 my ( $layer, $x, $y, $text, $farbe, $linienstaerke, $linienart ) = @_; 836 837 my ( $breite, $hoehe, $laenge ); 838 839 $laenge = length($text); 840 841 if ( $laenge == 0 ) { $breite = 0.15 * 3; } 842 else { $breite = 0.15 * $laenge; } 843 844 $hoehe = 0.7; 845 xpfeil( $layer, $x, $y, "", $farbe, $linienstaerke, $linienart ); 846 847 if ( $y > 0 ) { 848 rechtecktext( 849 $layer, $x - $breite, $y, $x + $breite, 850 $y + $hoehe, $text, $farbe, "", 851 "", $linienart, $linienstaerke, "" 852 ); 853 } 854 else { 855 rechtecktext( 856 $layer, $x - $breite, $y - $hoehe, $x + $breite, 857 $y, $text, $farbe, "", 858 "", $linienart, $linienstaerke, "" 859 ); 860 } 861 862 } 863 864 sub ypfeil { 865 my ( $layer, $x, $ywert, $text, $farbe, $linienstaerke, $linienart ) = @_; 866 my $xtext; 867 if ( get3dzeichnen() == 1 ) { 868 linie( $layer, $x, $ywert, 0, getschnitt("x"), $ywert, 0, $linienart, $linienstaerke, 869 $farbe, "", "->" ); 870 if ( $x > 0 ) { 871 $xtext = $x + 0.1; 872 beschriftung( 873 $layer, $farbe, 874 x3d( $xtext, $ywert, 0 ), 875 y3d( $xtext, $ywert, 0 ), 876 0, 270, $text 877 ); 878 } 879 else { 880 $xtext = $x - 0.1; 881 beschriftung( 882 $layer, $farbe, 883 x3d( $xtext, $ywert, 0 ), 884 y3d( $xtext, $ywert, 0 ), 885 0, 90, $text 886 ); 887 } 888 } 889 else { 890 891 linie( $layer, $x, $ywert, "", getschnitt("x"), $ywert, "", $linienart, $linienstaerke, 892 $farbe, "", "->" ); 893 if ( $x > 0 ) { 894 $xtext = $x + 0.1; 895 beschriftung( $layer, $farbe, $xtext, $ywert, 0, 0, $text ); 896 } 897 else { 898 $xtext = $x - 0.1; 899 beschriftung( $layer, $farbe, $xtext, $ywert, 0, 180, $text ); 900 } 901 } 902 903 } 904 905 sub ypfeilkasten { 906 my ( $layer, $x, $y, $text, $farbe, $linienstaerke, $linienart ) = @_; 907 908 ypfeil( $layer, $x, $y, "", $farbe, $linienstaerke, $linienart ); 909 910 my ( $breite, $hoehe, $laenge ); 911 912 $laenge = length($text); 913 914 if ( $laenge == 0 ) { $breite = 0.2 * 3; } 915 else { $breite = 0.2 * $laenge; } 916 917 $hoehe = 0.7; 918 919 if ( $x > 0 ) { 920 rechtecktext( 921 $layer, $x, $y - 0.5 * $hoehe, $x + $breite, 922 $y + 0.5 * $hoehe, $text, $farbe, "", 923 "", $linienart, $linienstaerke, "" 924 ); 925 } 926 else { 927 rechtecktext( 928 $layer, $x - $breite, $y - 0.5 * $hoehe, $x, 929 $y + 0.5 * $hoehe, $text, $farbe, "", 930 "", $linienart, $linienstaerke, "" 931 ); 932 } 933 934 } 935 936 sub zpfeil { 937 my ( $layer, $zwert, $ywert, $text, $farbe, $linienstaerke, $linienart ) = @_; 938 my $ywerttext; 939 940 linie( $layer, 0, $ywert, $zwert, 0, getschnitt("y"), $zwert, $linienart, $linienstaerke, 941 $farbe, "", "->" ); 942 if ( $ywert > 0 ) { 943 $ywerttext = $ywert + 0.1; 944 beschriftung( 945 $layer, $farbe, 946 x3d( 0, $ywerttext, $zwert ), 947 y3d( 0, $ywerttext, $zwert ), 948 0, 0, $text 949 ); 950 } 951 else { 952 $ywerttext = $ywert - 0.1; 953 beschriftung( 954 $layer, $farbe, 955 x3d( 0, $ywerttext, $zwert ), 956 y3d( 0, $ywerttext, $zwert ), 957 0, 180, $text 958 ); 959 } 960 abstand($layer); 961 } 962 963 1; |
A.3 Modul zur Erzeugung von Dateien
dateierzeugen-pm.pm |
---|
1 ################################################################## 2 # Modul um Dateien in Latex zu erzeugen 3 # Letzte Aenderung: 10.01.2012 4 ################################################################## 5 use POSIX qw /floor ceil/; 6 use Math::Trig; 7 use strict; 8 use warnings; 9 10 # Variablen 11 my ( 12 $xmin, $ymin, $xmax, 13 $ymax, $scalex, $scaley, 14 $scalez, $skalierungvorgenommenx, $skalierungvorgenommeny, 15 $skalierungvorgenommenz, $schnittx, $schnitty, 16 $schnittvorgenommenx, $schnittvorgenommeny, $farbe, 17 $linienart, $linienstaerke, $fuellfarbe, 18 $fuellart, $tree, $groessesetzen, 19 $groessex, $groessey, $groessez, 20 $kopf, $schriftgroesse, $erstex1, 21 $erstex2, $erstey1, $erstey2, 22 $schnittz, $schnittvorgenommenz 23 ); 24 25 $tree = 0; 26 27 $groessesetzen = 0; 28 $groessex = $groessey = $groessez = 0; 29 30 # Min+Max des Bildes 31 $xmin = $ymin = $xmax = $ymax = 0; 32 $erstex1 = $erstex2 = $erstey1 = $erstey2 = 0; 33 34 #package dateierzeugen; 35 # Minimum und Maximum setzen 36 sub setminmax { 37 my ( $min, $xodery, $minmax ) = @_; 38 39 if ( $xodery eq "x" ) { 40 if ( $minmax eq "min" ) { $xmin = $min; } 41 else { $xmax = $min; } 42 } 43 if ( $xodery eq "y" ) { 44 if ( $minmax eq "min" ) { $ymin = $min; } 45 else { $ymax = $min; } 46 } 47 48 } 49 50 # Wie ist das Minimum und Maximum? 51 sub getminmax { 52 my ( $xodery, $minmax ) = @_; 53 if ( $xodery eq "x" ) { 54 if ( $minmax eq "min" ) { return nachkommastellen( $xmin, 4 ); } 55 else { return nachkommastellen( $xmax, 4 ); } 56 } 57 if ( $xodery eq "y" ) { 58 if ( $minmax eq "min" ) { return nachkommastellen( $ymin, 4 ); } 59 else { return nachkommastellen( $ymax, 4 ); } 60 } 61 } 62 63 my $setmaxberechnung = 1; 64 65 sub setmaxberechnung { 66 my ($wert) = @_; 67 $setmaxberechnung = $wert; 68 } 69 70 sub getmaxberechnung { return $setmaxberechnung; } 71 72 # Minimum und Maximum des Bildes setzen 73 sub minmax { 74 my ( $xminlokal, $yminlokal, $xmaxlokal, $ymaxlokal ) = @_; 75 76 if ( ( istzahl($xminlokal) == 1 ) 77 && ( istzahl($yminlokal) == 1 ) 78 && ( istzahl($xmaxlokal) == 1 ) 79 && ( istzahl($ymaxlokal) == 1 ) ) 80 { 81 82 if ( getmaxberechnung == 1 ) { 83 if ( $erstex1 == 0 ) { 84 setminmax( $xminlokal, "x", "min" ); 85 $erstex1 = 1; 86 } 87 else { 88 setminmax( min( $xminlokal, getminmax( "x", "min" ) ), 89 "x", "min" ); 90 } 91 if ( $erstex2 == 0 ) { 92 setminmax( $xmaxlokal, "x", "max" ); 93 $erstex2 = 1; 94 } 95 else { 96 setminmax( max( $xmaxlokal, getminmax( "x", "max" ) ), 97 "x", "max" ); 98 } 99 if ( $erstey1 == 0 ) { 100 setminmax( $yminlokal, "y", "min" ); 101 $erstey1 = 1; 102 } 103 else { 104 setminmax( min( $yminlokal, getminmax( "y", "min" ) ), 105 "y", "min" ); 106 } 107 if ( $erstey2 == 0 ) { 108 setminmax( $ymaxlokal, "y", "max" ); 109 $erstey2 = 1; 110 } 111 else { 112 setminmax( max( $ymaxlokal, getminmax( "y", "max" ) ), 113 "y", "max" ); 114 } 115 } 116 } 117 } 118 ### Allgemeine Variablen 119 # Skalierung des Bildes 120 $scalex = $scaley = $scalez = 1; 121 $skalierungvorgenommenx = $skalierungvorgenommeny = $skalierungvorgenommenz = 0; 122 123 sub setskalierung { 124 my ( $skale, $xyz ) = @_; 125 126 if ( $skale != 0 ) { 127 if ( $xyz eq "x" ) { $scalex = $skale; } 128 if ( $xyz eq "y" ) { $scaley = $skale; } 129 if ( $xyz eq "z" ) { $scalez = $skale; } 130 } 131 } 132 133 sub getskalierung { 134 my ($xyz) = @_; 135 if ( $xyz eq "x" ) { return $scalex; } 136 if ( $xyz eq "y" ) { return $scaley; } 137 if ( $xyz eq "z" ) { return $scalez; } 138 139 } 140 141 # Ueberpruefen, ob die Skalierung schon vorgenommen wurde, wenn ja, bleibt es bei dem alten und wenn nein, wird die Skalieng neu gesetzt 142 sub skalierungsetzen { 143 my ( $skalierung, $xoderyoderz ) = @_; 144 if ( $xoderyoderz eq "x" ) { 145 if ( $skalierungvorgenommenx == 0 ) { 146 setskalierung( $skalierung, "x" ); 147 $skalierungvorgenommenx = 1; 148 } 149 } 150 if ( $xoderyoderz eq "y" ) { 151 if ( $skalierungvorgenommeny == 0 ) { 152 setskalierung( $skalierung, "y" ); 153 $skalierungvorgenommeny = 1; 154 } 155 } 156 if ( $xoderyoderz eq "z" ) { 157 if ( $skalierungvorgenommenz == 0 ) { 158 setskalierung( $skalierung, "z" ); 159 $skalierungvorgenommenz = 1; 160 } 161 } 162 } 163 164 sub setgross { 165 my ($gross) = @_; 166 $groessesetzen = $gross; 167 } 168 169 sub getgross { return $groessesetzen; } 170 171 sub setgroesse { 172 my ( $skale, $xyz ) = @_; 173 if ( $xyz eq "x" ) { $groessex = $skale; } 174 if ( $xyz eq "y" ) { $groessey = $skale; } 175 if ( $xyz eq "z" ) { $groessez = $skale; } 176 177 } 178 179 sub setausmasse { 180 my ( $x, $y ) = @_; 181 setgross(1); 182 setgroesse( $x, "x" ); 183 setgroesse( $y, "y" ); 184 } 185 186 sub setgrossskalierung { 187 my ( $breitex, $breitey ) = @_; 188 if ( $breitex != 0 ) { setskalierung( getgroesse("x") / $breitex, "x" ); } 189 if ( $breitey != 0 ) { setskalierung( getgroesse("y") / $breitey, "y" ); } 190 } 191 192 sub setgrossskalierung3d { 193 my ( $breitex, $breitey, $breitez ) = @_; 194 if ( getgroesse("x") != 0 ) { 195 $scalex = nachkommastellen( getgroesse("x") / $breitex, 6 ); 196 $scaley = nachkommastellen( getgroesse("y") / $breitey, 6 ); 197 $scalez = nachkommastellen( getgroesse("z") / $breitez, 6 ); 198 } 199 } 200 201 sub getgroesse { 202 my ($xyz) = @_; 203 if ( $xyz eq "x" ) { return $groessex; } 204 if ( $xyz eq "y" ) { return $groessey; } 205 if ( $xyz eq "z" ) { return $groessez; } 206 207 } 208 209 # Schnittpunkte des Bildes 210 $schnittx = $schnitty = $schnittvorgenommenx = $schnittvorgenommeny = 211 $schnittvorgenommenz = 0; 212 213 sub setschnitt { 214 my ( $schnitt, $xyz ) = @_; 215 if ( $xyz eq "x" ) { $schnittx = $schnitt; } 216 if ( $xyz eq "y" ) { $schnitty = $schnitt; } 217 if ( $xyz eq "z" ) { $schnittz = $schnitt; } 218 } 219 220 sub getschnitt { 221 my ($xyz) = @_; 222 if ( $xyz eq "x" ) { return $schnittx; } 223 if ( $xyz eq "y" ) { return $schnitty; } 224 if ( $xyz eq "z" ) { return $schnittz; } 225 } 226 227 sub schnittsetzen { 228 my ( $schnitt, $xyz ) = @_; 229 if ( $xyz eq "x" ) { 230 if ( $schnittvorgenommenx == 0 ) { 231 setschnitt( $schnitt, "x" ); 232 $schnittvorgenommenx = 1; 233 } 234 } 235 if ( $xyz eq "y" ) { 236 if ( $schnittvorgenommeny == 0 ) { 237 setschnitt( $schnitt, "y" ); 238 $schnittvorgenommeny = 1; 239 } 240 } 241 if ( $xyz eq "z" ) { 242 if ( $schnittvorgenommenz == 0 ) { 243 setschnitt( $schnitt, "z" ); 244 $schnittvorgenommenz = 1; 245 } 246 } 247 } 248 249 $farbe = "black"; 250 251 sub setfarbe { 252 my ($farbwahl) = @_; 253 $farbe = $farbwahl; 254 } 255 256 sub getfarbe { return $farbe; } 257 $fuellfarbe = "black!20"; 258 259 sub setfuellfarbe { 260 my ($farbwahl) = @_; 261 $fuellfarbe = $farbwahl; 262 } 263 264 sub getfuellfarbe { return $fuellfarbe; } 265 $linienart = "solid"; 266 267 sub setlinienart { 268 my ($linie) = @_; 269 $linienart = $linie; 270 } 271 272 sub getlinienart { return $linienart; } 273 $linienstaerke = 1; 274 275 sub setlinienstaerke { 276 my ($linie) = @_; 277 $linienstaerke = $linie; 278 } 279 280 sub getlinienstaerke { return $linienstaerke; } 281 $fuellart = "solid"; 282 283 sub setfuellart { 284 my ($farbwahl) = @_; 285 $fuellart = $farbwahl; 286 } 287 288 sub getfuellart { return $fuellart; } 289 290 ### Soll der Kopf der Datei mit ausgegeben werden? Standard ist ja. 291 292 $kopf = 1; 293 294 sub setkopf { 295 my ($kopfhier) = @_; 296 $kopf = $kopfhier; 297 } 298 299 sub getkopf { return $kopf; } 300 301 sub einstellungen { 302 my ( $layer, $farbe, $fuellart, $fuellfarbe, $linienart, $linienstaerke, 303 $parameter ) 304 = @_; 305 306 my ( 307 $farbeersatz, $fuellartersatz, $fuellfarbeersatz, 308 $linienartersatz, $linienstaerkeersatz, $parameterersatz 309 ); 310 if ( ( $farbe eq "" ) || ( $farbe eq getfarbe() ) ) { $farbeersatz = ""; } 311 else { $farbeersatz = "linecolor=" . $farbe . ", "; } 312 if ( ( $fuellart eq "" ) || ( $fuellart eq getfuellart() ) ) { 313 $fuellartersatz = ""; 314 } 315 else { $fuellartersatz = "fillstyle=" . $fuellart . ", "; } 316 if ( ( $fuellfarbe eq "" ) || ( $fuellfarbe eq getfuellfarbe() ) ) { 317 $fuellfarbeersatz = ""; 318 } 319 else { $fuellfarbeersatz = "fillcolor=" . $fuellfarbe . ", "; } 320 if ( ( $linienart eq "" ) || ( $linienart eq getlinienart() ) ) { 321 $linienartersatz = ""; 322 } 323 else { $linienartersatz = "linestyle=" . $linienart . ", "; } 324 if ( ( $linienstaerke eq "" ) || ( $linienstaerke eq getlinienstaerke() ) ) 325 { 326 $linienstaerkeersatz = ""; 327 } 328 else { $linienstaerkeersatz = "linewidth=" . $linienstaerke . "pt, "; } 329 if ( $parameter eq "" ) { $parameterersatz = ""; } 330 else { $parameterersatz = $parameter; } 331 schreibeinarray( 332 $layer, 333 sprintf( 334 "\\psset{%s%s%s%s%s%s}", 335 $farbeersatz, $fuellartersatz, $fuellfarbeersatz, 336 $linienartersatz, $linienstaerkeersatz, $parameterersatz 337 ) 338 ); 339 } 340 341 sub einstellungenkopf { 342 my ( $layer, $farbe, $fuellart, $fuellfarbe, $linienart, $linienstaerke, 343 $parameter ) 344 = @_; 345 346 my ( 347 $farbeersatz, $fuellartersatz, $fuellfarbeersatz, 348 $linienartersatz, $linienstaerkeersatz, $parameterersatz 349 ); 350 351 if ( ( $farbe eq "" ) ) { $farbeersatz = ""; } 352 else { $farbeersatz = "linecolor=" . $farbe . ", "; } 353 if ( ( $fuellart eq "" ) ) { $fuellartersatz = ""; } 354 else { $fuellartersatz = "fillstyle=" . $fuellart . ", "; } 355 if ( ( $fuellfarbe eq "" ) ) { $fuellfarbeersatz = ""; } 356 else { $fuellfarbeersatz = "fillcolor=" . $fuellfarbe . ", "; } 357 if ( ( $linienart eq "" ) ) { $linienartersatz = ""; } 358 else { $linienartersatz = "linestyle=" . $linienart . ", "; } 359 if ( ( $linienstaerke eq "" ) ) { $linienstaerkeersatz = ""; } 360 else { $linienstaerkeersatz = "linewidth=" . $linienstaerke . "pt, "; } 361 if ( $parameter eq "" ) { $parameterersatz = ""; } 362 else { $parameterersatz = $parameter; } 363 schreibeinarray( 364 $layer, 365 sprintf( 366 "\\psset{%s%s%s%s%s%s}", 367 $farbeersatz, $fuellartersatz, $fuellfarbeersatz, 368 $linienartersatz, $linienstaerkeersatz, $parameterersatz 369 ) 370 ); 371 abstand($layer); 372 373 setfarbe($farbe); 374 setfuellart($fuellart); 375 setfuellfarbe($fuellfarbe); 376 setlinienstaerke($linienstaerke); 377 setlinienart($linienart); 378 } 379 380 # Befehl erzeugen 381 sub befehlerzeugen { 382 my ( $layer, $befehl, $farbe, $linienart, $linienstaerke, $parameter, 383 $pfeilart, $anhang ) 384 = @_; 385 befehlfuellungerzeugen( 386 $layer, $befehl, $farbe, "", 387 "", $linienart, $linienstaerke, $parameter, 388 $pfeilart, $anhang 389 ); 390 } 391 392 sub befehlfuellungerzeugen { 393 my ( 394 $layer, $befehl, $farbe, $fuellart, 395 $fuellfarbe, $linienart, $linienstaerke, $parameter, 396 $pfeilart, $anhang 397 ) = @_; 398 399 my ( 400 $farbeersatz, $fuellartersatz, $fuellfarbeersatz, 401 $linienartersatz, $linienstaerkeersatz, $parameterersatz 402 ); 403 404 if ( ( $farbe eq "" ) || ( $farbe eq getfarbe() ) ) { $farbeersatz = ""; } 405 else { $farbeersatz = "linecolor=" . $farbe . ", "; } 406 if ( ( $fuellart eq "" ) || ( $fuellart eq getfuellart() ) ) { 407 $fuellartersatz = ""; 408 } 409 else { $fuellartersatz = "fillstyle=" . $fuellart . ", "; } 410 if ( ( $fuellfarbe eq "" ) || ( $fuellfarbe eq getfuellfarbe() ) ) { 411 $fuellfarbeersatz = ""; 412 } 413 else { $fuellfarbeersatz = "fillcolor=" . $fuellfarbe . ", "; } 414 if ( ( $linienart eq "" ) || ( $linienart eq getlinienart() ) ) { 415 $linienartersatz = ""; 416 } 417 else { $linienartersatz = "linestyle=" . $linienart . ", "; } 418 if ( ( $linienstaerke eq "" ) || ( $linienstaerke eq getlinienstaerke() ) ) 419 { 420 $linienstaerkeersatz = ""; 421 } 422 else { $linienstaerkeersatz = "linewidth=" . $linienstaerke . "pt, "; } 423 if ( $parameter eq "" ) { $parameterersatz = ""; } 424 else { $parameterersatz = $parameter; } 425 426 if ( $pfeilart eq "" ) { 427 if ( ( $farbeersatz eq "" ) 428 && ( $fuellartersatz eq "" ) 429 && ( $fuellfarbeersatz eq "" ) 430 && ( $linienartersatz eq "" ) 431 && ( $linienstaerkeersatz eq "" ) 432 && ( $parameterersatz eq "" ) ) 433 { 434 schreibeinarray( $layer, sprintf( "\\%s%s%%", $befehl, $anhang ) ); 435 } 436 else { 437 schreibeinarray( 438 $layer, 439 sprintf( 440 "\\%s[%s%s%s%s%s%s]%s%%", 441 $befehl, $farbeersatz, 442 $fuellartersatz, $fuellfarbeersatz, 443 $linienartersatz, $linienstaerkeersatz, 444 $parameterersatz, $anhang 445 ) 446 ); 447 } 448 } 449 else { 450 if ( ( $farbeersatz eq "" ) 451 && ( $fuellartersatz eq "" ) 452 && ( $fuellfarbeersatz eq "" ) 453 && ( $linienartersatz eq "" ) 454 && ( $linienstaerkeersatz eq "" ) 455 && ( $parameterersatz eq "" ) ) 456 { 457 schreibeinarray( $layer, 458 sprintf( "\\%s{%s}%s%%", $befehl, $pfeilart, $anhang ) ); 459 } 460 else { 461 schreibeinarray( 462 $layer, 463 sprintf( 464 "\\%s[%s%s%s%s%s%s]{%s}%s%%", 465 $befehl, $farbeersatz, 466 $fuellartersatz, $fuellfarbeersatz, 467 $linienartersatz, $linienstaerkeersatz, 468 $parameterersatz, $pfeilart, 469 $anhang 470 ) 471 ); 472 } 473 } 474 } 475 $schriftgroesse = 10; 476 477 sub setschriftgroesse { 478 my ($groesse) = @_; 479 $schriftgroesse = $groesse; 480 } 481 482 sub getschriftgroesse { return $schriftgroesse; } 483 484 my $beschriftunggroesse = "normalsize"; 485 486 sub setbeschriftunggroesse { 487 my ($groesse) = @_; 488 $beschriftunggroesse = $groesse; 489 } 490 491 sub getbeschriftunggroesse { return $beschriftunggroesse; } 492 493 sub beschriftunggroesse { 494 my ( $text, $groesse ) = @_; 495 my $ausgabe; 496 497 if ( $groesse eq "normalsize" ) { $ausgabe = $text; } 498 else { $ausgabe = "\\" . $groesse . "{" . $text . "}"; } 499 return $ausgabe; 500 } 501 502 sub textfarbe { 503 my ( $text, $farbe ) = @_; 504 my $ausgabe; 505 if ( $farbe eq getfarbe() ) { $ausgabe = $text; } 506 else { $ausgabe = "\\color{" . $farbe . "}{" . $text . "}"; } 507 return $ausgabe; 508 } 509 510 sub abstand { 511 my ($layer) = @_; 512 schreibeinarray( $layer, sprintf("") ); 513 } 514 515 sub kommentar { 516 my ( $layer, $text ) = @_; 517 schreibeinarray( $layer, sprintf( "%%%% %s", $text ) ); 518 } 519 520 sub komm { 521 my ($text) = @_; 522 kommentar( 10, $text ); 523 } 524 525 sub hilfe { 526 my ( $layer, $text, $var ) = @_; 527 schreibeinarray( $layer, sprintf( "%% %s: %s", $text, $var ) ); 528 } 529 530 sub usepackage { 531 my ( $parameter, $befehl ) = @_; 532 533 if ( getkopf() == 1 ) { 534 if ( $parameter eq "" ) { 535 schreibeinarray( 104, sprintf( "\\usepackage{%s}", $befehl ) ); 536 } 537 else { 538 schreibeinarray( 104, 539 sprintf( "\\usepackage[%s]{%s}", $parameter, $befehl ) ); 540 } 541 if ( $befehl eq "pst-tree" ) { 542 if ( $tree == 0 ) { 543 pstricks( 544 104, 545 "\\newcommand{\\knoten}[2][white] 546 {\\Tr{\\psframebox[fillcolor=#1!50,fillstyle=solid]{#2}}}" 547 ); 548 $tree = 1; 549 } 550 } 551 } 552 553 } 554 555 #### Pictureumgebung 556 557 sub beginpicture { 558 my ($layer) = @_; 559 560 schreibeinarray( 561 $layer, 562 sprintf( 563 "\\begin{pspicture}(%g,%g)(%g,%g)\n", 564 getminmax( "x", "min" ), 565 getminmax( "y", "min" ), 566 getminmax( "x", "max" ), 567 getminmax( "y", "max" ) 568 ) 569 ); 570 571 } 572 573 sub setachsenbild { 574 my ($layer) = @_; 575 576 my ( $xeinteilung, $yeinteilung, $zeinteilung ); 577 578 if ( getachsen() == 1 ) { 579 if ( get3dzeichnen() == 1 ) { 580 if ( ( getachsengraph3d("xmax") == getachsengraph3d("xmin") ) 581 || ( getachsengraph3d("xmax") == 0 ) ) 582 { 583 $xeinteilung = 0; 584 } 585 else { 586 if ( getachsengraph3d("xmax") - getachsengraph3d("xmin") <= 1 ) 587 { 588 $xeinteilung = schoenetabelle( getachsengraph3d("xmax") ); 589 } 590 else { 591 if ( schoenetabelle( getachsengraph3d("xmax") ) <= 1 ) { 592 $xeinteilung = 1; 593 } 594 else { 595 $xeinteilung = 596 schoenetabelle( getachsengraph3d("xmax") ); 597 } 598 } 599 } 600 if ( ( getachsengraph3d("ymax") == getachsengraph3d("ymin") ) 601 || ( getachsengraph3d("ymax") == 0 ) ) 602 { 603 $yeinteilung = 0; 604 } 605 606 else { 607 if ( getachsengraph3d("ymax") - getachsengraph3d("ymin") <= 1 ) 608 { 609 $yeinteilung = schoenetabelle( getachsengraph3d("ymax") ); 610 } 611 else { 612 if ( schoenetabelle( getachsengraph3d("ymax") ) <= 1 ) { 613 $yeinteilung = 1; 614 } 615 else { 616 $yeinteilung = 617 schoenetabelle( getachsengraph3d("ymax") ); 618 } 619 } 620 } 621 622 if ( ( getachsengraph3d("zmax") == getachsengraph3d("zmin") ) 623 || ( getachsengraph3d("zmax") == 0 ) ) 624 { 625 $zeinteilung = 0; 626 } 627 else { 628 if ( getachsengraph3d("zmax") - getachsengraph3d("zmin") <= 1 ) 629 { 630 $zeinteilung = schoenetabelle( getachsengraph3d("zmax") ); 631 } 632 else { 633 if ( schoenetabelle( getachsengraph3d("zmax") ) <= 1 ) { 634 $zeinteilung = 1; 635 } 636 else { 637 $zeinteilung = 638 schoenetabelle( getachsengraph3d("zmax") ); 639 } 640 } 641 } 642 643 achsen3d( 644 $layer, getfarbe(), 645 getlinienstaerke(), getlinienart(), 646 "->", getachsengraph3d("xmin"), 647 getachsengraph3d("xmax"), getachsengraph3d("ymin"), 648 getachsengraph3d("ymax"), getachsengraph3d("zmin"), 649 getachsengraph3d("zmax"), $xeinteilung, 650 "normal", getmarkierung("x"), 651 $yeinteilung, "normal", 652 getmarkierung("y"), $zeinteilung, 653 "normal", getmarkierung("z"), 654 ); 655 656 } 657 else { 658 if ( getschnitt("x") < getachsengraph("xmin") ) { 659 schnittsetzen( getachsengraph("xmin"), "x" ); 660 } 661 if ( getschnitt("y") < getachsengraph("ymin") ) { 662 schnittsetzen( getachsengraph("ymin"), "y" ); 663 } 664 if ( getbalken() == 1 ) { 665 666 if ( getmarkierung("x") eq "\$x\$" ) { 667 setmarkierung( "", "x" ); 668 } 669 if ( getmarkierung("y") eq "\$y\$" ) { 670 setmarkierung( "", "y" ); 671 } 672 673 if ( getrelativ() == 1 ) { setskalierung( 0.1, "x" ); } 674 achsen( 675 $layer, 676 getfarbe(), 677 getlinienstaerke(), 678 getlinienart(), 679 "->", 680 getachsengraph("xmin"), 681 getachsengraph("xmax") + 682 schoenetabelle( getachsengraph("xmax") ), 683 getachsengraph("ymin"), 684 getachsengraph("ymax") + 685 schoenetabelle( getachsengraph("ymax") ), 686 schoenetabelle( 687 getachsengraph("xmax") + 688 schoenetabelle( getachsengraph("xmax") ) 689 ), 690 "normal", 691 getmarkierung("x"), 692 getachsengraph("ymax") * 2, 693 "normal", 694 getmarkierung("y") 695 ); 696 697 } 698 699 elsif ( getpikto() == 1 ) { 700 if ( getmarkierung("x") eq "\$x\$" ) { 701 setmarkierung( "", "x" ); 702 } 703 if ( getmarkierung("y") eq "\$y\$" ) { 704 setmarkierung( "", "y" ); 705 } 706 707 achsen( 708 $layer, 709 getfarbe(), 710 getlinienstaerke(), 711 getlinienart(), 712 "->", 713 getachsengraph("xmin"), 714 getachsengraph("xmax") + 715 schoenetabelle( getachsengraph("xmax") ), 716 getachsengraph("ymin"), 717 getachsengraph("ymax") + 718 schoenetabelle( getachsengraph("ymax") ), 719 schoenetabelle( 720 getachsengraph("xmax") + 721 schoenetabelle( getachsengraph("xmax") ) 722 ), 723 "keine", 724 getmarkierung("x"), 725 getachsengraph("ymax") * 2, 726 "keine", 727 getmarkierung("y") 728 ); 729 } 730 731 elsif ( getsaeule() == 1 ) { 732 if ( getmarkierung("x") eq "\$x\$" ) { 733 setmarkierung( "", "x" ); 734 } 735 if ( getmarkierung("y") eq "\$y\$" ) { 736 setmarkierung( "", "y" ); 737 } 738 if ( getrelativ() == 1 ) { setskalierung( 0.1, "y" ); } 739 achsen( 740 $layer, 741 getfarbe(), 742 getlinienstaerke(), 743 getlinienart(), 744 "->", 745 getachsengraph("xmin"), 746 getachsengraph("xmax") + 747 schoenetabelle( getachsengraph("xmax") ), 748 getachsengraph("ymin"), 749 getachsengraph("ymax") + 750 schoenetabelle( getachsengraph("ymax") ), 751 getachsengraph("xmax") * 2, 752 "normal", 753 getmarkierung("x"), 754 schoenetabelle( 755 getachsengraph("ymax") + 756 schoenetabelle( getachsengraph("ymax") ) 757 ), 758 "normal", 759 getmarkierung("y") 760 ); 761 } 762 else { 763 if ( 764 schoenetabelle( 765 getachsengraph("xmax") - getachsengraph("xmin") 766 ) <= 1 767 ) 768 { 769 $xeinteilung = 1; 770 } 771 else { 772 $xeinteilung = 773 schoenetabelle( 774 getachsengraph("xmax") - getachsengraph("xmin") ); 775 } 776 if ( 777 schoenetabelle( 778 getachsengraph("ymax") - getachsengraph("ymin") 779 ) <= 1 780 ) 781 { 782 $yeinteilung = 1; 783 } 784 else { 785 $yeinteilung = 786 schoenetabelle( 787 getachsengraph("ymax") - getachsengraph("ymin") ); 788 } 789 achsen( 790 $layer, getfarbe(), 791 getlinienstaerke(), getlinienart(), 792 "->", getachsengraph("xmin"), 793 getachsengraph("xmax"), getachsengraph("ymin"), 794 getachsengraph("ymax"), $xeinteilung, 795 "normal", getmarkierung("x"), 796 $yeinteilung, "normal", 797 getmarkierung("y") 798 ); 799 } 800 801 } 802 } 803 804 setachsen(2); 805 806 } 807 808 sub setgitterbild { 809 my ($layer) = @_; 810 811 812 if ( getachsen() != 1 ) { 813 settexthier(""); 814 my ( $xeinteilung, $yeinteilung, $zeinteilung ); 815 if ( getschnitt("x") < getachsengraph("xmin") ) { 816 schnittsetzen( getachsengraph("xmin"), "x" ); 817 } 818 if ( getschnitt("y") < getachsengraph("ymin") ) { 819 schnittsetzen( getachsengraph("ymin"), "y" ); 820 } 821 822 if ( getgitter() == 1 ) { 823 if ( get3dzeichnen() == 1 ) { 824 if ( getachsengraph3d("xmax") == getachsengraph3d("xmin") ) { 825 $xeinteilung = 0; 826 } 827 else { 828 $xeinteilung = 829 schoenetabelle( 830 getachsengraph3d("xmax") - getachsengraph3d("xmin") ); 831 } 832 if ( getachsengraph3d("ymax") == getachsengraph3d("ymin") ) { 833 $yeinteilung = 0; 834 } 835 else { 836 $yeinteilung = 837 schoenetabelle( 838 getachsengraph3d("ymax") - getachsengraph3d("ymin") ); 839 } 840 if ( getachsengraph3d("zmax") == getachsengraph3d("zmin") ) { 841 $zeinteilung = 0; 842 } 843 else { 844 $zeinteilung = 845 schoenetabelle( 846 getachsengraph3d("zmax") - getachsengraph3d("zmin") ); 847 } 848 kariert3d( 849 $layer, "lightgray", 850 0.25, "solid", 851 getachsengraph3d("xmin"), getachsengraph3d("ymin"), 852 getachsengraph3d("zmin"), getachsengraph3d("xmax"), 853 getachsengraph3d("ymax"), getachsengraph3d("zmax"), 854 $xeinteilung, 0, 855 0, $yeinteilung, 856 0, 0, 857 $zeinteilung, 0, 858 0 859 ); 860 861 } 862 else { 863 $xeinteilung = 864 schoenetabelle( 865 getachsengraph("xmax") - getachsengraph("xmin") ); 866 $yeinteilung = 867 schoenetabelle( 868 getachsengraph("ymax") - getachsengraph("ymin") ); 869 kariert( 870 $layer, "lightgray", 871 0.25, "solid", 872 getachsengraph("xmin"), getachsengraph("ymin"), 873 getachsengraph("xmax"), getachsengraph("ymax"), 874 $xeinteilung, 0, 875 0, $yeinteilung, 876 0, 0 877 ); 878 } 879 } 880 881 if ( getmatheheft() == 1 ) { 882 setmatheheft(2); 883 matheheft( $layer, "lightgray", getachsengraph("xmin"), 884 getachsengraph("ymin"), getachsengraph("xmax"), 885 getachsengraph("ymax") ); 886 } 887 888 settexthier(""); 889 setgitter(2); 890 } 891 } 892 893 sub endpicture { 894 my ($layer) = @_; 895 pstricks( $layer, "\\end{pspicture}" ); 896 } 897 898 ### Pstrickstext 899 sub pstricks { 900 my ( $layer, $pstrickstext ) = @_; 901 schreibeinarray( $layer, sprintf( "%s", $pstrickstext ) ); 902 } 903 904 sub latex { 905 my ( $layer, $latextext ) = @_; 906 pstricks( $layer, $latextext ); 907 } 908 909 sub schleife { 910 my ( $layer, $variable, $start, $ende, $schritt ) = @_; 911 912 my $weitehier = abrunden( ( ( ( $ende - $start ) / $schritt ) + 1 ), 1 ); 913 my $text = 914 "\\multido{\\" 915 . $variable . "=" 916 . $start . "+" 917 . $schritt . "}{" 918 . $weitehier . "}{%%"; 919 pstricks( $layer, $text ); 920 921 } 922 923 sub schleifeanzahl { 924 my ( $layer, $variable, $start, $anzahl, $schritt ) = @_; 925 my $text = 926 "\\multido{\\" 927 . $variable . "=" 928 . $start . "+" 929 . $schritt . "}{" 930 . $anzahl . "}{%%"; 931 pstricks( $layer, $text ); 932 } 933 934 sub schleifenende { 935 my ($layer) = @_; 936 pstricks( $layer, "}" ); 937 } 938 939 1; |
A.4 Das Modul für Diagramme
Im Folgenden findet sich die Datei für die Erstellung von Diagrammen und Verteilungen.
diagramme-pm.pm |
---|
1 ################################################################## 2 # Modul fuer Diagramme 3 # Letzte Aenderung: 06.01.2012 4 ################################################################## 5 use POSIX qw /floor ceil/; 6 use Math::Trig; 7 use strict; 8 use warnings; 9 10 my $achsen = 0; 11 12 ## Achsen werden gezeichnet 13 sub setachsen { 14 my ($wert) = @_; 15 $achsen = $wert; 16 } 17 18 sub getachsen { return $achsen; } 19 20 my ( $balken, $saeule, $relativ, $pikto ); 21 22 $balken = $saeule = $relativ = $pikto = 0; 23 24 sub setbalken { $balken = 1; } 25 sub getbalken { return $balken; } 26 27 sub setsaeule { $saeule = 1; } 28 sub getsaeule { return $saeule; } 29 30 sub setrelativ { $relativ = 1; } 31 sub getrelativ { return $relativ; } 32 sub setpikto { $pikto = 1; } 33 sub getpikto { return $pikto; } 34 35 sub setymaxstat { 36 my ($max) = @_; 37 setachsengraph( getachsengraph("xmin"), getachsengraph("ymin"), 38 getachsengraph("xmax"), $max ); 39 } 40 41 sub saeule { 42 my ( 43 $layer, $x, $y, $dx, 44 $dy, $farbe, $fuellart, $fuellfarbe, 45 $linienart, $linienstaerke, $text, $textwinkel, 46 $textausrichtung, $welcherbalken, $parameter 47 ) = @_; 48 49 setachsengraph( $x, $y, $x + 2 * $dx, $y + $dy ); 50 51 # achsengraph( $x, $y ); 52 # achsengraph( $x + $dx, $y + $dy ); 53 if ( $dx == 0 ) { 54 linie( $layer, $x, $y, "", $x, $y + $dy, "", $linienart, $linienstaerke, 55 $farbe, $parameter, "-" ); 56 } 57 elsif ( $dy == 0 ) { 58 linie( $layer, $x, $y, "", $x + $dx, $y, "", $linienart, $linienstaerke, 59 $farbe, $parameter, "-" ); 60 } 61 else { 62 rechteck( 63 $layer, nachkommastellen( $x, 5 ), 64 nachkommastellen( $y, 5 ), nachkommastellen( $dx, 5 ), 65 nachkommastellen( $dy, 5 ), 0, 66 $farbe, $fuellart, 67 $fuellfarbe, $linienart, 68 $linienstaerke, $parameter 69 ); 70 } 71 72 if ( $welcherbalken eq "s" ) { 73 if ( $textausrichtung eq "auf" ) { 74 beschriftung( $layer + 1, "black", $x + $dx / 2, 75 $y, $textwinkel, 90, $text ); 76 } 77 elsif ( $textausrichtung eq "mitte" ) { 78 beschriftung( 79 $layer + 1, "black", 80 $x + $dx / 2, 81 $y + $dy / 2, 82 $textwinkel, "c", $text 83 ); 84 } 85 elsif ( $textausrichtung eq "unten" ) { 86 beschriftung( $layer + 1, "black", $x + $dx / 2, 87 $y - 0.5, $textwinkel, 90, $text ); 88 } 89 elsif ( $textausrichtung eq "oben" ) { 90 beschriftung( $layer + 1, "black", $x + $dx / 2, 91 $y + $dy, $textwinkel, 90, $text ); 92 } 93 else { 94 beschriftung( 95 $layer + 1, "black", 96 $x + $dx / 2, 97 $y + $textausrichtung, 98 $textwinkel, "c", $text 99 ); 100 } 101 } 102 if ( $welcherbalken eq "b" ) { 103 if ( $textausrichtung eq "auf" ) { 104 beschriftung( $layer + 1, "black", $x, $y + $dy / 2, 105 $textwinkel, 0, $text ); 106 } 107 elsif ( $textausrichtung eq "mitte" ) { 108 beschriftung( 109 $layer + 1, "black", 110 $x + $dx / 2, 111 $y + $dy / 2, 112 $textwinkel, "c", $text 113 ); 114 } 115 elsif ( $textausrichtung eq "links" ) { 116 beschriftung( $layer, "black", $x - 0.5, $y + $dy / 2, 117 $textwinkel, "l", $text ); 118 } 119 elsif ( $textausrichtung eq "rechts" ) { 120 beschriftung( 121 $layer + 1, "black", 122 $x + $dx + $dx / 4, 123 $y + $dy / 2, 124 $textwinkel, "r", $text 125 ); 126 } 127 else { 128 beschriftung( 129 $layer + 1, "black", 130 $x + $textausrichtung, 131 $y + $dy / 2, 132 $textwinkel, 90, $text 133 ); 134 } 135 } 136 } 137 138 sub saeuledreieck { 139 my ( 140 $layer, $x, $y, $dx, 141 $dy, $farbe, $fuellart, $fuellfarbe, 142 $linienart, $linienstaerke, $text, $textwinkel, 143 $textausrichtung, $welcherbalken, $parameter 144 ) = @_; 145 146 achsengraph( $x, $y ); 147 achsengraph( $x + $dx, $y + $dy ); 148 149 if ( $welcherbalken eq "s" ) { 150 dreieck( 151 $layer, $x, $y, "", 152 $x + $dx, $y, "", $x + $dx / 2, 153 $y + $dy, "", $farbe, $fuellart, 154 $fuellfarbe, $linienart, $linienstaerke, $parameter 155 ); 156 if ( $textausrichtung eq "auf" ) { 157 beschriftung( $layer + 1, "black", $x + $dx / 2, 158 $y, $textwinkel, 90, $text ); 159 } 160 elsif ( $textausrichtung eq "mitte" ) { 161 beschriftung( 162 $layer + 1, "black", 163 $x + $dx / 2, 164 $y + $dy / 2, 165 $textwinkel, "c", $text 166 ); 167 } 168 elsif ( $textausrichtung eq "unten" ) { 169 beschriftung( $layer + 1, "black", $x + $dx / 2, 170 $y - 0.5, $textwinkel, 90, $text ); 171 } 172 elsif ( $textausrichtung eq "oben" ) { 173 beschriftung( $layer, "black", $x + $dx / 2, 174 $y + $dy, $textwinkel, 90, $text ); 175 } 176 else { 177 beschriftung( 178 $layer + 1, "black", 179 $x + $dx / 2, 180 $y + $textausrichtung, 181 $textwinkel, 90, $text 182 ); 183 } 184 } 185 if ( $welcherbalken eq "b" ) { 186 dreieck( 187 $layer, $x, $y, "", 188 $x + $dx, $y + $dy / 2, "", $x, 189 $y + $dy, "", $farbe, $fuellart, 190 $fuellfarbe, $linienart, $linienstaerke, $parameter 191 ); 192 if ( $textausrichtung eq "auf" ) { 193 beschriftung( $layer + 1, "black", $x, $y + $dy / 2, 194 $textwinkel, 0, $text ); 195 } 196 elsif ( $textausrichtung eq "mitte" ) { 197 beschriftung( 198 $layer + 1, "black", 199 $x + $dx / 2, 200 $y + $dy / 2, 201 $textwinkel, "c", $text 202 ); 203 } 204 elsif ( $textausrichtung eq "links" ) { 205 beschriftung( $layer + 1, "black", $x - 0.5, $y + $dy / 2, 206 $textwinkel, "l", $text ); 207 } 208 elsif ( $textausrichtung eq "rechts" ) { 209 beschriftung( 210 $layer + 1, "black", 211 $x + $dx + $dx / 4, 212 $y + $dy / 2, 213 $textwinkel, "r", $text 214 ); 215 } 216 else { 217 beschriftung( 218 $layer + 1, "black", 219 $x + $textausrichtung, 220 $y + $dy / 2, 221 $textwinkel, 0, $text 222 ); 223 } 224 } 225 } 226 ### Tortendiagramm 227 sub torte { 228 my ( 229 $layer, $x, $y, $winkel, 230 $winkelanfang, $radius, $abstand, $farbe, 231 $fuellart, $fuellfarbe, $linienart, $linienstaerke, 232 $text, $textwinkel, $textausrichtung, $parameter 233 ) = @_; 234 235 my $xneu = $x + cos( degtorad( $winkelanfang + $winkel / 2 ) ) * $abstand; 236 my $yneu = $y + sin( degtorad( $winkelanfang + $winkel / 2 ) ) * $abstand; 237 my $xtext = 238 $xneu + cos( degtorad( $winkelanfang + $winkel / 2 ) ) * $radius / 2; 239 my $ytext = 240 $yneu + sin( degtorad( $winkelanfang + $winkel / 2 ) ) * $radius / 2; 241 kreisbogen( 242 $layer, $linienart, 243 $linienstaerke, $xneu, 244 $yneu, $radius, 245 $winkelanfang, $winkelanfang + $winkel, 246 $farbe, $fuellart, 247 $fuellfarbe, "ja", 248 $parameter, "" 249 ); 250 beschriftung( $layer + 1, $farbe, $xtext, $ytext, $textwinkel, 90, $text ); 251 } 252 ### Ringdiagramm 253 sub ringdiagramm { 254 my ( 255 $layer, $x, $y, $winkel, 256 $winkelanfang, $radius, $dicke, $abstand, 257 $farbe, $fuellart, $fuellfarbe, $linienart, 258 $linienstaerke, $text, $textwinkel, $textausrichtung, 259 $parameter 260 ) = @_; 261 262 my $radiusmitte = $radius - $dicke / 2; 263 my $xneu = nachkommastellen( 264 $x + cos( degtorad( $winkelanfang + $winkel / 2 ) ) * $abstand, 4 ); 265 my $yneu = nachkommastellen( 266 $y + sin( degtorad( $winkelanfang + $winkel / 2 ) ) * $abstand, 4 ); 267 my $xtext = nachkommastellen( 268 $xneu + cos( degtorad( $winkelanfang + $winkel / 2 ) ) * $radiusmitte, 269 4 ); 270 my $ytext = nachkommastellen( 271 $yneu + sin( degtorad( $winkelanfang + $winkel / 2 ) ) * $radiusmitte, 272 4 ); 273 setachsengraph( 274 $xneu - $radius, 275 $yneu - $radius, 276 $xneu + $radius, 277 $yneu + $radius 278 ); 279 ring( 280 $layer, $linienart, $linienstaerke, 281 $xneu, $yneu, $radius, 282 $dicke, $winkelanfang, $winkelanfang + $winkel, 283 $farbe, $fuellart, $fuellfarbe, 284 $parameter 285 ); 286 beschriftung( $layer, "black", $xtext, $ytext, $textwinkel, 90, $text ); 287 } 288 289 ### Bilddiagramm 290 291 sub bilddiagramm { 292 my ( 293 $layer, $bild, $anzahl, $xstart, 294 $y, $breite, $winkel, $abstand, 295 $text, $textwinkel, $textausrichtung, $parameter 296 ) = @_; 297 my ( $i, $xende ); 298 299 $xende = $xstart + ( $breite + $abstand ) * $anzahl - 1; 300 minmax( $xstart, $y, $xende * 2, $y + $breite ); 301 setachsengraph( $xstart, $y, $xende, $y ); 302 schleife( $layer, "nx", $xstart, $xende, $abstand + $breite ); 303 bild( $layer, "\\nx", $y, "", $breite, $winkel, $bild ); 304 schleifenende($layer); 305 beschriftung( 306 $layer, "black", 307 $xstart + $textausrichtung, 308 $y + bildhoeheberechnet( $bild, $breite ) / 2, 309 $textwinkel, 0, $text 310 ); 311 } 312 313 ### Binomialverteilung 314 sub fac { 315 my ($n) = @_; 316 my $ergebnis = 1; 317 my $i; 318 for ( $i = $n ; $i > 1 ; $i = $i - 1 ) { $ergebnis = $ergebnis * $i; } 319 return $ergebnis; 320 } 321 322 sub binom { 323 my ( $n, $k ) = @_; 324 my ( $i, $j ); 325 my @temp; 326 return 0 if ( ( $n < 0 ) || ( $k < 0 ) || ( $k > $n ) ); 327 for ( $i = 0 ; $i <= $n ; $i++ ) { 328 for ( $j = $i ; $j >= 0 ; $j-- ) { 329 $temp[$j] = 330 ( ( $j == $i ) || ( $j == 0 ) ) 331 ? 1 332 : $temp[$j] + $temp[ $j - 1 ]; 333 } 334 } 335 return $temp[$k]; 336 } 337 338 my $strich = 0; 339 340 sub setbinostrich { $strich = 1; } 341 342 sub binomial { 343 my ( 344 $layer, $n, $p, $aufsummiert, 345 $breite, $farbe, $fuellart, $fuellfarbe, 346 $linienart, $linienstaerke, $markierung, $parameter 347 ) = @_; 348 349 binomialteil( 350 $layer, $n, $p, 0, 351 $n, $aufsummiert, $breite, $farbe, 352 $fuellart, $fuellfarbe, $linienart, $linienstaerke, 353 $markierung, $parameter 354 ); 355 356 } 357 358 ## Eine Strichliste wird erzeugt 359 360 sub strichliste { 361 my ( 362 $layer, $xstart, $ystart, 363 $wert, $hoehe, $abstand, 364 $farbe, $linienstaerke, $linienart 365 ) = @_; 366 my ( $x, $y, $i, $rest, $anzahl, $abstandfuenf ); 367 368 $anzahl = abrunden( $wert / 5, 1 ); 369 $rest = $wert % 5; 370 $y = $ystart; 371 372 for ( $i = 1 ; $i <= $wert ; $i++ ) { 373 $x = $xstart + $i * $abstand; 374 375 if ( $i % 5 == 0 ) { 376 linie( 377 $layer, $x - 4 * $abstand, 378 $y, "", 379 $x - 1 * $abstand, 380 $y + $hoehe, 381 "", $linienart, $linienstaerke, $farbe, "", "" 382 ); 383 } 384 else { 385 if ( $i >= $wert - $rest ) { 386 linie( $layer, $x, $y, "", $x, $y + $hoehe, 387 "", $linienart, $linienstaerke, $farbe, "", "" ); 388 } 389 } 390 391 } 392 393 for ( $i = 1 ; $i <= $anzahl ; $i++ ) { 394 $x = $xstart + $i * $abstand * 5; 395 schleifeanzahl( $layer, "nx", $x - 4 * $abstand, 4, $abstand ); 396 linie( $layer, "\\nx", $y, "", "\\nx", $y + $hoehe, 397 "", $linienart, $linienstaerke, $farbe, "", "" ); 398 schleifenende($layer); 399 } 400 } 401 402 ## Die Binomialverteilung fuer einen Teil zeichnen 403 sub binomialteil { 404 my ( 405 $layer, $n, $p, $anfang, 406 $ende, $aufsummiert, $breite, $farbe, 407 $fuellart, $fuellfarbe, $linienart, $linienstaerke, 408 $markierung, $parameter 409 ) = @_; 410 411 # setmitte(); 412 my $q = 1 - $p; 413 my $bern2 = 0; 414 my $i = 0; 415 my ( $bern, $bino, $max, $yschritte ); 416 my $farbeersatz = getfarbe(); 417 my $fuellartersatz = getfuellart(); 418 my $fuellfarbeersatz = getfuellfarbe(); 419 my $linienstaerkeersatz = getlinienstaerke(); 420 my $linienartersatz = getlinienart(); 421 422 minmax( -$n, -1, $n, 1 ); 423 424 if ( $aufsummiert eq "ja" ) { setymaxstat(1); } 425 else { 426 for ( $i = 0 ; $i <= $n ; $i++ ) { 427 $bino = binom( $n, $i ); 428 $max = $bino * $p**($i) * $q**( $n - $i ); 429 setymaxstat($max); 430 } 431 } 432 433 if ( $markierung == 0 ) { 434 if ( $n > 9 ) { 435 $markierung = schoenetabelle( $n * $breite * 100 ) / 100; 436 } 437 else { $markierung = 1; } 438 } 439 else { $markierung = $markierung; } 440 setymaxstat( aufrunden( getachsengraph("ymax") * 10, 1 ) / 10 ); 441 $yschritte = schoenetabelle( getachsengraph("ymax") * 10 ) / 10; 442 setymaxstat( $yschritte * 10 ); 443 444 if ( getgitter() == 1 ) { 445 kariert( 446 $layer, "lightgray", 447 0.8, "solid", 448 0, 0, 449 $n * $breite + $breite + 1, getachsengraph("ymax"), 450 $n * $breite + $breite + 1, 0, 451 0, $yschritte, 452 0, 0 453 ); 454 setgitter(2); 455 } 456 if ( getachsen() == 1 ) { 457 achsen( 458 $layer + 1, getfarbe(), 459 getlinienstaerke(), $linienart, 460 getpfeilart(), 0, 461 $n * $breite + $breite + 1, 0, 462 getachsengraph("ymax"), $n * $breite + $markierung, 463 "normal", getmarkierung("x"), 464 $yschritte, "normal", 465 getmarkierung("y") 466 ); 467 468 } 469 470 if ( $n > 1 ) { 471 pstricks( $layer, "{" ); 472 einstellungen( $layer, $farbe, $fuellart, $fuellfarbe, $linienart, 473 $linienstaerke, $parameter ); 474 475 for ( $i = 0 ; $i <= $n ; $i++ ) { 476 $bern = binom( $n, $i ); 477 $bern = $bern * $p**($i) * $q**( $n - $i ); 478 if ( $aufsummiert ne "nein" ) { 479 $bern2 = $bern2 + nachkommastellen( $bern, 4 ); 480 } 481 else { $bern2 = nachkommastellen( $bern, 4 ); } 482 if ( $p != 0 ) { 483 if ( ( $i >= $anfang ) && ( $i <= $ende ) ) { 484 if ( $strich == 1 ) { 485 linie( 486 $layer, 487 $i * $breite + $breite / 2, 488 0, 489 "", 490 $i * $breite + $breite / 2, 491 $bern2, 492 "", 493 $linienart, 494 $linienstaerke, 495 $farbe, 496 $parameter, 497 "|-|" 498 ); 499 } 500 else { 501 saeule( 502 $layer, $i * $breite, 503 0, $breite, 504 $bern2, $farbe, 505 $fuellart, $fuellfarbe, 506 $linienart, $linienstaerke, 507 "", 0, 508 0, "s", 509 $parameter 510 ); 511 } 512 } 513 } 514 if ( $markierung == $n ) { } 515 else { 516 if ( ( $i % $markierung ) == 0 ) { 517 if ( getachsen() == 1 ) { 518 xmarkierungohne( $layer, $i * $breite + $breite / 2, 519 $i, "black" ); 520 } 521 } 522 } 523 } 524 pstricks( $layer, "}" ); 525 } 526 else { 527 for ( $i = 0 ; $i <= $n ; $i++ ) { 528 $bern = binom( $n, $i ); 529 $bern = $bern * $p**($i) * $q**( $n - $i ); 530 if ( $aufsummiert ne "nein" ) { 531 $bern2 = $bern2 + sprintf( "%0.4f", $bern ); 532 } 533 else { $bern2 = nachkommastellen( $bern, 4 ); } 534 if ( $p != 0 ) { 535 if ( ( $i >= $anfang ) && ( $i <= $ende ) ) { 536 if ( $strich == 1 ) { 537 linie( 538 $layer, 539 $i * $breite + $breite / 2, 540 0, 541 "", 542 $i * $breite + $breite / 2, 543 $bern2, 544 "", 545 $linienart, 546 $linienstaerke, 547 $farbe, 548 $parameter, 549 "|-|" 550 ); 551 } 552 else { 553 saeule( 554 $layer, $i * $breite, 555 0, $breite, 556 $bern2, $farbe, 557 $fuellart, $fuellfarbe, 558 $linienart, $linienstaerke, 559 "", 0, 560 0, "s", 561 $parameter 562 ); 563 } 564 } 565 } 566 if ( $markierung == $n ) { } 567 else { 568 if ( ( $i % $markierung ) == 0 ) { 569 if ( getachsen() == 1 ) { 570 xmarkierung( $layer, $i * $breite + $breite / 2, 571 $i, "black" ); 572 } 573 } 574 } 575 } 576 } 577 578 xmarkierungmulti( $layer, 0, $n, $breite, getfarbe() ); 579 580 setachsen(2); 581 setfarbe($farbeersatz); 582 setfuellart($fuellartersatz); 583 setfuellfarbe($fuellfarbeersatz); 584 setlinienstaerke($linienstaerkeersatz); 585 setlinienart($linienartersatz); 586 } 587 588 1; 589 |
A.5 Das Modul für dreidimensionale Zeichungen
dreidimensional-pm.pm |
---|
1 ################################################################## 2 # Modul für 3d-Zeichenroutinen 3 # 4 # Letzte Änderung: 06.01.2012 5 ################################################################## 6 use POSIX qw /floor ceil/; 7 use Math::Trig; 8 use strict; 9 use warnings; 10 my ( 11 $alpha, $beta, $coortype, $alphatrue, 12 $betatrue, $coortypetrue, $dreidimensional, $pstricks, 13 $pstrickstrue, $strichx, $strichy, $strichz, 14 $markierungx, $markierungy, $markierungz, $markierung, 15 $markierungsdicke, $xmin, $ymin, $xmax, 16 $ymax, $zmin, $zmax, $erstex1, 17 $erstex2, $erstey1, $erstey2, $erstez1, 18 $erstez2 19 ); 20 21 $dreidimensional = 0; 22 $alpha = 45; 23 $beta = 30; 24 $coortype = 2; 25 $alphatrue = $betatrue = $coortypetrue = 0; 26 $pstricks = 0; 27 $pstrickstrue = 0; 28 $strichx = $strichy = $strichz = 0.2; 29 $markierungx = -0.5; 30 $markierungy = 0.5; 31 $markierungz = -0.4; 32 $markierungsdicke = 0.6; 33 my $beschriftung = 0; 34 35 $markierung = 0; 36 ################################################################# 37 # Wird 3d gezeichnet? 38 ################################################################# 39 sub set3dzeichnen { 40 my ($wert) = @_; 41 $dreidimensional = $wert; 42 } 43 44 sub get3dzeichnen { return $dreidimensional; } 45 ################################################################# 46 # Wie 3d zeichnen? 47 ################################################################# 48 sub setpstricks { 49 my ($wert) = @_; 50 $pstrickstrue = $wert; 51 } 52 53 sub setbeschriftung { $beschriftung = 1; } 54 55 my $punkt = 0; 56 sub setpunkt { $punkt = 1; } 57 58 sub getpstricks { return $pstrickstrue; } 59 60 sub set3dpstricks { 61 my ($wert) = @_; 62 if ( getpstricks() == 0 ) { 63 $pstricks = $wert; 64 setpstricks(1); 65 } 66 else { $pstricks = $pstricks; } 67 } 68 69 sub get3dpstricks { return $pstricks; } 70 ################################################################# 71 # Winkel und Koordinaten fuer 3d setzen 72 ################################################################# 73 sub set3dwinkel { 74 my ( $wert, $alphaoderbeta ) = @_; 75 set3dzeichnen(1); 76 if ( $alphaoderbeta eq "alpha" ) { 77 if ( get3d("alpha") == 0 ) { 78 $alpha = $wert; 79 set3d( 1, "alpha" ); 80 } 81 else { $alpha = $alpha; } 82 } 83 elsif ( $alphaoderbeta eq "beta" ) { 84 if ( get3d("beta") == 0 ) { 85 set3d( 1, "beta" ); 86 $beta = $wert; 87 } 88 else { $beta = $beta; } 89 } 90 else { printf("%% Kein Winkel gesetzt \n"); } 91 } 92 93 sub get3dwinkel { 94 my ($alphaoderbeta) = @_; 95 if ( $alphaoderbeta eq "alpha" ) { return ($alpha); } 96 elsif ( $alphaoderbeta eq "beta" ) { return ($beta); } 97 else { return printf("%% Kein Winkel gesetzt \n"); } 98 } 99 100 sub set3dkoor { 101 my ($wert) = @_; 102 set3dzeichnen(1); 103 if ( $wert > 3 ) { $wert = 2; } 104 if ( get3d("coor") == 0 ) { 105 $coortype = $wert; 106 set3d( 1, "coor" ); 107 } 108 else { $coortype = $coortype; } 109 } 110 111 sub get3dkoor { return $coortype; } 112 113 sub set3d { 114 my ( $wert, $alphaoderbeta ) = @_; 115 set3dzeichnen(1); 116 if ( $alphaoderbeta eq "alpha" ) { $alphatrue = $wert; } 117 elsif ( $alphaoderbeta eq "beta" ) { $betatrue = $wert; } 118 elsif ( $alphaoderbeta eq "coor" ) { $coortypetrue = $wert; } 119 else { printf("%% Kein Winkel gesetzt \n"); } 120 } 121 122 sub get3d { 123 my ($alphaoderbeta) = @_; 124 if ( $alphaoderbeta eq "alpha" ) { return $alphatrue; } 125 elsif ( $alphaoderbeta eq "beta" ) { return $betatrue; } 126 elsif ( $alphaoderbeta eq "coor" ) { return $coortypetrue; } 127 else { return printf("%% Kein Winkel gesetzt \n"); } 128 } 129 130 sub x3d { 131 my ( $x, $y, $z ) = @_; 132 set3dzeichnen(1); 133 if ( ( istzahl($x) == 1 ) && ( istzahl($y) == 1 ) && ( istzahl($z) == 1 ) ) 134 { 135 if ( $coortype == 0 ) { 136 return nachkommastellen( 137 -( 138 $x + 139 getskalierung("x") * 140 cos( degtorad( get3dwinkel("alpha") ) ) 141 ) + 142 $y * 143 getskalierung("y") * 144 sin( degtorad( get3dwinkel("alpha") ) ), 145 4 146 ); 147 } 148 elsif ( $coortype == 1 ) { 149 return nachkommastellen( 150 ( 151 $y * 152 getskalierung("y") - 153 $x * 154 getskalierung("x") * 155 sin( degtorad( get3dwinkel("alpha") ) - degtorad(90) ) 156 ), 157 4 158 ); 159 } 160 elsif ( $coortype == 2 ) { 161 return nachkommastellen( 162 ( $y * getskalierung("y") - ( 0.5 * $x * getskalierung("x") ) ), 163 4 164 ); 165 } 166 elsif ( $coortype == 3 ) { 167 return nachkommastellen( 168 $y * getskalierung("y") + ( 0.5 * $x * getskalierung("x") ), 169 4 ); 170 } 171 else { return "ERROR"; } 172 } 173 else { return "ERROR"; } 174 } 175 176 sub y3d { 177 my ( $x, $y, $z ) = @_; 178 179 set3dzeichnen(1); 180 if ( ( istzahl($x) == 1 ) && ( istzahl($y) == 1 ) && ( istzahl($z) == 1 ) ) 181 { 182 if ( $coortype == 0 ) { 183 return nachkommastellen( 184 -( 185 $x * 186 getskalierung("x") * 187 sin( degtorad( get3dwinkel("alpha") ) ) + 188 $y * 189 getskalierung("y") * 190 cos( degtorad( get3dwinkel("alpha") ) ) 191 ) * 192 sin( degtorad( get3dwinkel("beta") ) ) + 193 $z * 194 getskalierung("z") * 195 cos( degtorad( get3dwinkel("beta") ) ), 196 4 197 ); 198 } 199 elsif ( $coortype == 1 ) { 200 return nachkommastellen( 201 $z * 202 getskalierung("z") - 203 $x * 204 getskalierung("x") * 205 cos( degtorad( get3dwinkel("alpha") ) - degtorad(90) ), 206 4 207 ); 208 } 209 elsif ( $coortype == 2 ) { 210 return nachkommastellen( 211 ( $z * getskalierung("z") - ( 0.5 * $x * getskalierung("x") ) ), 212 4 213 ); 214 } 215 elsif ( $coortype == 3 ) { 216 return nachkommastellen( 217 $z * getskalierung("z") + ( 0.5 * $x * getskalierung("x") ), 218 4 ); 219 } 220 else { return "ERROR"; } 221 } 222 else { return "ERROR"; } 223 } 224 225 ################################################################# 226 # Hilfsfunktionen fuer 3d 227 ################################################################# 228 229 sub calcfunk3d { 230 my $funktionsausdruck = shift; 231 my $variablex = shift; 232 my $wertx = shift; 233 my $variabley = shift; 234 my $werty = shift; 235 my @ergebnis = regelwerk( tokenizer($funktionsausdruck) ); 236 237 return rechenbaum_ausrechnen( 238 $ergebnis[0]{'Baum'}, 239 { 240 $variablex => $wertx, 241 $variabley => $werty, 242 'pi' => pi(), 243 'e' => exp(1) 244 } 245 ); 246 247 } 248 249 # Berechnet den maximalen undminimalen z-Wert 250 sub calczminmax { 251 my ( $func, $xminwert, $yminwert, $xmaxwert, $ymaxwert, $minmax ) = @_; 252 my ( $bereichmin, $bereichmax, $schrittx, $schritty, $xsuche, $ysuche, 253 $zsuche, $schrittanzahl ); 254 $schrittanzahl = 50; 255 256 $bereichmin = $bereichmax = 0; 257 258 for ( $schrittx = 0 ; $schrittx < $schrittanzahl ; $schrittx++ ) { 259 $xsuche = $xminwert + 260 ( $xmaxwert - $xminwert ) * ( $schrittx / ( $schrittanzahl - 1 ) ); 261 for ( $schritty = 0 ; $schritty < $schrittanzahl ; $schritty++ ) { 262 $ysuche = 263 $yminwert + 264 ( $ymaxwert - $yminwert ) * 265 ( $schritty / ( $schrittanzahl - 1 ) ); 266 267 $zsuche = calcfunk3d( $func, "x", $xsuche, "y", $ysuche ); 268 if ( $zsuche < $bereichmin ) { $bereichmin = $zsuche; } 269 if ( $zsuche > $bereichmax ) { $bereichmax = $zsuche; } 270 } 271 } 272 273 return sprintf( "%0.4f", $bereichmin ) if ( $minmax eq "min" ); 274 return sprintf( "%0.4f", $bereichmax ) if ( $minmax eq "max" ); 275 printf( "calcxminmax: Unbekannter Parameter minmax='%s'\n", $minmax ); 276 } 277 278 sub calczmin { 279 my ( $func, $xminwert, $xmaxwert, $yminwert, $ymaxwert ) = @_; 280 281 return sprintf( "%0.4f", 282 calczminmax( $func, $xminwert, $yminwert, $xmaxwert, $ymaxwert, "min" ) 283 ); 284 } 285 286 sub calczmax { 287 my ( $func, $xminwert, $xmaxwert, $yminwert, $ymaxwert ) = @_; 288 return sprintf( "%0.4f", 289 calczminmax( $func, $xminwert, $yminwert, $xmaxwert, $ymaxwert, "max" ) 290 ); 291 } 292 293 $xmin = $ymin = $xmax = $ymax = $zmin = $zmax = 0; 294 $erstex1 = $erstex2 = $erstey1 = $erstey2 = $erstez1 = $erstez2 = 0; 295 296 #package dateierzeugen; 297 # Minimum und Maximum setzen 298 sub setminmax3d { 299 my ( $min, $xyz, $minmax ) = @_; 300 if ( $xyz eq "x" ) { 301 if ( $minmax eq "min" ) { $xmin = $min; } 302 else { $xmax = $min; } 303 } 304 if ( $xyz eq "y" ) { 305 if ( $minmax eq "min" ) { $ymin = $min; } 306 else { $ymax = $min; } 307 } 308 if ( $xyz eq "z" ) { 309 if ( $minmax eq "min" ) { $zmin = $min; } 310 else { $zmax = $min; } 311 } 312 313 } 314 315 sub getminmax3d { 316 my ( $xyz, $minmax ) = @_; 317 if ( $xyz eq "x" ) { 318 if ( $minmax eq "min" ) { return sprintf( "%0.4f", $xmin ); } 319 else { return sprintf( "%0.4f", $xmax ); } 320 } 321 if ( $xyz eq "y" ) { 322 if ( $minmax eq "min" ) { return sprintf( "%0.4f", $ymin ); } 323 else { return sprintf( "%0.4f", $ymax ); } 324 } 325 if ( $xyz eq "z" ) { 326 if ( $minmax eq "min" ) { return sprintf( "%0.4f", $zmin ); } 327 else { return sprintf( "%0.4f", $zmax ); } 328 } 329 330 } 331 332 sub grenzen3d { 333 my ( $x, $y, $z ) = @_; 334 minmax3d( $x, $y, $z, $x, $y, $z ); 335 } 336 337 sub minmax3d { 338 my ( $x1, $y1, $z1, $x2, $y2, $z2 ) = @_; 339 340 if ( istzahl($x1) == 1 ) { 341 if ( $erstex1 == 0 ) { 342 setminmax3d( $x1, "x", "min" ); 343 $erstex1 = 1; 344 } 345 else { 346 if ( $x1 < getminmax3d( "x", "min" ) ) { 347 setminmax3d( $x1, "x", "min" ); 348 } 349 } 350 } 351 if ( istzahl($x2) == 1 ) { 352 if ( $erstex2 == 0 ) { 353 setminmax( $x2, "x", "max" ); 354 $erstex2 = 1; 355 } 356 else { 357 if ( $x2 > getminmax3d( "x", "max" ) ) { 358 setminmax3d( $x2, "x", "max" ); 359 } 360 } 361 } 362 if ( istzahl($y1) == 1 ) { 363 if ( $erstey1 == 0 ) { 364 setminmax3d( $y1, "y", "min" ); 365 $erstex1 = 1; 366 } 367 else { 368 if ( $y1 < getminmax3d( "y", "min" ) ) { 369 setminmax3d( $y1, "y", "min" ); 370 } 371 } 372 } 373 if ( istzahl($y2) == 1 ) { 374 if ( $erstey2 == 0 ) { 375 setminmax( $y2, "y", "max" ); 376 $erstey2 = 1; 377 } 378 else { 379 if ( $y2 > getminmax3d( "y", "max" ) ) { 380 setminmax3d( $y2, "y", "max" ); 381 } 382 } 383 } 384 if ( istzahl($z1) == 1 ) { 385 if ( $erstez1 == 0 ) { 386 setminmax3d( $z1, "z", "min" ); 387 $erstez1 = 1; 388 } 389 else { 390 if ( $z1 < getminmax3d( "z", "min" ) ) { 391 setminmax3d( $z1, "z", "min" ); 392 } 393 } 394 } 395 if ( istzahl($z2) == 1 ) { 396 if ( $erstez2 == 0 ) { 397 setminmax( $z2, "z", "max" ); 398 $erstez2 = 1; 399 } 400 else { 401 if ( $z2 > getminmax3d( "z", "max" ) ) { 402 setminmax3d( $z2, "z", "max" ); 403 } 404 } 405 } 406 407 if ( ( istzahl($x1) == 0 ) 408 && ( istzahl($y1) == 1 ) 409 && ( istzahl($z1) == 1 ) ) 410 { 411 412 minmax( 413 x3d( $x1, 0, 0 ), 414 y3d( $x1, 0, 0 ), 415 x3d( $x1, 0, $z1 ), 416 y3d( $x1, 0, 0 ) 417 ); 418 minmax( 419 x3d( 0, $y1, 0 ), 420 y3d( 0, $y1, 0 ), 421 x3d( 0, $y1, 0 ), 422 y3d( 0, $y1, 0 ) 423 ); 424 minmax( 425 x3d( 0, 0, $z1 ), 426 y3d( 0, 0, $z1 ), 427 x3d( 0, 0, $z1 ), 428 y3d( 0, 0, $z1 ) 429 ); 430 minmax( 431 x3d( 0, $y1, $z1 ), 432 y3d( 0, $y1, $z1 ), 433 x3d( 0, $y1, $z1 ), 434 y3d( 0, $y1, $z1 ) 435 ); 436 minmax( 437 x3d( $x1, 0, $z1 ), 438 y3d( $x1, 0, $z1 ), 439 x3d( $x1, 0, $z1 ), 440 y3d( $x1, 0, $z1 ) 441 ); 442 minmax( 443 x3d( $x1, $y1, 0 ), 444 y3d( $x1, $y1, 0 ), 445 x3d( $x1, $y1, 0 ), 446 y3d( $x1, $y1, 0 ) 447 ); 448 minmax( 449 x3d( $x1, $y1, $z1 ), 450 y3d( $x1, $y1, $z1 ), 451 x3d( $x1, $y1, $z1 ), 452 y3d( $x1, $y1, $z1 ) 453 ); 454 } 455 if ( ( istzahl($x2) == 1 ) 456 && ( istzahl($y2) == 1 ) 457 && ( istzahl($z2) == 1 ) ) 458 { 459 minmax( 460 x3d( $x2, 0, 0 ), 461 y3d( $x2, 0, 0 ), 462 x3d( $x2, 0, $z2 ), 463 y3d( $x2, 0, 0 ) 464 ); 465 minmax( 466 x3d( 0, $y2, 0 ), 467 y3d( 0, $y2, 0 ), 468 x3d( 0, $y2, 0 ), 469 y3d( 0, $y2, 0 ) 470 ); 471 minmax( 472 x3d( 0, 0, $z2 ), 473 y3d( 0, 0, $z2 ), 474 x3d( 0, 0, $z2 ), 475 y3d( 0, 0, $z2 ) 476 ); 477 minmax( 478 x3d( 0, $y2, $z2 ), 479 y3d( 0, $y2, $z2 ), 480 x3d( 0, $y2, $z2 ), 481 y3d( 0, $y2, $z2 ) 482 ); 483 minmax( 484 x3d( $x2, 0, $z2 ), 485 y3d( $x2, 0, $z2 ), 486 x3d( $x2, 0, $z2 ), 487 y3d( $x2, 0, $z2 ) 488 ); 489 minmax( 490 x3d( $x2, $y2, 0 ), 491 y3d( $x2, $y2, 0 ), 492 x3d( $x2, $y2, 0 ), 493 y3d( $x2, $y2, 0 ) 494 ); 495 minmax( 496 x3d( $x2, $y2, $z2 ), 497 y3d( $x2, $y2, $z2 ), 498 x3d( $x2, $y2, $z2 ), 499 y3d( $x2, $y2, $z2 ) 500 ); 501 } 502 503 } 504 505 my ( 506 $xminachse, $xmaxachse, $yminachse, $ymaxachse, $zminachse, $zmaxachse, 507 $xsetzen1, $xsetzen2, $ysetzen1, $ysetzen2, $zsetzen1, $zsetzen2 508 ); 509 510 $xminachse = $xmaxachse = $yminachse = $ymaxachse = $zminachse = $zmaxachse = 511 $xsetzen1 = $xsetzen2 = $ysetzen1 = $ysetzen2 = $zsetzen1 = $zsetzen2 = 0; 512 513 sub setachsengraph3d { 514 my ( $x1, $y1, $z1, $x2, $y2, $z2 ) = @_; 515 516 if ( ( istzahl($x1) == 1 ) 517 && ( istzahl($y1) == 1 ) 518 && ( istzahl($z1) == 1 ) 519 && ( istzahl($x2) == 1 ) 520 && ( istzahl($y2) == 1 ) 521 && ( istzahl($z2) == 1 ) ) 522 { 523 524 if ( $xsetzen1 == 0 ) { 525 $xminachse = $x1; 526 $xsetzen1 = 1; 527 } 528 else { $xminachse = abrunden( min( $xminachse, $x1 ), 1 ); } 529 530 if ( $xsetzen2 == 0 ) { 531 $xmaxachse = $x2; 532 $xsetzen2 = 1; 533 } 534 else { $xmaxachse = aufrunden( max( $xmaxachse, $x2 ), 1 ); } 535 536 if ( $ysetzen1 == 0 ) { 537 $yminachse = $y1; 538 $ysetzen1 = 1; 539 } 540 else { $yminachse = abrunden( min( $yminachse, $y1 ), 1 ); } 541 if ( $ysetzen2 == 0 ) { 542 $ymaxachse = $y2; 543 $ysetzen2 = 1; 544 } 545 else { $ymaxachse = aufrunden( max( $ymaxachse, $y2 ), 1 ); } 546 547 if ( $zsetzen1 == 0 ) { 548 $zminachse = $z1; 549 $zsetzen1 = 1; 550 } 551 else { $zminachse = abrunden( min( $zminachse, $z1 ), 1 ); } 552 553 if ( $zsetzen2 == 0 ) { 554 $zmaxachse = $z2; 555 $zsetzen2 = 1; 556 } 557 else { $zmaxachse = aufrunden( max( $zmaxachse, $z2 ), 1 ); } 558 } 559 } 560 561 sub getachsengraph3d { 562 my ($text) = @_; 563 if ( $text eq "xmin" ) { return $xminachse; } 564 if ( $text eq "ymin" ) { return $yminachse; } 565 if ( $text eq "zmin" ) { return $zminachse; } 566 if ( $text eq "xmax" ) { return $xmaxachse; } 567 if ( $text eq "ymax" ) { return $ymaxachse; } 568 if ( $text eq "zmax" ) { return $zmaxachse; } 569 } 570 571 ################################################################## 572 ########### Berechnungen fuer Vektoren 573 ################################################################## 574 sub calcendpunktx3d { 575 my ( $x, $laenge, $w1, $w2 ) = @_; 576 set3dzeichnen(1); 577 return $x + cos( degtorad($w2) ) * $laenge * cos( degtorad($w1) ); 578 } 579 580 sub calcendpunkty3d { 581 my ( $y, $laenge, $w1, $w2 ) = @_; 582 set3dzeichnen(1); 583 return $y + sin( degtorad($w2) ) * $laenge * cos( degtorad($w1) ); 584 585 } 586 587 sub calcendpunktz3d { 588 my ( $z, $laenge, $w1, $w2 ) = @_; 589 set3dzeichnen(1); 590 return $z + sin( degtorad($w1) ) * $laenge; 591 592 } 593 594 ################################################################# 595 # Gitter im 3d 596 ################################################################# 597 sub kariert3d { 598 my ( 599 $layer, $farbe, $linienstaerke, $linienart, 600 $xmin, $ymin, $zmin, $xmax, 601 $ymax, $zmax, $abstandx, $dickx, 602 $ganzdickx, $abstandy, $dicky, $ganzdicky, 603 $abstandz, $dickz, $ganzdickz, 604 ) = @_; 605 606 my $knotenersatz = getknoten(); 607 608 setknoten(0); 609 610 my ( $i, $j, $k ); 611 612 if ( get3dpstricks() == 1 ) { 613 614 if ( $abstandx != 0 ) { 615 for ( $i = $xmin ; $i <= $xmax ; $i = $i + $abstandx ) { 616 minmax3d( $i, 0, $zmin, $i, 0, $zmax ); 617 minmax3d( $i, $ymin, 0, $i, $ymax, 0 ); 618 } 619 620 schleife( $layer, "nx", $xmin, $xmax, $abstandx ); 621 linie( $layer, "\\nx", 0, $zmin, "\\nx", 0, $zmax, $linienart, 622 $linienstaerke, $farbe, "", "" ); 623 linie( $layer, "\\nx", $ymin, 0, "\\nx", $ymax, 0, $linienart, 624 $linienstaerke, $farbe, "", "" ); 625 schleifenende($layer); 626 } 627 628 if ( $dickx != 0 ) { 629 schleife( $layer, "nx", $xmin, $xmax, $dickx ); 630 linie( $layer, "\\nx", 0, $zmin, "\\nx", 0, $zmax, $linienart, 631 $linienstaerke, $farbe, "", "" ); 632 linie( $layer, "\\nx", $ymin, 0, "\\nx", $ymax, 0, $linienart, 633 $linienstaerke, $farbe, "", "" ); 634 schleifenende($layer); 635 } 636 if ( $ganzdickx != 0 ) { 637 638 schleife( $layer, "nx", $xmin, $xmax, $ganzdickx ); 639 linie( $layer, "\\nx", 0, $zmin, "\\nx", 0, $zmax, $linienart, 640 $linienstaerke, $farbe, "", "" ); 641 linie( $layer, "\\nx", $ymin, 0, "\\nx", $ymax, 0, $linienart, 642 $linienstaerke, $farbe, "", "" ); 643 schleifenende($layer); 644 } 645 646 if ( $abstandy != 0 ) { 647 for ( $i = $ymin ; $i <= $ymax ; $i = $i + $abstandy ) { 648 minmax3d( 0, $i, $zmin, 0, $i, $zmax ); 649 minmax3d( $xmin, $i, 0, $xmax, $i, 0 ); 650 } 651 schleife( $layer, "ny", $ymin, $ymax, $abstandy ); 652 linie( $layer, 0, "\\ny", $zmin, 0, "\\ny", $zmax, $linienart, 653 $linienstaerke, $farbe, "", "" ); 654 linie( $layer, $xmin, "\\ny", 0, $xmax, "\\ny", 0, $linienart, 655 $linienstaerke, $farbe, "", "" ); 656 schleifenende($layer); 657 } 658 659 if ( $dicky != 0 ) { 660 schleife( $layer, "ny", $ymin, $ymax, $dicky ); 661 linie( $layer, 0, "\\ny", $zmin, 0, "\\ny", $zmax, $linienart, 662 $linienstaerke, $farbe, "", "" ); 663 linie( $layer, $xmin, "\\ny", 0, $xmax, "\\ny", 0, $linienart, 664 $linienstaerke, $farbe, "", "" ); 665 schleifenende($layer); 666 667 } 668 if ( $ganzdicky != 0 ) { 669 schleife( $layer, "ny", $ymin, $ymax, $ganzdicky ); 670 linie( $layer, 0, "\\ny", $zmin, 0, "\\ny", $zmax, $linienart, 671 $linienstaerke, $farbe, "", "" ); 672 linie( $layer, $xmin, "\\ny", 0, $xmax, "\\ny", 0, $linienart, 673 $linienstaerke, $farbe, "", "" ); 674 schleifenende($layer); 675 } 676 677 if ( $abstandz != 0 ) { 678 for ( $i = $zmin ; $i <= $zmax ; $i = $i + $abstandz ) { 679 minmax3d( 0, $ymin, $i, 0, $ymax, $i ); 680 minmax3d( $xmin, 0, $i, $xmax, 0, $i ); 681 } 682 schleife( $layer, "nz", $zmin, $zmax, $abstandz ); 683 linie( $layer, 0, $ymin, "\\nz", 0, $ymax, "\\nz", $linienart, 684 $linienstaerke, $farbe, "", "" ); 685 linie( $layer, $xmin, 0, "\\nz", $xmax, 0, "\\nz", $linienart, 686 $linienstaerke, $farbe, "", "" ); 687 schleifenende($layer); 688 } 689 if ( $dickz != 0 ) { 690 schleife( $layer, "nz", $zmin, $zmax, $dickz ); 691 linie( $layer, 0, $ymin, "\\nz", 0, $ymax, "\\nz", $linienart, 692 $linienstaerke, $farbe, "", "" ); 693 linie( $layer, $xmin, 0, "\\nz", $xmax, 0, "\\nz", $linienart, 694 $linienstaerke, $farbe, "", "" ); 695 schleifenende($layer); 696 697 } 698 if ( $ganzdickz != 0 ) { 699 schleife( $layer, "nz", $zmin, $zmax, $ganzdickz ); 700 linie( $layer, 0, $ymin, "\\nz", 0, $ymax, "\\nz", $linienart, 701 $linienstaerke, $farbe, "", "" ); 702 linie( $layer, $xmin, 0, "\\nz", $xmax, 0, "\\nz", $linienart, 703 $linienstaerke, $farbe, "", "" ); 704 schleifenende($layer); 705 706 } 707 708 } 709 else { 710 if ( $abstandx != 0 ) { 711 for ( $i = $xmin ; $i <= $xmax ; $i = $i + $abstandx ) { 712 linie( $layer, $i, 0, $zmin, $i, 0, $zmax, $linienart, 713 $linienstaerke, $farbe, "", "" ); 714 linie( $layer, $i, $ymin, 0, $i, $ymax, 0, $linienart, 715 $linienstaerke, $farbe, "", "" ); 716 } 717 } 718 if ( $dickx != 0 ) { 719 for ( $i = $xmin ; $i <= $xmax ; $i = $i + $dickx ) { 720 linie( $layer, $i, 0, $zmin, $i, 0, $zmax, $linienart, 721 $linienstaerke, $farbe, "", "" ); 722 linie( $layer, $i, $ymin, 0, $i, $ymax, 0, $linienart, 723 $linienstaerke, $farbe, "", "" ); 724 } 725 } 726 if ( $ganzdickx != 0 ) { 727 for ( $i = $xmin ; $i <= $xmax ; $i = $i + $ganzdickx ) { 728 linie( $layer, $i, 0, $zmin, $i, 0, $zmax, $linienart, 729 $linienstaerke, $farbe, "", "" ); 730 linie( $layer, $i, $ymin, 0, $i, $ymax, 0, $linienart, 731 $linienstaerke, $farbe, "", "" ); 732 } 733 } 734 735 if ( $abstandy != 0 ) { 736 for ( $i = $ymin ; $i <= $ymax ; $i = $i + $abstandy ) { 737 linie( $layer, 0, $i, $zmin, 0, $i, $zmax, $linienart, 738 $linienstaerke, $farbe, "", "" ); 739 linie( $layer, $xmin, $i, 0, $xmax, $i, 0, $linienart, 740 $linienstaerke, $farbe, "", "" ); 741 } 742 } 743 if ( $dicky != 0 ) { 744 for ( $i = $ymin ; $i <= $ymax ; $i = $i + $dicky ) { 745 linie( $layer, 0, $i, $zmin, 0, $i, $zmax, $linienart, 746 $linienstaerke, $farbe, "", "" ); 747 linie( $layer, $xmin, $i, 0, $xmax, $i, 0, $linienart, 748 $linienstaerke, $farbe, "", "" ); 749 } 750 } 751 if ( $ganzdicky != 0 ) { 752 for ( $i = $ymin ; $i <= $ymax ; $i = $i + $ganzdicky ) { 753 linie( $layer, 0, $i, $zmin, 0, $i, $zmax, $linienart, 754 $linienstaerke, $farbe, "", "" ); 755 linie( $layer, $xmin, $i, 0, $xmax, $i, 0, $linienart, 756 $linienstaerke, $farbe, "", "" ); 757 } 758 } 759 760 if ( $abstandz != 0 ) { 761 for ( $i = $zmin ; $i <= $zmax ; $i = $i + $abstandz ) { 762 linie( $layer, 0, $ymin, $i, 0, $ymax, $i, $linienart, 763 $linienstaerke, $farbe, "", "" ); 764 linie( $layer, $xmin, 0, $i, $xmax, 0, $i, $linienart, 765 $linienstaerke, $farbe, "", "" ); 766 } 767 } 768 if ( $dickz != 0 ) { 769 for ( $i = $zmin ; $i <= $zmax ; $i = $i + $dickz ) { 770 linie( $layer, 0, $ymin, $i, 0, $ymax, $i, $linienart, 771 $linienstaerke, $farbe, "", "" ); 772 linie( $layer, $xmin, 0, $i, $xmax, 0, $i, $linienart, 773 $linienstaerke, $farbe, "", "" ); 774 } 775 } 776 if ( $ganzdickz != 0 ) { 777 for ( $i = $zmin ; $i <= $zmax ; $i = $i + $ganzdickz ) { 778 linie( $layer, 0, $ymin, $i, 0, $ymax, $i, $linienart, 779 $linienstaerke, $farbe, "", "" ); 780 linie( $layer, $xmin, 0, $i, $xmax, 0, $i, $linienart, 781 $linienstaerke, $farbe, "", "" ); 782 } 783 } 784 } 785 setknoten($knotenersatz); 786 787 } 788 789 ################################################################# 790 # Achsen im 3d 791 ################################################################# 792 793 sub achsen3d { 794 my ( 795 $layer, $farbe, $linienstaerke, $linienart, 796 $pfeilart, $xmin, $xmax, $ymin, 797 $ymax, $zmin, $zmax, $dx, 798 $xskala, $xtext, $dy, $yskala, 799 $ytext, $dz, $zskala, $ztext 800 ) = @_; 801 802 my $knotenersatz = getknoten(); 803 804 if ( getgitter() == 1 ) { 805 kariert3d( 1, "lightgray", 0.25, "solid", $xmin, $ymin, $zmin, $xmax, 806 $ymax, $zmax, $dx, 0, 0, $dy, 0, 0, $dz, 0, 0 ); 807 setgitter(2); 808 } 809 810 setknoten(0); 811 812 setgrossskalierung3d( $xmax - $xmin, $ymax - $ymin, $zmax - $zmin ); 813 setachsengraph3d( $xmin, $ymin, $zmin, $xmax, $ymax, $zmax ); 814 815 if ( ( getgitter() == 1 ) || ( getgitter() == 3 ) ) { 816 kariert3d( $layer, "lightgray", 0.25, "solid", $xmin, $ymin, $zmin, 817 $xmax, $ymax, $zmax, $dx, 0, 0, $dy, 0, 0, $dz, 0, 0 ); 818 setgitter(2); 819 } 820 821 minmax3d( $xmin, 0, 0, $xmax, 0, 0 ); 822 minmax3d( 0, $ymin, 0, $ymax, 0, 0 ); 823 minmax3d( 0, 0, $zmin, 0, 0, $zmax ); 824 825 my ( $parameterweiter, $i, $j, $k ); 826 $parameterweiter = ""; 827 $i = $j = $k = 0; 828 829 if ( $xmin != $xmax ) { 830 for ( $i = $xmin ; $i <= $xmax + $dx ; $i = $i + $dx ) { 831 minmax3d( $i, 0, 0, $i, 0, 0 ); 832 } 833 } 834 if ( $ymin != $ymax ) { 835 for ( $i = $ymin ; $i <= $ymax + $dy ; $i = $i + $dy ) { 836 minmax3d( 0, $i, 0, 0, $i, 0 ); 837 } 838 } 839 if ( $zmin != $zmax ) { 840 for ( $i = $zmin ; $i <= $zmax + $dz ; $i = $i + $dz ) { 841 minmax3d( 0, 0, $i, 0, 0, $i ); 842 } 843 } 844 845 set3dzeichnen(1); 846 847 if ( get3dpstricks() == 1 ) { 848 849 $parameterweiter = 850 $parameterweiter 851 . "comma, " 852 . "drawing, planecorr=normal," 853 . "linecolor=" 854 . $farbe 855 . ", xMin=" 856 . nachkommastellen( $xmin, 4 ) 857 . ", xMax=" 858 . nachkommastellen( $xmax, 4 ) 859 . ", yMin=" 860 . nachkommastellen( $ymin, 4 ) 861 . ", yMax=" 862 . nachkommastellen( $ymax, 4 ) 863 . ", zMin=" 864 . nachkommastellen( $zmin, 4 ) 865 . ", zMax=" 866 . nachkommastellen( $zmax, 4 ) 867 . ", nameX=" 868 . $xtext 869 . ", nameY=" 870 . $ytext 871 . ", nameZ=" 872 . $ztext; 873 874 if ( get3dpstricks() == 1 ) { 875 876 my $hilfsdicke = $markierungsdicke; 877 $markierungsdicke = 0; 878 879 if ( $xmin != $xmax ) { 880 for ( $i = ( 0 + $dx ) ; $i < $xmax ; $i = $i + $dx ) { 881 xstrich3d( $layer, $i, $farbe ); 882 } 883 for ( $i = ( 0 - $dx ) ; $i > $xmin ; $i = $i - $dx ) { 884 xstrich3d( $layer, $i, $farbe ); 885 } 886 } 887 if ( $ymin != $ymax ) { 888 for ( $j = ( 0 + $dy ) ; $j < $ymax ; $j = $j + $dy ) { 889 ystrich3d( $layer, $j, $farbe ); 890 } 891 for ( $j = ( 0 - $dy ) ; $j > $ymin ; $j = $j - $dy ) { 892 ystrich3d( $layer, $j, $farbe ); 893 } 894 } 895 if ( $zmin != $zmax ) { 896 for ( $k = ( 0 + $dz ) ; $k < $zmax ; $k = $k + $dz ) { 897 zstrich3d( $layer, $k, $farbe ); 898 } 899 for ( $k = ( 0 - $dz ) ; $k > $zmin ; $k = $k - $dz ) { 900 zstrich3d( $layer, $k, $farbe ); 901 } 902 } 903 $markierungsdicke = $hilfsdicke; 904 905 if ( $xskala eq "normal" ) { 906 907 if ( $xmin != $xmax ) { 908 if ( $xmax != 0 ) { 909 schleife( $layer, "nx", 0 + $dx, $xmax - $dx, $dx ); 910 xmarkierung3d( $layer, "\\nx", "\\nx", $farbe ); 911 schleifenende($layer); 912 913 } 914 if ( $xmin != 0 ) { 915 schleife( $layer, "nx", 0 - $dx, $xmin + $dx, -$dx ); 916 xmarkierung3d( $layer, "\\nx", "\\nx", $farbe ); 917 schleifenende($layer); 918 } 919 } 920 921 if ( $ymin != $ymax ) { 922 if ( $ymax != 0 ) { 923 schleife( $layer, "ny", 0 + $dy, $ymax - $dy, $dy ); 924 ymarkierung3d( $layer, "\\ny", "\\ny", $farbe ); 925 schleifenende($layer); 926 } 927 if ( $ymin != 0 ) { 928 929 schleife( $layer, "ny", 0 - $dy, $ymin + $dy, -$dy ); 930 ymarkierung3d( $layer, "\\ny", "\\ny", $farbe ); 931 schleifenende($layer); 932 } 933 } 934 if ( $zmin != $zmax ) { 935 if ( $zmax != 0 ) { 936 schleife( $layer, "nz", 0 + $dz, $zmax - $dz, $dz ); 937 zmarkierung3d( $layer, "\\nz", "\\nz", $farbe ); 938 schleifenende($layer); 939 } 940 if ( $zmin != 0 ) { 941 schleife( $layer, "nz", 0 - $dz, $zmin + $dz, -$dz ); 942 zmarkierung3d( $layer, "\\nz", "\\nz", $farbe ); 943 schleifenende($layer); 944 } 945 } 946 } 947 elsif ( $xskala eq "nurstriche" ) { 948 949 if ( $xmin != $xmax ) { 950 951 if ( $xmax != 0 ) { 952 schleife( $layer, "nx", 0 + $dx, $xmax - $dx, $dx ); 953 xstrich3d( $layer, "\\nx", $farbe ); 954 schleifenende($layer); 955 } 956 if ( $xmin != 0 ) { 957 schleife( $layer, "nx", 0 - $dx, $xmin + $dx, -$dx ); 958 xstrich3d( $layer, "\\nx", $farbe ); 959 schleifenende($layer); 960 } 961 } 962 if ( $ymin != $ymax ) { 963 if ( $ymax != 0 ) { 964 schleife( $layer, "ny", 0 + $dy, $ymax - $dy, $dy ); 965 ystrich3d( $layer, "\\ny", $farbe ); 966 schleifenende($layer); 967 } 968 if ( $ymin != 0 ) { 969 schleife( $layer, "ny", 0 - $dy, $ymin + $dy, -$dy ); 970 ystrich3d( $layer, "\\ny", $farbe ); 971 schleifenende($layer); 972 } 973 } 974 if ( $zmin != $zmax ) { 975 if ( $zmax != 0 ) { 976 schleife( $layer, "nz", 0 + $dz, $zmax - $dz, $dz ); 977 zstrich3d( $layer, "\\nz", $farbe ); 978 schleifenende($layer); 979 } 980 if ( $zmin != 0 ) { 981 schleife( $layer, "nz", 0 - $dz, $zmin + $dz, -$dz ); 982 zstrich3d( $layer, "\\nz", $farbe ); 983 schleifenende($layer); 984 } 985 } 986 } 987 elsif ( $xskala eq "nureins" ) { 988 if ( $xmin != $xmax ) { 989 xmarkierung3d( $layer, 1, 1, $farbe ); 990 } 991 if ( $ymin != $ymax ) { 992 ymarkierung3d( $layer, 1, 1, $farbe ); 993 } 994 if ( $zmin != $zmax ) { 995 zmarkierung3d( $layer, 1, 1, $farbe ); 996 } 997 998 } 999 elsif ( $xskala eq "nurstrichundeins" ) { 1000 1001 if ( $xmin != $xmax ) { 1002 1003 if ( $xmax != 0 ) { 1004 schleife( $layer, "nx", 0 + $dx, $xmax - $dx, $dx ); 1005 xstrich3d( $layer, "\\nx", "\\nx", $farbe ); 1006 schleifenende($layer); 1007 } 1008 if ( $xmin != 0 ) { 1009 schleife( $layer, "nx", 0 - $dx, $xmin + $dx, -$dx ); 1010 xstrich3d( $layer, "\\nx", "\\nx", $farbe ); 1011 schleifenende($layer); 1012 } 1013 } 1014 if ( $ymin != $ymax ) { 1015 if ( $ymax != 0 ) { 1016 schleife( $layer, "ny", 0 + $dy, $ymax - $dy, $dy ); 1017 ystrich3d( $layer, "\\ny", "\\ny", $farbe ); 1018 schleifenende($layer); 1019 } 1020 if ( $ymin != 0 ) { 1021 schleife( $layer, "ny", 0 - $dy, $ymin + $dy, -$dy ); 1022 ystrich3d( $layer, "\\ny", "\\ny", $farbe ); 1023 schleifenende($layer); 1024 } 1025 } 1026 if ( $zmin != $zmax ) { 1027 if ( $zmax != 0 ) { 1028 schleife( $layer, "nz", 0 + $dz, $ymax - $dz, $dz ); 1029 zstrich3d( $layer, "\\nz", "\\nz", $farbe ); 1030 schleifenende($layer); 1031 } 1032 if ( $zmin != 0 ) { 1033 schleife( $layer, "nz", 0 - $dz, $zmin + $dz, -$dz ); 1034 zstrich3d( $layer, "\\nz", "\\nz", $farbe ); 1035 schleifenende($layer); 1036 } 1037 } 1038 if ( $xmin != $xmax ) { 1039 xmarkierung3d( $layer, 1, 1, $farbe ); 1040 } 1041 if ( $ymin != $ymax ) { 1042 ymarkierung3d( $layer, 1, 1, $farbe ); 1043 } 1044 if ( $zmin != $zmax ) { 1045 zmarkierung3d( $layer, 1, 1, $farbe ); 1046 } 1047 } 1048 1049 } 1050 else { 1051 if ( $xskala eq "normal" ) { 1052 if ( $xmin != $xmax ) { 1053 for ( $i = ( 0 + $dx ) ; $i < $xmax ; $i = $i + $dx ) { 1054 xmarkierung3d( $layer, $i, $i, $farbe ); 1055 } 1056 for ( $i = ( 0 - $dx ) ; $i > $xmin ; $i = $i - $dx ) { 1057 xmarkierung3d( $layer, $i, $i, $farbe ); 1058 } 1059 } 1060 if ( $ymin != $ymax ) { 1061 for ( $j = ( 0 + $dy ) ; $j < $ymax ; $j = $j + $dy ) { 1062 ymarkierung3d( $layer, $j, $j, $farbe ); 1063 } 1064 for ( $j = ( 0 - $dy ) ; $j > $ymin ; $j = $j - $dy ) { 1065 ymarkierung3d( $layer, $j, $j, $farbe ); 1066 } 1067 } 1068 if ( $zmin != $zmax ) { 1069 for ( $k = ( 0 + $dz ) ; $k < $zmax ; $k = $k + $dz ) { 1070 zmarkierung3d( $layer, $k, $k, $farbe ); 1071 } 1072 for ( $k = ( 0 - $dz ) ; $k > $zmin ; $k = $k - $dz ) { 1073 zmarkierung3d( $layer, $k, $k, $farbe ); 1074 } 1075 } 1076 } 1077 elsif ( $xskala eq "nurstriche" ) { 1078 if ( $xmin != $xmax ) { 1079 for ( $i = ( 0 + $dx ) ; $i < $xmax ; $i = $i + $dx ) { 1080 xstrich3d( $layer, $i, $farbe ); 1081 } 1082 for ( $i = ( 0 - $dx ) ; $i > $xmin ; $i = $i - $dx ) { 1083 xstrich3d( $layer, $i, $farbe ); 1084 } 1085 } 1086 if ( $ymin != $ymax ) { 1087 for ( $j = ( 0 + $dy ) ; $j < $ymax ; $j = $j + $dy ) { 1088 ystrich3d( $layer, $j, $farbe ); 1089 } 1090 for ( $j = ( 0 - $dy ) ; $j > $ymin ; $j = $j - $dy ) { 1091 ystrich3d( $layer, $j, $farbe ); 1092 } 1093 } 1094 if ( $zmin != $zmax ) { 1095 for ( $k = ( 0 + $dz ) ; $k < $zmax ; $k = $k + $dz ) { 1096 zstrich3d( $layer, $k, $farbe ); 1097 } 1098 for ( $k = ( 0 - $dz ) ; $k > $zmin ; $k = $k - $dz ) { 1099 zstrich3d( $layer, $k, $farbe ); 1100 } 1101 } 1102 } 1103 elsif ( $xskala eq "nureins" ) { 1104 if ( $xmin != $xmax ) { 1105 xmarkierung3d( $layer, 1, 1, $farbe ); 1106 } 1107 if ( $ymin != $ymax ) { 1108 ymarkierung3d( $layer, 1, 1, $farbe ); 1109 } 1110 if ( $zmin != $zmax ) { 1111 zmarkierung3d( $layer, 1, 1, $farbe ); 1112 } 1113 1114 } 1115 elsif ( $xskala eq "strichundeins" ) { 1116 for ( $i = ( 0 + $dx ) ; $i < $xmax ; $i = $i + $dx ) { 1117 if ( $i == 1 ) { xmarkierung3d( $layer, 1, 1, $farbe ); } 1118 else { xstrich3d( $layer, $i, $farbe ); } 1119 } 1120 for ( $i = ( 0 - $dx ) ; $i > $xmin ; $i = $i - $dx ) { 1121 xstrich3d( $layer, $i, $farbe ); 1122 } 1123 for ( $j = ( 0 + $dy ) ; $j < $ymax ; $j = $j + $dy ) { 1124 if ( $j == 1 ) { ymarkierung3d( $layer, 1, 1, $farbe ); } 1125 else { ystrich3d( $layer, $j, $farbe ); } 1126 } 1127 for ( $j = ( 0 - $dy ) ; $j > $ymin ; $j = $j - $dy ) { 1128 ystrich3d( $layer, $j, $farbe ); 1129 } 1130 for ( $k = ( 0 + $dz ) ; $k < $zmax ; $k = $k + $dz ) { 1131 if ( $k == 1 ) { zmarkierung3d( $layer, 1, 1, $farbe ); } 1132 else { zstrich3d( $layer, $k, $farbe ); } 1133 } 1134 for ( $k = ( 0 - $dz ) ; $k > $zmin ; $k = $k - $dz ) { 1135 zstrich3d( $layer, $k, $farbe ); 1136 } 1137 1138 } 1139 1140 else { $parameterweiter = $parameterweiter; } 1141 1142 } 1143 1144 befehlerzeugen( $layer, "pstThreeDCoor", $farbe, $linienart, 1145 $linienstaerke, $parameterweiter, "", "" ); 1146 } 1147 else { 1148 if ( $xmin != $xmax ) { 1149 if ( $xmax == 0 ) { 1150 linie( $layer, $xmin, 0, 0, $xmax, 0, 0, $linienart, 1151 $linienstaerke, $farbe, "", $pfeilart ); 1152 } 1153 else { 1154 linie( $layer, $xmin, 0, 0, $xmax, 0, 0, $linienart, 1155 $linienstaerke, $farbe, "", $pfeilart ); 1156 } 1157 } 1158 if ( $ymin != $ymax ) { 1159 if ( $ymax == 0 ) { 1160 linie( $layer, 0, $ymin, 0, 0, $ymax, 0, $linienart, 1161 $linienstaerke, $farbe, "", $pfeilart ); 1162 } 1163 else { 1164 linie( $layer, 0, $ymin, 0, 0, $ymax, 0, $linienart, 1165 $linienstaerke, $farbe, "", $pfeilart ); 1166 } 1167 } 1168 if ( $zmin != $zmax ) { 1169 if ( $zmax == 0 ) { 1170 linie( $layer, 0, 0, $zmin, 0, 0, $zmax, $linienart, 1171 $linienstaerke, $farbe, "", $pfeilart ); 1172 } 1173 else { 1174 linie( $layer, 0, 0, $zmin, 0, 0, $zmax, $linienart, 1175 $linienstaerke, $farbe, "", $pfeilart ); 1176 } 1177 } 1178 1179 if ( $xskala eq "normal" ) { 1180 if ( $xmin != $xmax ) { 1181 for ( $i = ( 0 + $dx ) ; $i < $xmax ; $i = $i + $dx ) { 1182 xmarkierung3d( $layer, $i, $i, $farbe ); 1183 } 1184 for ( $i = ( 0 - $dx ) ; $i > $xmin ; $i = $i - $dx ) { 1185 xmarkierung3d( $layer, $i, $i, $farbe ); 1186 } 1187 } 1188 if ( $ymin != $ymax ) { 1189 for ( $j = ( 0 + $dy ) ; $j < $ymax ; $j = $j + $dy ) { 1190 ymarkierung3d( $layer, $j, $j, $farbe ); 1191 } 1192 for ( $j = ( 0 - $dy ) ; $j > $ymin ; $j = $j - $dy ) { 1193 ymarkierung3d( $layer, $j, $j, $farbe ); 1194 } 1195 } 1196 if ( $zmin != $zmax ) { 1197 for ( $k = ( 0 + $dz ) ; $k < $zmax ; $k = $k + $dz ) { 1198 zmarkierung3d( $layer, $k, $k, $farbe ); 1199 } 1200 for ( $k = ( 0 - $dz ) ; $k > $zmin ; $k = $k - $dz ) { 1201 zmarkierung3d( $layer, $k, $k, $farbe ); 1202 } 1203 } 1204 } 1205 elsif ( $xskala eq "nurstriche" ) { 1206 if ( $xmin != $xmax ) { 1207 for ( $i = ( 0 + $dx ) ; $i < $xmax ; $i = $i + $dx ) { 1208 xstrich3d( $layer, $i, $farbe ); 1209 } 1210 for ( $i = ( 0 - $dx ) ; $i > $xmin ; $i = $i - $dx ) { 1211 xstrich3d( $layer, $i, $farbe ); 1212 } 1213 } 1214 if ( $ymin != $ymax ) { 1215 for ( $j = ( 0 + $dy ) ; $j < $ymax ; $j = $j + $dy ) { 1216 ystrich3d( $layer, $j, $farbe ); 1217 } 1218 for ( $j = ( 0 - $dy ) ; $j > $ymin ; $j = $j - $dy ) { 1219 ystrich3d( $layer, $j, $farbe ); 1220 } 1221 } 1222 if ( $zmin != $zmax ) { 1223 for ( $k = ( 0 + $dz ) ; $k < $zmax ; $k = $k + $dz ) { 1224 zstrich3d( $layer, $k, $farbe ); 1225 } 1226 for ( $k = ( 0 - $dz ) ; $k > $zmin ; $k = $k - $dz ) { 1227 zstrich3d( $layer, $k, $farbe ); 1228 } 1229 } 1230 } 1231 elsif ( $xskala eq "nureins" ) { 1232 if ( $xmin != $xmax ) { 1233 xmarkierung3d( $layer, 1, 1, $farbe ); 1234 } 1235 if ( $ymin != $ymax ) { 1236 ymarkierung3d( $layer, 1, 1, $farbe ); 1237 } 1238 if ( $zmin != $zmax ) { 1239 zmarkierung3d( $layer, 1, 1, $farbe ); 1240 } 1241 1242 } 1243 elsif ( $xskala eq "strichundeins" ) { 1244 for ( $i = ( 0 + $dx ) ; $i < $xmax ; $i = $i + $dx ) { 1245 if ( $i == 1 ) { xmarkierung3d( $layer, 1, 1, $farbe ); } 1246 else { xstrich3d( $layer, $i, $farbe ); } 1247 } 1248 for ( $i = ( 0 - $dx ) ; $i > $xmin ; $i = $i - $dx ) { 1249 xstrich3d( $layer, $i, $farbe ); 1250 } 1251 for ( $j = ( 0 + $dy ) ; $j < $ymax ; $j = $j + $dy ) { 1252 if ( $j == 1 ) { ymarkierung3d( $layer, 1, 1, $farbe ); } 1253 else { ystrich3d( $layer, $j, $farbe ); } 1254 } 1255 for ( $j = ( 0 - $dy ) ; $j > $ymin ; $j = $j - $dy ) { 1256 ystrich3d( $layer, $j, $farbe ); 1257 } 1258 for ( $k = ( 0 + $dz ) ; $k < $zmax ; $k = $k + $dz ) { 1259 if ( $k == 1 ) { zmarkierung3d( $layer, 1, 1, $farbe ); } 1260 else { zstrich3d( $layer, $k, $farbe ); } 1261 } 1262 for ( $k = ( 0 - $dz ) ; $k > $zmin ; $k = $k - $dz ) { 1263 zstrich3d( $layer, $k, $farbe ); 1264 } 1265 1266 } 1267 else { $parameterweiter = $parameterweiter; } 1268 1269 if ( $xmin != $xmax ) { 1270 xmarkierung3dohnelinie( $layer, $xmax, $xtext, $farbe ); 1271 } 1272 if ( $ymin != $ymax ) { 1273 ymarkierung3dohnelinie( $layer, $ymax, $ytext, $farbe ); 1274 } 1275 if ( $zmin != $zmax ) { 1276 zmarkierung3dohnelinie( $layer, $zmax, $ztext, $farbe ); 1277 } 1278 } 1279 abstand($layer); 1280 1281 setknoten($knotenersatz); 1282 1283 } 1284 1285 ################################################################# 1286 # Markierungen an der Achse 1287 ################################################################# 1288 1289 sub xmarkierung3d { 1290 my ( $layer, $x, $text, $farbe ) = @_; 1291 1292 if ( istzahl($x) == 0 ) { set3dpstricks(1); } 1293 set3dzeichnen(1); 1294 1295 xmarkierung3dohnelinie( $layer, $x, $text, $farbe ); 1296 xstrich3d( $layer, $x, $farbe ); 1297 } 1298 1299 sub xmarkierung3dohnelinie { 1300 my ( $layer, $x, $text, $farbe ) = @_; 1301 my ( $y, $z, $ausrichtung ); 1302 1303 $y = $markierungx; 1304 $z = 0; 1305 set3dzeichnen(1); 1306 beschriftung3d( $layer, $farbe, $x, $y, $z, 0, 180, $text ); 1307 1308 } 1309 1310 sub ymarkierung3d { 1311 my ( $layer, $y, $text, $farbe ) = @_; 1312 my ( $x, $z ); 1313 1314 if ( istzahl($y) == 0 ) { set3dpstricks(1); } 1315 set3dzeichnen(1); 1316 ymarkierung3dohnelinie( $layer, $y, $text, $farbe ); 1317 ystrich3d( $layer, $y, $farbe ); 1318 } 1319 1320 sub ymarkierung3dohnelinie { 1321 my ( $layer, $y, $text, $farbe ) = @_; 1322 my ( $x, $z ); 1323 $x = $markierungy; 1324 $z = 0; 1325 set3dzeichnen(1); 1326 beschriftung3d( $layer, $farbe, $x, $y, $z, 0, 270, $text ); 1327 } 1328 1329 sub zmarkierung3d { 1330 my ( $layer, $z, $text, $farbe ) = @_; 1331 1332 if ( istzahl($z) == 0 ) { set3dpstricks(1); } 1333 set3dzeichnen(1); 1334 zmarkierung3dohnelinie( $layer, $z, $text, $farbe ); 1335 zstrich3d( $layer, $z, $farbe ); 1336 } 1337 1338 sub zmarkierung3dohnelinie { 1339 my ( $layer, $z, $text, $farbe ) = @_; 1340 my ( $x, $y ); 1341 1342 $x = 0; 1343 $y = $markierungz; 1344 1345 set3dzeichnen(1); 1346 beschriftung3d( $layer, $farbe, $x, $y, $z, 0, 180, $text ); 1347 } 1348 1349 sub xstrich3d { 1350 my ( $layer, $x, $farbe ) = @_; 1351 my ( $y, $z ); 1352 $y = $strichx; 1353 $z = 0; 1354 set3dzeichnen(1); 1355 linie( $layer, $x, $y, $z, $x, -$y, $z, "solid", $markierungsdicke, $farbe, 1356 "", "" ); 1357 } 1358 1359 sub ystrich3d { 1360 my ( $layer, $y, $farbe ) = @_; 1361 my ( $x, $z ); 1362 $x = $strichy; 1363 $z = 0; 1364 set3dzeichnen(1); 1365 1366 linie( $layer, $x, $y, $z, -$x, $y, $z, "solid", $markierungsdicke, $farbe, 1367 "", "" ); 1368 } 1369 1370 sub zstrich3d { 1371 my ( $layer, $z, $farbe ) = @_; 1372 my ( $x, $y ); 1373 $x = 0; 1374 $y = $strichz; 1375 set3dzeichnen(1); 1376 linie( $layer, $x, $y, $z, $x, -$y, $z, "solid", $markierungsdicke, $farbe, 1377 "", "" ); 1378 } 1379 1380 sub beschriftung3d { 1381 my ( $layer, $farbe, $x, $y, $z, $winkel, $ausrichtung, $text ) = @_; 1382 1383 if ( istzahl($x) == 1 ) { $x = nachkommastellen( $x, 4 ); } 1384 else { set3dpstricks(1); } 1385 if ( istzahl($y) == 1 ) { $y = nachkommastellen( $y, 4 ); } 1386 else { set3dpstricks(1); } 1387 if ( istzahl($z) == 1 ) { $z = nachkommastellen( $z, 4 ); } 1388 else { set3dpstricks(1); } 1389 $text =~ tr/./,/s; 1390 1391 if ( get3dpstricks() == 1 ) { 1392 1393 if ( $winkel == 0 ) { 1394 1395 settexthier(""); 1396 if ( ( istzahl($x) == 1 ) 1397 && ( istzahl($y) == 1 ) 1398 && ( istzahl($z) == 1 ) ) 1399 { 1400 tripel( $x, $y, $z ); 1401 } 1402 else { tripelohneminmax( $x, $y, $z ); } 1403 klammer( textfarbe( $text, $farbe ) ); 1404 befehlerzeugen( $layer, "pstThreeDPut", "", "", "", "", "", 1405 gettexthier() ); 1406 settexthier(""); 1407 } 1408 else { 1409 settexthier(""); 1410 if ( ( istzahl($x) == 1 ) 1411 && ( istzahl($y) == 1 ) 1412 && ( istzahl($z) == 1 ) ) 1413 { 1414 tripel( $x, $y, $z ); 1415 } 1416 else { tripelohneminmax( $x, $y, $z ); } 1417 1418 klammer("\\uput{0}[" 1419 . $ausrichtung . "]{" 1420 . $winkel 1421 . "}(0,0){" 1422 . textfarbe( $text, $farbe ) 1423 . "}" ); 1424 befehlerzeugen( $layer, "pstThreeDPut", "", "", "", "", "", 1425 gettexthier() ); 1426 settexthier(""); 1427 } 1428 1429 } 1430 else { 1431 beschriftung( 1432 $layer, $farbe, 1433 x3d( $x, $y, $z ), 1434 y3d( $x, $y, $z ), 1435 $winkel, $ausrichtung, $text 1436 ); 1437 } 1438 1439 if ( ( istzahl($x) == 1 ) && ( istzahl($y) == 1 ) && ( istzahl($z) == 1 ) ) 1440 { 1441 my $laenge = length($text); 1442 minmax3d( 1443 $x - ($laenge), 1444 $y - ($laenge), 1445 $z - ($laenge), 1446 $x + ($laenge), 1447 $y + ($laenge), 1448 $z + ($laenge) 1449 ); 1450 } 1451 1452 } 1453 ################################################################# 1454 # Geradenfunktion 1455 ################################################################# 1456 1457 sub gerade { 1458 my ( $layer, $x1, $y1, $z1, $x2, $y2, $z2, $r1, $r2, $farbe, $linienart, 1459 $linienstaerke, $parameter, $pfeilart ) 1460 = @_; 1461 1462 if ( ( $z1 ne "" ) && ( $z2 ne "" ) ) { 1463 kommentar( $layer, 1464 "Die Gerade g: (" 1465 . $x1 . "|" 1466 . $y1 . "|" 1467 . $z1 1468 . ") + r(" 1469 . $x2 . "|" 1470 . $y2 . "|" 1471 . $z2 1472 . ")" ); 1473 linie( 1474 $layer, $x1 + $r1 * $x2, $y1 + $r1 * $y2, 1475 $z1 + $r1 * $z2, $x1 + $r2 * $x2, $y1 + $r2 * $y2, 1476 $z1 + $r2 * $z2, $linienart, $linienstaerke, 1477 $farbe, $parameter, $pfeilart 1478 ); 1479 1480 } 1481 else { 1482 kommentar( $layer, 1483 "Die Gerade g: (" 1484 . $x1 . "|" 1485 . $y1 1486 . ") + r(" 1487 . $x2 . "|" 1488 . $y2 1489 . ")" ); 1490 1491 linie( 1492 $layer, $x1 + $r1 * $x2, 1493 $y1 + $r1 * $y2, "", 1494 $x1 + $r2 * $x2, $y1 + $r2 * $y2, 1495 "", $linienart, 1496 $linienstaerke, $farbe, 1497 $parameter, $pfeilart 1498 ); 1499 1500 } 1501 1502 } 1503 1504 sub ebene { 1505 my ( 1506 $layer, $xauf, $yauf, $zauf, 1507 $xrichtung1, $yrichtung1, $zrichtung1, $xrichtung2, 1508 $yrichtung2, $zrichtung2, $r1, $r2, 1509 $r3, $r4, $farbe, $fuellart, 1510 $fuellfarbe, $linienart, $linienstaerke, $parameter 1511 ) = @_; 1512 1513 my ( $x1, $y1, $z1, $x2, $y2, $z2, $x3, $y3, $z3, $x4, $y4, $z4 ); 1514 1515 $x1 = $xauf + $r3 * $xrichtung2 + $r1 * $xrichtung1; 1516 $y1 = $yauf + $r3 * $yrichtung2 + $r1 * $yrichtung1; 1517 $z1 = $zauf + $r3 * $zrichtung2 + $r1 * $zrichtung1; 1518 1519 $x2 = $xauf + $r3 * $xrichtung2 + $r2 * $xrichtung1; 1520 $y2 = $yauf + $r3 * $yrichtung2 + $r2 * $yrichtung1; 1521 $z2 = $zauf + $r3 * $zrichtung2 + $r2 * $zrichtung1; 1522 1523 $x3 = $x1 + ( $r4 - $r3 ) * $xrichtung2; 1524 $y3 = $y1 + ( $r4 - $r3 ) * $yrichtung2; 1525 $z3 = $z1 + ( $r4 - $r3 ) * $zrichtung2; 1526 1527 $x4 = $x2 + ( $r4 - $r3 ) * $xrichtung2; 1528 $y4 = $y2 + ( $r4 - $r3 ) * $yrichtung2; 1529 $z4 = $z2 + ( $r4 - $r3 ) * $zrichtung2; 1530 1531 kommentar( $layer, 1532 "Die Ebene E: (" 1533 . $xauf . "|" 1534 . $yauf . "|" 1535 . $zauf 1536 . ") + r(" 1537 . $xrichtung1 . "|" 1538 . $yrichtung1 . "|" 1539 . $zrichtung1 1540 . ") + s(" 1541 . $xrichtung2 . "|" 1542 . $yrichtung2 . "|" 1543 . $zrichtung2 1544 . ")" ); 1545 1546 viereck( $layer, $x1, $y1, $z1, $x2, $y2, $z2, $x4, $y4, $z4, $x3, $y3, $z3, 1547 $farbe, $fuellart, $fuellfarbe, $linienart, $linienstaerke, 1548 $parameter ); 1549 1550 setachsengraph3d( $x1, $y1, $z1, $x1, $y1, $z1 ); 1551 setachsengraph3d( $x2, $y2, $z2, $x2, $y2, $z2 ); 1552 setachsengraph3d( $x3, $y3, $z3, $x3, $y3, $z3 ); 1553 setachsengraph3d( $x4, $y4, $z4, $x4, $y4, $z4 ); 1554 1555 } 1556 1557 sub ebenenormal { 1558 my ( $layer, $x1, $y1, $z1, $xn, $yn, $zn, $r1, $r2, $r3, $r4, $farbe, 1559 $fuellart, $fuellfarbe, $linienart, $linienstaerke, $parameter ) 1560 = @_; 1561 1562 kommentar( $layer, "hier" ); 1563 1564 my ( $x2, $y2, $z2, $x3, $y3, $z3 ); 1565 1566 if ( $zn == 0 ) { 1567 $z2 = 1; 1568 $x2 = 0; 1569 $y2 = 0; 1570 $z3 = 0; 1571 $x3 = -$y2; 1572 $y3 = $x3; 1573 } 1574 if ( $zn == 0 ) { 1575 $z2 = 1; 1576 $x2 = 0; 1577 $y2 = 0; 1578 $z3 = 0; 1579 $x3 = -$y2; 1580 $y3 = $x3; 1581 } 1582 elsif ( ( $zn == 0 ) && ( $yn == 0 ) ) { 1583 $x2 = $y2 = $z3 = 0; 1584 $z2 = 1; 1585 $x3 = -1; 1586 $y3 = 2; 1587 } 1588 else { 1589 $x2 = $yn; 1590 $y2 = -$xn; 1591 $z2 = 0; 1592 $x3 = 0; 1593 $y3 = $zn; 1594 $z3 = -$yn; 1595 } 1596 1597 ebene( 1598 $layer, $x1, $y1, $z1, 1599 $x2, $y2, $z2, $x3, 1600 $y3, $z3, $r1, $r2, 1601 $r3, $r4, $farbe, $fuellart, 1602 $fuellfarbe, $linienart, $linienstaerke, $parameter 1603 ); 1604 1605 } 1606 1607 sub ebenekform { 1608 my ( $layer, $a, $b, $c, $d, $n1, $n2, $farbe, $fuellart, $fuellfarbe, 1609 $linienart, $linienstaerke, $parameter ) 1610 = @_; 1611 1612 my ( $x1, $x2, $x3, $x4, $y1, $y2, $y3, $y4, $z1, $z2, $z3, $z4 ); 1613 1614 if ( ( $a == 0 ) && ( $b != 0 ) && ( $c != 0 ) ) { 1615 $x1 = 0; 1616 $y1 = $d / $b; 1617 $z1 = 0; 1618 1619 $x2 = 0; 1620 $y2 = 0; 1621 $z2 = $d / $c; 1622 1623 $x3 = $n1; 1624 $y3 = 0; 1625 $z3 = $d / $c; 1626 1627 $x4 = $n1; 1628 $y4 = $d / $b; 1629 $z4 = 0; 1630 viereck( 1631 $layer, $x1, $y1, $z1, 1632 $x2, $y2, $z2, $x3, 1633 $y3, $z3, $x4, $y4, 1634 $z4, $farbe, $fuellart, $fuellfarbe, 1635 $linienart, $linienstaerke, $parameter 1636 ); 1637 1638 } 1639 elsif ( ( $a != 0 ) && ( $b == 0 ) && ( $c != 0 ) ) { 1640 $x1 = $d / $a; 1641 $y1 = 0; 1642 $z1 = 0; 1643 $x2 = $d / $a; 1644 $y2 = $n1; 1645 $z2 = 0; 1646 $x3 = 0; 1647 $y3 = $n1; 1648 $z3 = $d / $c; 1649 $x4 = 0; 1650 $y4 = 0; 1651 $z4 = $d / $c; 1652 viereck( 1653 $layer, $x1, $y1, $z1, 1654 $x2, $y2, $z2, $x3, 1655 $y3, $z3, $x4, $y4, 1656 $z4, $farbe, $fuellart, $fuellfarbe, 1657 $linienart, $linienstaerke, $parameter 1658 ); 1659 } 1660 elsif ( ( $a != 0 ) && ( $b != 0 ) && ( $c == 0 ) ) { 1661 $x1 = $d / $a; 1662 $y1 = 0; 1663 $z1 = 0; 1664 $x2 = 0; 1665 $y2 = $d / $b; 1666 $z2 = 0; 1667 $x3 = 0; 1668 $y3 = $d / $b; 1669 $z3 = $n1; 1670 $x4 = $d / $a; 1671 $y4 = 0; 1672 $z4 = $n1; 1673 viereck( 1674 $layer, $x1, $y1, $z1, 1675 $x2, $y2, $z2, $x3, 1676 $y3, $z3, $x4, $y4, 1677 $z4, $farbe, $fuellart, $fuellfarbe, 1678 $linienart, $linienstaerke, $parameter 1679 ); 1680 } 1681 elsif ( ( $a != 0 ) && ( $b == 0 ) && ( $c == 0 ) ) { 1682 $x1 = $d / $a; 1683 $y1 = $n1; 1684 $z1 = 0; 1685 1686 $x2 = $d / $a; 1687 $y2 = 0; 1688 $z2 = 0; 1689 1690 $x3 = $d / $a; 1691 $y3 = 0; 1692 $z3 = $n2; 1693 $x4 = $d / $a; 1694 $y4 = $n1; 1695 $z4 = $n2; 1696 viereck( 1697 $layer, $x1, $y1, $z1, 1698 $x2, $y2, $z2, $x3, 1699 $y3, $z3, $x4, $y4, 1700 $z4, $farbe, $fuellart, $fuellfarbe, 1701 $linienart, $linienstaerke, $parameter 1702 ); 1703 } 1704 elsif ( ( $a == 0 ) && ( $b != 0 ) && ( $c == 0 ) ) { 1705 $x1 = $n1; 1706 $y1 = ( $d / $b ); 1707 $z1 = 0; 1708 1709 $x2 = 0; 1710 $y2 = ( $d / $b ); 1711 $z2 = 0; 1712 1713 $x3 = 0; 1714 $y3 = ( $d / $b ); 1715 $z3 = $n2; 1716 1717 $x4 = $n1; 1718 $y4 = ( $d / $b ); 1719 $z4 = $n2; 1720 viereck( 1721 $layer, $x1, $y1, $z1, 1722 $x2, $y2, $z2, $x3, 1723 $y3, $z3, $x4, $y4, 1724 $z4, $farbe, $fuellart, $fuellfarbe, 1725 $linienart, $linienstaerke, $parameter 1726 ); 1727 } 1728 1729 elsif ( ( $a == 0 ) && ( $b == 0 ) && ( $c != 0 ) ) { 1730 1731 $x1 = $n1; 1732 $y1 = 0; 1733 $z1 = $d / $c; 1734 $x2 = 0; 1735 $y2 = 0; 1736 $z2 = $d / $c; 1737 $x3 = 0; 1738 $y3 = $n2; 1739 $z3 = $d / $c; 1740 $x4 = $n1; 1741 $y4 = $n2; 1742 $z4 = $d / $c; 1743 viereck( 1744 $layer, $x1, $y1, $z1, 1745 $x2, $y2, $z2, $x3, 1746 $y3, $z3, $x4, $y4, 1747 $z4, $farbe, $fuellart, $fuellfarbe, 1748 $linienart, $linienstaerke, $parameter 1749 ); 1750 } 1751 else { 1752 $x1 = $d / $a; 1753 $y1 = 0; 1754 $z1 = 0; 1755 $x2 = 0; 1756 $y2 = $d / $b; 1757 $z2 = 0; 1758 $x3 = 0; 1759 $y3 = 0; 1760 $z3 = $d / $c; 1761 dreieck( $layer, $x1, $y1, $z1, $x2, $y2, $z2, $x3, $y3, $z3, $farbe, 1762 $fuellart, $fuellfarbe, $linienart, $linienstaerke, $parameter ); 1763 1764 } 1765 1766 } 1767 1768 sub quader { 1769 my ( $layer, $x, $y, $z, $a, $b, $c, $w1, $w2, $farbe, $fuellart, 1770 $fuellfarbe, $linienart, $linienstaerke, $parameter ) 1771 = @_; 1772 1773 my $liniehinten; 1774 1775 if ( $fuellart ne "" ) { $liniehinten = "solid"; } 1776 else { $liniehinten = "dashed"; } 1777 1778 settexthier(""); 1779 1780 minmax3d( $x, $y, $z, $x, $y, $z ); 1781 minmax3d( $x + $a, $y, $z, $x + $a, $y, $z ); 1782 minmax3d( $x + $a, $y + $b, $z, $x + $a, $y + $b, $z ); 1783 minmax3d( $x + $a, $y + $b, $z + $c, $x + $a, $y + $b, $z + $c ); 1784 1785 if ( ( get3dpstricks() == 1 ) && ( $fuellart ne "" ) ) { 1786 tripel( $x, $y, $z ); 1787 tripel( 0, $b, 0 ); 1788 tripel( $a, 0, 0 ); 1789 tripel( 0, 0, $c ); 1790 1791 befehlfuellungerzeugen( 1792 $layer, "pstThreeDBox", $farbe, $fuellart, 1793 $fuellfarbe, $linienart, $linienstaerke, $parameter, 1794 "", gettexthier() 1795 ); 1796 } 1797 else { 1798 1799 if ( $fuellart ne "" ) { 1800 viereck( 1801 $layer, $x + $a, $y, $z, 1802 $x + $a, $y, $z + $c, $x, 1803 $y, $z + $c, $x, $y, 1804 $z, $fuellfarbe, $fuellart, $fuellfarbe, 1805 $liniehinten, $linienstaerke, $parameter 1806 ); 1807 1808 viereck( 1809 $layer, $x, $y, $z, 1810 $x, $y + $b, $z, $x, 1811 $y + $b, $z + $c, $x, $y, 1812 $z + $c, $fuellfarbe, $fuellart, $fuellfarbe, 1813 $linienart, $linienstaerke, $parameter 1814 ); 1815 1816 viereck( 1817 $layer, $x + $a, $y + $b, $z, 1818 $x + $a, $y, $z, $x, 1819 $y, $z, $x, $y + $b, 1820 $z, $fuellfarbe, $fuellart, $fuellfarbe, 1821 $linienart, $linienstaerke, $parameter 1822 ); 1823 } 1824 1825 settexthier(""); 1826 tripel( $x, $y + $b, $z ); 1827 tripel( $x, $y, $z ); 1828 tripel( $x + $a, $y, $z ); 1829 liniekopf( $layer, "dashed", $linienstaerke, $farbe, $parameter, "", 1830 gettexthier() ); 1831 settexthier(""); 1832 tripel( $x, $y, $z ); 1833 tripel( $x, $y, $z + $c ); 1834 liniekopf( $layer, "dashed", $linienstaerke, $farbe, $parameter, "", 1835 gettexthier() ); 1836 settexthier(""); 1837 1838 viereck( 1839 $layer, $x + $a, $y + $b, $z, 1840 $x + $a, $y + $b, $z + $c, $x, 1841 $y + $b, $z + $c, $x, $y + $b, 1842 $z, $farbe, $fuellart, $fuellfarbe, 1843 $linienart, $linienstaerke, $parameter 1844 ); 1845 1846 viereck( 1847 $layer, $x + $a, $y, $z, 1848 $x + $a, $y + $b, $z, $x + $a, 1849 $y + $b, $z + $c, $x + $a, $y, 1850 $z + $c, $farbe, $fuellart, $fuellfarbe, 1851 $linienart, $linienstaerke, $parameter 1852 ); 1853 1854 viereck( 1855 $layer, $x + $a, $y + $b, $z + $c, 1856 $x + $a, $y, $z + $c, $x, 1857 $y, $z + $c, $x, $y + $b, 1858 $z + $c, $farbe, $fuellart, $fuellfarbe, 1859 $linienart, $linienstaerke, $parameter 1860 ); 1861 1862 } 1863 settexthier(""); 1864 1865 if ( $punkt == 1 ) { 1866 if ( $beschriftung == 0 ) { 1867 punktzeichnen( $layer - 1, $x + $a, $y, $z, 0.05, 225, $farbe, 1868 "solid", $farbe, $linienart, $linienstaerke, "", "" ); 1869 punktzeichnen( $layer - 1, $x + $a, $y + $b, $z, 0.05, 315, $farbe, 1870 "solid", $farbe, $linienart, $linienstaerke, "", "" ); 1871 punktzeichnen( $layer - 1, $x, $y + $b, $z, 0.05, 45, $farbe, 1872 "solid", $farbe, $linienart, $linienstaerke, "", "" ); 1873 punktzeichnen( $layer - 1, $x, $y, $z, 0.05, 135, $farbe, "solid", 1874 $farbe, $linienart, $linienstaerke, "", "" ); 1875 punktzeichnen( $layer - 1, $x + $a, $y, $z + $c, 0.05, 225, $farbe, 1876 "solid", $farbe, $linienart, $linienstaerke, "", "" ); 1877 punktzeichnen( 1878 $layer - 1, $x + $a, $y + $b, $z + $c, 1879 0.05, 315, $farbe, "solid", 1880 $farbe, $linienart, $linienstaerke, "", 1881 "" 1882 ); 1883 punktzeichnen( $layer - 1, $x, $y + $b, $z + $c, 0.05, 45, $farbe, 1884 "solid", $farbe, $linienart, $linienstaerke, "", "" ); 1885 punktzeichnen( $layer - 1, $x, $y, $z + $c, 0.05, 135, $farbe, 1886 "solid", $farbe, $linienart, $linienstaerke, "", "" ); 1887 } 1888 1889 } 1890 1891 if ( $beschriftung == 1 ) { 1892 1893 punktzeichnen( $layer - 1, $x + $a, $y, $z, 0.05, 225, $farbe, "solid", 1894 $farbe, $linienart, $linienstaerke, "\$A\$", "" ); 1895 punktzeichnen( 1896 $layer - 1, $x + $a, $y + $b, $z, 1897 0.05, 315, $farbe, "solid", 1898 $farbe, $linienart, $linienstaerke, "\$B\$", 1899 "" 1900 ); 1901 punktzeichnen( $layer - 1, $x, $y + $b, $z, 0.05, 45, $farbe, "solid", 1902 $farbe, $linienart, $linienstaerke, "\$C\$", "" ); 1903 punktzeichnen( $layer - 1, $x, $y, $z, 0.05, 135, $farbe, "solid", 1904 $farbe, $linienart, $linienstaerke, "\$D\$", "" ); 1905 punktzeichnen( 1906 $layer - 1, $x + $a, $y, $z + $c, 1907 0.05, 225, $farbe, "solid", 1908 $farbe, $linienart, $linienstaerke, "\$E\$", 1909 "" 1910 ); 1911 punktzeichnen( 1912 $layer - 1, $x + $a, $y + $b, $z + $c, 1913 0.05, 315, $farbe, "solid", 1914 $farbe, $linienart, $linienstaerke, "\$F\$", 1915 "" 1916 ); 1917 punktzeichnen( 1918 $layer - 1, $x, $y + $b, $z + $c, 1919 0.05, 45, $farbe, "solid", 1920 $farbe, $linienart, $linienstaerke, "\$G\$", 1921 "" 1922 ); 1923 punktzeichnen( $layer - 1, $x, $y, $z + $c, 0.05, 135, $farbe, "solid", 1924 $farbe, $linienart, $linienstaerke, "\$H\$", "" ); 1925 1926 } 1927 1928 } 1929 1930 sub kugel { 1931 my ( 1932 $layer, $x, $y, $z, 1933 $r, $farbe, $fuellart, $fuellfarbe, 1934 $linienart, $linienstaerke, $parameter 1935 ) = @_; 1936 my $i; 1937 1938 settexthier(""); 1939 set3dpstricks(1); 1940 tripel( $x, $y, $z ); 1941 klammer($r); 1942 befehlfuellungerzeugen( 1943 $layer, "pstThreeDSphere", $farbe, $fuellart, 1944 $fuellfarbe, $linienart, $linienstaerke, $parameter, 1945 "", gettexthier() 1946 ); 1947 minmax3d( $x - $r, $y, $z, $x - $r, $y, $z ); 1948 minmax3d( $x, $y - $r, $z, $x, $y - $r, $z ); 1949 minmax3d( $x, $y, $z - $r, $x, $y, $z - $r ); 1950 minmax3d( $x + $r, $y, $z, $x + $r, $y, $z ); 1951 minmax3d( $x, $y + $r, $z, $x, $y + $r, $z ); 1952 minmax3d( $x, $y, $z + $r, $x, $y, $z + $r ); 1953 1954 settexthier(""); 1955 1956 } 1957 1958 sub kreis3d { 1959 my ( 1960 $layer, $x, $y, $z, 1961 $u1, $u2, $u3, $startwinkel, 1962 $endwinkel, $farbe, $fuellart, $fuellfarbe, 1963 $linienart, $linienstaerke, $parameter 1964 ) = @_; 1965 1966 ellipse3d( 1967 $layer, $x, $y, $z, 1968 $u1, $u2, $u3, $u1, 1969 -$u2, -$u3, $startwinkel, $endwinkel, 1970 $farbe, $fuellart, $fuellfarbe, $linienart, 1971 $linienstaerke, $parameter 1972 ); 1973 1974 } 1975 1976 sub ellipse3d { 1977 my ( 1978 $layer, $x, $y, $z, $u1, $u2, $u3, $v1, $v2, $v3, $startwinkel, 1979 $endwinkel, 1980 $farbe, 1981 $fuellart, 1982 $fuellfarbe, $linienart, $linienstaerke, $parameter 1983 1984 ) = @_; 1985 settexthier(""); 1986 1987 my $i = 0; 1988 for ( $i = $startwinkel ; $i <= $endwinkel ; $i++ ) { 1989 setachsengraph3d( 1990 $x + cos( degtorad($i) ) * $u1 + sin( degtorad($i) ) * $v1, 1991 $y + cos( degtorad($i) ) * $u2 + sin( degtorad($i) ) * $v2, 1992 $z + cos( degtorad($i) ) * $u3 + sin( degtorad($i) ) * $v3, 1993 $x + cos( degtorad($i) ) * $u1 + sin( degtorad($i) ) * $v1, 1994 $y + cos( degtorad($i) ) * $u2 + sin( degtorad($i) ) * $v2, 1995 $z + cos( degtorad($i) ) * $u3 + sin( degtorad($i) ) * $v3 1996 ); 1997 grenzen3d( 1998 $x + cos( degtorad($i) ) * $u1 + sin( degtorad($i) ) * $v1, 1999 $y + cos( degtorad($i) ) * $u2 + sin( degtorad($i) ) * $v2, 2000 $z + cos( degtorad($i) ) * $u3 + sin( degtorad($i) ) * $v3 2001 ); 2002 } 2003 2004 if ( get3dpstricks() == 1 ) { 2005 tripel( $x, $y, $z ); 2006 tripel( $u1, $u2, $u3 ); 2007 tripel( $v1, $v2, $v3 ); 2008 2009 pstricks( $layer, 2010 "\\psset{beginAngle= " 2011 . $startwinkel 2012 . ",endAngle=" 2013 . $endwinkel 2014 . "}" ); 2015 befehlfuellungerzeugen( 2016 $layer, "pstThreeDEllipse", 2017 $farbe, $fuellart, 2018 $fuellfarbe, $linienart, 2019 $linienstaerke, $parameter, 2020 "", gettexthier() 2021 ); 2022 } 2023 else { 2024 2025 for ( $i = $startwinkel ; $i <= $endwinkel ; $i = $i + 1 ) { 2026 tripel( 2027 $x + cos( degtorad($i) ) * $u1 + sin( degtorad($i) ) * $v1, 2028 $y + cos( degtorad($i) ) * $u2 + sin( degtorad($i) ) * $v2, 2029 $z + cos( degtorad($i) ) * $u3 + sin( degtorad($i) ) * $v3 2030 ); 2031 } 2032 polygon( $layer, $linienart, $linienstaerke, $farbe, $fuellart, 2033 $fuellfarbe, $parameter . ", plotstyle=curve", 2034 gettexthier() ); 2035 2036 } 2037 settexthier(""); 2038 } 2039 2040 sub rechteck3d { 2041 my ( $layer, $x, $y, $z, $r1, $r2, $r3, $r4, $r5, $r6, $farbe, $fuellart, 2042 $fuellfarbe, $linienart, $linienstaerke, $parameter ) 2043 = @_; 2044 2045 settexthier(""); 2046 2047 if ( get3dpstricks() == 1 ) { 2048 tripel( $x, $y, $z ); 2049 tripel( $r1, $r2, $r3 ); 2050 tripel( $r4, $r5, $r6 ); 2051 befehlfuellungerzeugen( 2052 $layer, "pstThreeDSquare", 2053 $farbe, $fuellart, 2054 $fuellfarbe, $linienart, 2055 $linienstaerke, $parameter, 2056 "", gettexthier() 2057 ); 2058 } 2059 else { 2060 tripel( $x, $y, $z ); 2061 tripel( $x + $r1, $y + $r2, $z + $r3 ); 2062 tripel( $x + $r1 + $r4, $y + $r2 + $r5, $z + $r3 + $r6 ); 2063 tripel( $x + $r4, $y + $r5, $z + $r6 ); 2064 tripel( $x, $y, $z ); 2065 befehlfuellungerzeugen( 2066 $layer, "pspolygon", $farbe, $fuellart, 2067 $fuellfarbe, $linienart, $linienstaerke, $parameter, 2068 "", gettexthier() 2069 ); 2070 } 2071 settexthier(""); 2072 2073 } 2074 2075 sub pyramide { 2076 my ( $layer, $x, $y, $z, $a, $b, $c, $w1, $w2, $farbe, $fuellart, 2077 $fuellfarbe, $linienart, $linienstaerke, $parameter ) 2078 = @_; 2079 2080 my $n = 0; 2081 2082 if ( $fuellart eq "" ) { 2083 2084 linie( 2085 $layer, $x - $a, $y + $b, $z, 2086 $x - $a, $y, $z, "dashed", 2087 $linienstaerke, $farbe, $parameter, "" 2088 ); 2089 linie( 2090 $layer, $x - $a, $y, $z, 2091 $x - ( 0.5 * $a + $w1 ), 2092 $y + 0.5 * $b + $w2, 2093 $z + $c, "dashed", $linienstaerke, $farbe, $parameter, "" 2094 ); 2095 2096 linie( $layer, $x - $a, $y, $z, $x, $y, $z, "dashed", $linienstaerke, 2097 $farbe, $parameter, "" ); 2098 2099 dreieck( 2100 $layer, $x - $a, 2101 $y + $b, $z, 2102 $x, $y + $b, 2103 $z, $x - ( 0.5 * $a + $w1 ), 2104 $y + 0.5 * $b + $w2, $z + $c, 2105 $farbe, $fuellart, 2106 $fuellfarbe, $linienart, 2107 $linienstaerke, $parameter 2108 ); 2109 2110 dreieck( 2111 $layer, $x, 2112 $y, $z, 2113 $x, $y + $b, 2114 $z, $x - ( 0.5 * $a + $w1 ), 2115 $y + 0.5 * $b + $w2, $z + $c, 2116 $farbe, $fuellart, 2117 $fuellfarbe, $linienart, 2118 $linienstaerke, $parameter 2119 ); 2120 } 2121 else { 2122 2123 rechteck3d( $layer, $x, $y, $z, -$a, 0, 0, 0, $b, 0, $farbe, $fuellart, 2124 $fuellfarbe, $linienart, $linienstaerke, $parameter ); 2125 2126 dreieck( 2127 $layer, $x - $a, 2128 $y + $b, $z, 2129 $x - $a, $y, 2130 $z, $x - ( 0.5 * $a + $w1 ), 2131 $y + 0.5 * $b + $w2, $z + $c, 2132 $farbe, $fuellart, 2133 $fuellfarbe, $linienart, 2134 $linienstaerke, $parameter 2135 ); 2136 dreieck( 2137 $layer, $x, 2138 $y, $z, 2139 $x - $a, $y, 2140 $z, $x - ( 0.5 * $a + $w1 ), 2141 $y + 0.5 * $b + $w2, $z + $c, 2142 $farbe, $fuellart, 2143 $fuellfarbe, $linienart, 2144 $linienstaerke, $parameter 2145 ); 2146 2147 dreieck( 2148 $layer, $x - $a, 2149 $y + $b, $z, 2150 $x, $y + $b, 2151 $z, $x - ( 0.5 * $a + $w1 ), 2152 $y + 0.5 * $b + $w2, $z + $c, 2153 $farbe, $fuellart, 2154 $fuellfarbe, $linienart, 2155 $linienstaerke, $parameter 2156 ); 2157 2158 dreieck( 2159 $layer, $x, 2160 $y, $z, 2161 $x, $y + $b, 2162 $z, $x - ( 0.5 * $a + $w1 ), 2163 $y + 0.5 * $b + $w2, $z + $c, 2164 $farbe, $fuellart, 2165 $fuellfarbe, $linienart, 2166 $linienstaerke, $parameter 2167 ); 2168 2169 } 2170 2171 } 2172 2173 sub pyramidestumpf { 2174 my ( 2175 $layer, $x, $y, $z, $a, $b, $c, $hoehe, $w1, $w2, $farbe, 2176 $fuellart, 2177 $fuellfarbe, $linienart, $linienstaerke, $parameter 2178 2179 ) = @_; 2180 2181 my ( $aneu, $bneu, $cneu ); 2182 2183 $cneu = $hoehe; 2184 2185 $aneu = nachkommastellen( ( $c - $cneu ) / $c * $a, 3 ); 2186 $bneu = nachkommastellen( ( $c - $cneu ) / $c * $b, 3 ); 2187 2188 if ( $cneu == $c ) { 2189 pyramide( 2190 $layer, $x, $y, $z, $a, $b, $c, $w1, $w2, $farbe, 2191 $fuellart, 2192 $fuellfarbe, $linienart, $linienstaerke, $parameter 2193 2194 ); 2195 } 2196 else { 2197 2198 if ( $fuellart eq "" ) { 2199 2200 linie( $layer, $x, $y, $z, $x - $a, $y, $z,, "dashed", 2201 $linienstaerke, $farbe, $parameter, "" ); 2202 2203 linie( $layer, $x - $a, $y + $b, $z, $x - $a, $y, $z,, "dashed", 2204 $linienstaerke, $farbe, $parameter, "" ); 2205 2206 rechteck3d( 2207 $layer, $x - 0.5 * $a + 0.5 * $aneu, 2208 $y + 0.5 * $b - 0.5 * $bneu, $z + $cneu, 2209 -$aneu, 0, 2210 0, 0, 2211 $bneu, 0, 2212 $farbe, $fuellart, 2213 $fuellfarbe, $linienart, 2214 $linienstaerke, $parameter 2215 ); 2216 2217 linie( 2218 $layer, $x - $a, 2219 $y, $z, 2220 $x - 0.5 * $a - 0.5 * $aneu, $y + 0.5 * $b - 0.5 * $bneu, 2221 $z + $cneu, "dashed", 2222 $linienstaerke, $farbe, 2223 $parameter, "" 2224 ); 2225 2226 viereck( 2227 $layer, $x - 0.5 * $a - 0.5 * $aneu, 2228 $y + 0.5 * $b + 0.5 * $bneu, $z + $cneu, 2229 $x - 0.5 * $a + 0.5 * $aneu, $y + 0.5 * $b + 0.5 * $bneu, 2230 $z + $cneu, $x, 2231 $y + $b, $z, 2232 $x - $a, $y + $b, 2233 $z, $farbe, 2234 $fuellart, $fuellfarbe, 2235 $linienart, $linienstaerke, 2236 $parameter 2237 ); 2238 2239 viereck( 2240 $layer, $x - 0.5 * $a + 0.5 * $aneu, 2241 $y + 0.5 * $b - 0.5 * $bneu, $z + $cneu, 2242 $x, $y, 2243 $z, $x, 2244 $y + $b, $z, 2245 $x - 0.5 * $a + 0.5 * $aneu, $y + 0.5 * $b + 0.5 * $bneu, 2246 $z + $cneu, $farbe, 2247 $fuellart, $fuellfarbe, 2248 $linienart, $linienstaerke, 2249 $parameter 2250 ); 2251 2252 } 2253 else { 2254 2255 rechteck3d( $layer, $x, $y, $z, -$a, 0, 0, 0, $b, 0, $farbe, 2256 $fuellart, $fuellfarbe, "dashed", $linienstaerke, $parameter ); 2257 2258 rechteck3d( 2259 $layer, $x - 0.5 * $a + 0.5 * $aneu, 2260 $y + 0.5 * $b - 0.5 * $bneu, $z + $cneu, 2261 -$aneu, 0, 2262 0, 0, 2263 $bneu, 0, 2264 $farbe, $fuellart, 2265 $fuellfarbe, "dashed", 2266 $linienstaerke, $parameter 2267 ); 2268 2269 viereck( 2270 $layer, $x - 0.5 * $a - 0.5 * $aneu, 2271 $y + 0.5 * $b - 0.5 * $bneu, $z + $cneu, 2272 $x - 0.5 * $a + 0.5 * $aneu, $y + 0.5 * $b - 0.5 * $bneu, 2273 $z + $cneu, $x, 2274 $y, $z, 2275 $x - $a, $y, 2276 $z, $farbe, 2277 $fuellart, $fuellfarbe, 2278 $linienart, $linienstaerke, 2279 $parameter 2280 ); 2281 2282 viereck( 2283 $layer, $x - 0.5 * $a - 0.5 * $aneu, 2284 $y + 0.5 * $b - 0.5 * $bneu, $z + $cneu, 2285 $x - 0.5 * $a - 0.5 * $aneu, $y + 0.5 * $b + 0.5 * $bneu, 2286 $z + $cneu, $x - $a, 2287 $y + $b, $z, 2288 $x - $a, $y, 2289 $z, $farbe, 2290 $fuellart, $fuellfarbe, 2291 $linienart, $linienstaerke, 2292 $parameter 2293 ); 2294 2295 viereck( 2296 $layer, $x - 0.5 * $a - 0.5 * $aneu, 2297 $y + 0.5 * $b + 0.5 * $bneu, $z + $cneu, 2298 $x - 0.5 * $a + 0.5 * $aneu, $y + 0.5 * $b + 0.5 * $bneu, 2299 $z + $cneu, $x, 2300 $y + $b, $z, 2301 $x - $a, $y + $b, 2302 $z, $farbe, 2303 $fuellart, $fuellfarbe, 2304 $linienart, $linienstaerke, 2305 $parameter 2306 ); 2307 2308 viereck( 2309 $layer, $x - 0.5 * $a + 0.5 * $aneu, 2310 $y + 0.5 * $b - 0.5 * $bneu, $z + $cneu, 2311 $x, $y, 2312 $z, $x, 2313 $y + $b, $z, 2314 $x - 0.5 * $a + 0.5 * $aneu, $y + 0.5 * $b + 0.5 * $bneu, 2315 $z + $cneu, $farbe, 2316 $fuellart, $fuellfarbe, 2317 $linienart, $linienstaerke, 2318 $parameter 2319 ); 2320 2321 viereck( 2322 $layer, 2323 $x - 0.5 * $a + 0.5 * $aneu, $y + 0.5 * $b - 0.5 * $bneu, 2324 $z + $cneu, 2325 $x - 0.5 * $a + 0.5 * $aneu, $y + 0.5 * $b + 0.5 * $bneu, 2326 $z + $cneu, 2327 $x - 0.5 * $a - 0.5 * $aneu, $y + 0.5 * $b + 0.5 * $bneu, 2328 $z + $cneu, 2329 $x - 0.5 * $a - 0.5 * $aneu, 2330 $y + 0.5 * $b - 0.5 * $bneu, 2331 $z + $cneu, 2332 2333 $farbe, $fuellart, $fuellfarbe, $linienart, $linienstaerke, 2334 $parameter 2335 ); 2336 } 2337 } 2338 } 2339 2340 sub kegel { 2341 my ( $layer, $x, $y, $z, $r, $h, $weiter, $farbe, $fuellart, $fuellfarbe, 2342 $linienart, $linienstaerke, $parameter ) 2343 = @_; 2344 2345 my ( $xmitte, $ymitte, $zmitte ); 2346 2347 my ( $i, $w1, $w2 ); 2348 2349 $xmitte = $x; 2350 $ymitte = $y; 2351 $zmitte = $z + $h; 2352 2353 #ellipse3d( $layer, $x, $y, $z, $r, 0, 0, 0, $r, 0, 0, 360, $farbe, $fuellart, $fuellfarbe, $linienart, $linienstaerke, $parameter ); 2354 2355 for ( $i = 0 ; $i <= 360 ; $i = $i + $weiter ) { 2356 2357 $w2 = 90 + $i; 2358 $w1 = 90 + $i + $weiter; 2359 if ( $fuellart ne "" ) { 2360 2361 befehlfuellungerzeugen( 2362 $layer, "pscustom", $farbe, $fuellart, 2363 $fuellfarbe, $linienart, $linienstaerke, $parameter, 2364 "", "" 2365 ); 2366 2367 pstricks( $layer, "{\\gsave" ); 2368 2369 ellipse3d( $layer, $x, $y, $z, $r, 0, 0, 0, $r, 0, $w2, $w1, $farbe, 2370 $fuellart, $fuellfarbe, $linienart, $linienstaerke, 2371 $parameter ); 2372 2373 linie( 2374 $layer, $xmitte, $ymitte, $zmitte, 2375 nachkommastellen( $x + cos( degtorad($w2) ) * $r, 4 ), 2376 nachkommastellen( $y + sin( degtorad($w2) ) * $r, 4 ), 2377 $z, "", "", "", "", "" 2378 ); 2379 2380 linie( 2381 $layer, 2382 nachkommastellen( $x + cos( degtorad($w1) ) * $r, 4 ), 2383 nachkommastellen( $y + sin( degtorad($w1) ) * $r, 4 ), 2384 $z, $xmitte, $ymitte, $zmitte, "", "", "", "", "" 2385 ); 2386 2387 befehlfuellungerzeugen( $layer, "fill", "", $fuellart, $fuellfarbe, 2388 "", "", $parameter, "", "" ); 2389 pstricks( $layer, "\\grestore}" ); 2390 } 2391 2392 } 2393 2394 ellipse3d( $layer, $x, $y, $z, $r, 0, 0, 0, $r, 0, 0, 360, $farbe, 2395 $fuellart, $fuellfarbe, $linienart, $linienstaerke, $parameter ); 2396 2397 for ( $i = 0 ; $i <= 360 ; $i = $i + $weiter ) { 2398 2399 $w2 = 90 + $i; 2400 linie( 2401 $layer, 2402 $xmitte, 2403 $ymitte, 2404 $zmitte, 2405 nachkommastellen( $x + cos( degtorad($w2) ) * $r, 4 ), 2406 nachkommastellen( $y + sin( degtorad($w2) ) * $r, 4 ), 2407 $z, 2408 $linienart, 2409 $linienstaerke, 2410 $farbe, 2411 $parameter, 2412 "" 2413 ); 2414 } 2415 2416 } 2417 2418 sub kegelstumpf { 2419 my ( 2420 $layer, $x, $y, $z, 2421 $r, $h, $hoehe, $weiter, 2422 $farbe, $fuellart, $fuellfarbe, $linienart, 2423 $linienstaerke, $parameter 2424 ) = @_; 2425 kreiskegelstumpf( 2426 $layer, $x, $y, 2427 $z, $r, ( $h - $hoehe ) / $h * $r, 2428 ( $h - $hoehe ), $weiter, $farbe, 2429 $fuellart, $fuellfarbe, $linienart, 2430 $linienstaerke, $parameter 2431 ); 2432 } 2433 2434 sub kreiskegelstumpf { 2435 my ( $layer, $x, $y, $z, $r1, $r2, $h, $weiter, $farbe, $fuellart, 2436 $fuellfarbe, $linienart, $linienstaerke, $parameter ) 2437 = @_; 2438 2439 set3dpstricks(1); 2440 my ( $xmitte, $ymitte, $zmitte, $i, $w1, $w2 ); 2441 2442 $xmitte = $x; 2443 $ymitte = $y; 2444 $zmitte = $z + $h; 2445 2446 for ( $i = 0 ; $i <= 360 ; $i = $i + $weiter ) { 2447 $w2 = 0 + $i; 2448 $w1 = 0 + $i + $weiter; 2449 2450 if ( $fuellart ne "" ) { 2451 befehlfuellungerzeugen( 2452 $layer, "pscustom", $farbe, $fuellart, 2453 $fuellfarbe, $linienart, $linienstaerke, $parameter, 2454 "", "" 2455 ); 2456 pstricks( $layer, "{\\gsave" ); 2457 ellipse3d( $layer, $x, $y, $z, $r1, 0, 0, 0, $r1, 0, $w2, $w1, 2458 $farbe, $fuellart, $fuellfarbe, $linienart, $linienstaerke, 2459 $parameter ); 2460 linie( 2461 $layer, 2462 nachkommastellen( $x + cos( degtorad($w2) ) * $r1, 4 ), 2463 nachkommastellen( $y + sin( degtorad($w2) ) * $r1, 4 ), 2464 $z, 2465 nachkommastellen( $xmitte + cos( degtorad($w2) ) * $r2, 4 ), 2466 nachkommastellen( $ymitte + sin( degtorad($w2) ) * $r2, 4 ), 2467 $zmitte, 2468 "", 2469 "", 2470 "", 2471 "", 2472 "" 2473 ); 2474 ellipse3d( 2475 $layer, $xmitte, $ymitte, $zmitte, 2476 $r2, 0, 0, 0, 2477 $r2, 0, $w2, $w1, 2478 $farbe, $fuellart, $fuellfarbe, $linienart, 2479 $linienstaerke, $parameter 2480 ); 2481 linie( 2482 $layer, 2483 nachkommastellen( $xmitte + cos( degtorad($w1) ) * $r2, 4 ), 2484 nachkommastellen( $ymitte + sin( degtorad($w1) ) * $r2, 4 ), 2485 $zmitte, 2486 nachkommastellen( $x + cos( degtorad($w1) ) * $r1, 4 ), 2487 nachkommastellen( $y + sin( degtorad($w1) ) * $r1, 4 ), 2488 $z, 2489 "", 2490 "", 2491 "", 2492 "", 2493 "" 2494 ); 2495 2496 befehlfuellungerzeugen( 2497 $layer, "fill", "blue", $fuellart, 2498 $fuellfarbe, "", "", $parameter, 2499 "", "" 2500 ); 2501 pstricks( $layer, "\\grestore}" ); 2502 } 2503 2504 } 2505 ellipse3d( $layer, $x, $y, $z, $r1, 0, 0, 0, $r1, 0, 0, 360, $farbe, 2506 $fuellart, $fuellfarbe, $linienart, $linienstaerke, $parameter ); 2507 2508 for ( $i = 0 ; $i <= 360 ; $i = $i + $weiter ) { 2509 $w2 = $i; 2510 linie( 2511 $layer, 2512 nachkommastellen( $xmitte + cos( degtorad($w2) ) * $r2, 4 ), 2513 nachkommastellen( $ymitte + sin( degtorad($w2) ) * $r2, 4 ), 2514 $zmitte, 2515 nachkommastellen( $x + cos( degtorad($w2) ) * $r1, 4 ), 2516 nachkommastellen( $y + sin( degtorad($w2) ) * $r1, 4 ), 2517 $z, 2518 $linienart, 2519 $linienstaerke, 2520 $farbe, 2521 $parameter, 2522 "" 2523 ); 2524 } 2525 ellipse3d( $layer, $xmitte, $ymitte, $zmitte, $r2, 0, 0, 0, $r2, 0, 0, 360, 2526 $farbe, $fuellart, $fuellfarbe, $linienart, $linienstaerke, 2527 $parameter ); 2528 2529 } 2530 2531 # Ein Zylinder wird gezeichnet 2532 sub zylinder { 2533 2534 my ( $layer, $x, $y, $z, $r, $h, $weiter, $farbe, $fuellart, $fuellfarbe, 2535 $linienart, $linienstaerke, $parameter ) 2536 = @_; 2537 2538 kreiskegelstumpf( $layer, $x, $y, $z, $r, $r, $h, $weiter, $farbe, 2539 $fuellart, $fuellfarbe, $linienart, $linienstaerke, $parameter ); 2540 2541 } 2542 2543 1; 2544 |
A.6 Das Modul für Funktionen
funktionen-pm.pm |
---|
1 ################################################################## 2 # Modul für allgemeine Funktionen 3 # 4 # Letzte Änderung: 06.01.2012 5 ################################################################## 6 use POSIX qw /floor ceil/; 7 use Math::Trig; 8 use strict; 9 use warnings; 10 11 ################################################################## 12 ### Funktionen 13 ### Hilfsfunktionen 14 ################################################################## 15 sub degtorad { 16 my ($wert) = @_; 17 return $wert * pi() / 180; 18 } 19 20 sub radtodeg { 21 my ($wert) = @_; 22 return $wert * 180 / pi(); 23 } 24 25 sub abrunden { 26 my ( $wert, $schritt ) = @_; 27 return $schritt * floor( $wert / $schritt ); 28 } 29 30 sub aufrunden { 31 my ( $wert, $schritt ) = @_; 32 return $schritt * ceil( $wert / $schritt ); 33 } 34 35 sub nachkommastellen { 36 my ( $wert, $nachkommastelle ) = @_; 37 38 my $nachkommastellentext = "%0." . $nachkommastelle . "f"; 39 if ( $nachkommastelle >= 0 ) { 40 $wert = sprintf( $nachkommastellentext, $wert ); 41 } 42 else { $wert = $wert; } 43 return $wert; 44 } 45 46 sub fact { 47 my ($n) = shift; 48 if ( ( $n == 1 ) || ( $n == 0 ) ) { return 1; } 49 elsif ( $n < 0 ) { return "ERROR"; } 50 else { return $n * fact( $n - 1 ); } 51 } 52 53 sub logarithmus { return log( $_[0] ) / log( $_[1] ); } 54 55 sub round { 56 my ($number) = shift; 57 return int( $number + .5 ); 58 } 59 60 ################################################################## 61 ########### Funktionen zum Berechnen von maximal und minimal 62 ########### Werten im Werte- und Definitionsbereich. 63 ################################################################## 64 sub calcfunk { 65 my ( $funktionsausdruck, $variable, $wert ) = @_; 66 67 my @ergebnis = regelwerk( tokenizer($funktionsausdruck) ); 68 69 return rechenbaum_ausrechnen( 70 $ergebnis[0]{'Baum'}, 71 { 72 $variable => $wert, 73 'pi' => pi(), 74 'e' => exp(1) 75 } 76 ); 77 78 } 79 80 # Berechnet den ymin und ymax Wert fuer eine Funktion 81 sub calcyminmax { 82 my ( $func, $xminwert, $xmaxwert, $minmax ) = @_; 83 my ( $schritt, $xsuche, $ysuche, $yminwert, $ymaxwert ); 84 my $schrittanzahl = 500; 85 86 # Suche von ymin, indem der ganze Definitionsbereich durchgegangen wird und 87 # der zugehoerige Wertebereich ausgerechnet wird. 88 $yminwert = calcfunk( $func, "x", $xminwert ); 89 $ymaxwert = calcfunk( $func, "x", $xminwert ); 90 for ( $schritt = 0 ; $schritt < $schrittanzahl ; $schritt++ ) { 91 $xsuche = $xminwert + 92 ( $xmaxwert - $xminwert ) * ( $schritt / ( $schrittanzahl - 1 ) ); 93 $ysuche = calcfunk( $func, "x", $xsuche ); 94 $yminwert = $ysuche if ( $yminwert > $ysuche ); 95 $ymaxwert = $ysuche if ( $ymaxwert < $ysuche ); 96 } 97 return $yminwert if ( $minmax eq "min" ); 98 return $ymaxwert if ( $minmax eq "max" ); 99 printf( "calcyminmax: Unbekannter Parameter minmax='%s'\n", $minmax ); 100 } 101 102 sub calcymin { 103 my ( $func, $xminwert, $xmaxwert ) = @_; 104 return nachkommastellen( calcyminmax( $func, $xminwert, $xmaxwert, "min" ), 105 4 ); 106 } 107 108 sub calcymax { 109 my ( $func, $xminwert, $xmaxwert ) = @_; 110 return nachkommastellen( calcyminmax( $func, $xminwert, $xmaxwert, "max" ), 111 4 ); 112 } 113 114 # Berechnet den ymin und ymax Wert fuer zwei Funktion 115 sub calcfymin { 116 my ( $func1, $func2, $xminwert, $xmaxwert ) = @_; 117 my $ymin1 = calcymin( $func1, $xminwert, $xmaxwert ); 118 my $ymin2 = calcymin( $func2, $xminwert, $xmaxwert ); 119 if ( $ymin1 < $ymin2 ) { return nachkommastellen( $ymin1, 4 ); } 120 else { return nachkommastellen( $ymin2, 4 ); } 121 } 122 123 sub calcfymax { 124 my ( $func1, $func2, $xminwert, $xmaxwert ) = @_; 125 my $ymax1 = calcymax( $func1, $xminwert, $xmaxwert ); 126 my $ymax2 = calcymax( $func2, $xminwert, $xmaxwert ); 127 if ( $ymax1 > $ymax2 ) { return nachkommastellen( $ymax1, 4 ); } 128 else { return nachkommastellen( $ymax2, 4 ); } 129 } 130 131 # Verschiebt den xmin und xmax Wert so, dass Graph komplett in [ymin..ymax] liegt 132 sub calcxminmax { 133 my ( $func, $xminwert, $xmaxwert, $yminwert, $ymaxwert, $minmax ) = @_; 134 my ( $bereichmin, $bereichmax, $schritt, $xsuche, $ysuche, $schrittanzahl, 135 $gueltig ); 136 137 $schrittanzahl = 1000; 138 $gueltig = 0; 139 $bereichmin = $xminwert; 140 $bereichmax = $xminwert; 141 142 for ( $schritt = 0 ; $schritt < $schrittanzahl ; $schritt++ ) { 143 $xsuche = $xminwert + 144 ( $xmaxwert - $xminwert ) * ( $schritt / ( $schrittanzahl - 1 ) ); 145 146 $ysuche = calcfunk( $func, "x", $xsuche ); 147 148 if ( ( $ysuche >= $yminwert ) && ( $ysuche <= $ymaxwert ) ) { 149 150 $bereichmin = $xsuche if ( !$gueltig ); 151 $bereichmax = $xsuche; 152 153 $gueltig = 1; 154 } 155 else { $gueltig = 0; } 156 } 157 158 return nachkommastellen( $bereichmin, 4 ) if ( $minmax eq "min" ); 159 return nachkommastellen( $bereichmax, 4 ) 160 if ( $minmax eq "max" ); 161 printf( "calcxminmax: Unbekannter Parameter minmax='%s'\n", $minmax ); 162 } 163 164 sub calcxmin { 165 my ( $func, $xminwert, $xmaxwert, $yminwert, $ymaxwert ) = @_; 166 return nachkommastellen( 167 calcxminmax( $func, $xminwert, $xmaxwert, $yminwert, $ymaxwert, "min" ), 168 4 169 ); 170 } 171 172 sub calcxmax { 173 my ( $func, $xminwert, $xmaxwert, $yminwert, $ymaxwert ) = @_; 174 return nachkommastellen( 175 calcxminmax( $func, $xminwert, $xmaxwert, $yminwert, $ymaxwert, "max" ), 176 4 177 ); 178 } 179 180 # Verschiebt den xmin und xmax Wert so, dass Graph komplett in [zmin..zmax] liegt 181 sub calcxminmax3d { 182 my ( 183 $func, $xminwert, $xmaxwert, $yminwert, 184 $ymaxwert, $zminwert, $zmaxwert, $minmax 185 ) = @_; 186 my ( 187 $bereichmin, $bereichmax, $xsuche, $ysuche, 188 $zsuche, $schrittanzahl, $gueltig, $dx, 189 $dy, $i, $j 190 ); 191 192 $schrittanzahl = 10; 193 $gueltig = 0; 194 $bereichmin = $yminwert; 195 $bereichmax = $yminwert; 196 197 for ( $i = 0 ; $i < $schrittanzahl ; $i++ ) { 198 199 $xsuche = $xminwert + 200 ( $xmaxwert - $xminwert ) * ( $i / ( $schrittanzahl - 1 ) ); 201 202 for ( $j = 0 ; $j < $schrittanzahl ; $j++ ) { 203 $ysuche = $yminwert + 204 ( $ymaxwert - $yminwert ) * ( $j / ( $schrittanzahl - 1 ) ); 205 $zsuche = calcfunk3d( $func, "x", $xsuche, "y", $ysuche ); 206 if ( ( $zsuche >= $zminwert ) && ( $zsuche <= $zmaxwert ) ) { 207 208 $bereichmin = $ysuche if ( !$gueltig ); 209 $bereichmax = $ysuche; 210 211 $gueltig = 1; 212 } 213 else { $gueltig = 0; } 214 } 215 } 216 217 return nachkommastellen( $bereichmin, 4 ) if ( $minmax eq "min" ); 218 return nachkommastellen( $bereichmax, 4 ) if ( $minmax eq "max" ); 219 printf( "calcxminmax: Unbekannter Parameter minmax='%s'\n", $minmax ); 220 } 221 222 sub calcymin3d { 223 my ( 224 $func, $xminwert, $xmaxwert, $yminwert, 225 $ymaxwert, $zminwert, $zmaxwert 226 ) = @_; 227 return nachkommastellen( 228 calcxminmax3d( 229 $func, $xminwert, $xmaxwert, $yminwert, 230 $ymaxwert, $zminwert, $zmaxwert, "min" 231 ), 232 4 233 ); 234 } 235 236 sub calcymax3d { 237 my ( 238 $func, $xminwert, $xmaxwert, $yminwert, 239 $ymaxwert, $zminwert, $zmaxwert 240 ) = @_; 241 return nachkommastellen( 242 calcxminmax3d( 243 $func, $xminwert, $xmaxwert, $yminwert, 244 $ymaxwert, $zminwert, $zmaxwert, "max" 245 ), 246 4 247 ); 248 } 249 250 sub calcparaminmax { 251 my ( $func1, $func2, $func3, $t1, $t2, $u1, $u2 ) = @_; 252 253 my ( $i, $j ); 254 255 if ( $func3 eq "" ) { 256 257 for ( $i = $t1 ; $i < $t2 ; $i = $i + 0.2 ) { 258 minmax( 259 calcfunk( $func1, "t", $i ), 260 calcfunk( $func2, "t", $i ), 261 calcfunk( $func1, "t", $i ), 262 calcfunk( $func2, "t", $i ) 263 ); 264 265 setachsengraph( 266 calcfunk( $func1, "t", $i ), 267 calcfunk( $func2, "t", $i ), 268 calcfunk( $func1, "t", $i ), 269 calcfunk( $func2, "t", $i ) 270 ); 271 } 272 } 273 else { 274 if ( $u1 == $u2 ) { 275 for ( $i = $t1 ; $i < $t2 ; $i = $i + 0.1 ) { 276 minmax3d( 277 calcfunk3d( $func1, "t", $i, "u", 0 ), 278 calcfunk3d( $func2, "t", $i, "u", 0 ), 279 calcfunk3d( $func3, "t", $i, "u", 0 ), 280 calcfunk3d( $func1, "t", $i, "u", 0 ), 281 calcfunk3d( $func2, "t", $i, "u", 0 ), 282 calcfunk3d( $func3, "t", $i, "u", 0 ) 283 ); 284 setachsengraph3d( 285 calcfunk3d( $func1, "t", $i, "u", 0 ), 286 calcfunk3d( $func2, "t", $i, "u", 0 ), 287 calcfunk3d( $func3, "t", $i, "u", 0 ), 288 calcfunk3d( $func1, "t", $i, "u", 0 ), 289 calcfunk3d( $func2, "t", $i, "u", 0 ), 290 calcfunk3d( $func3, "t", $i, "u", 0 ) 291 ); 292 293 } 294 } 295 else { 296 for ( $j = $u1 ; $j < $u2 ; $j = $j + 0.1 ) { 297 for ( $i = $t1 ; $i < $t2 ; $i = $i + 0.1 ) { 298 299 minmax3d( 300 nachkommastellen( 301 calcfunk3d( $func1, "t", $i, "u", $j ), 4 302 ), 303 nachkommastellen( 304 calcfunk3d( $func2, "t", $i, "u", $j ), 4 305 ), 306 nachkommastellen( 307 calcfunk3d( $func3, "t", $i, "u", $j ), 4 308 ), 309 nachkommastellen( 310 calcfunk3d( $func1, "t", $i, "u", $j ), 4 311 ), 312 nachkommastellen( 313 calcfunk3d( $func2, "t", $i, "u", $j ), 4 314 ), 315 nachkommastellen( 316 calcfunk3d( $func3, "t", $i, "u", $j ), 4 317 ) 318 ); 319 setachsengraph3d( 320 nachkommastellen( 321 calcfunk3d( $func1, "t", $i, "u", $j ), 4 322 ), 323 nachkommastellen( 324 calcfunk3d( $func2, "t", $i, "u", $j ), 4 325 ), 326 nachkommastellen( 327 calcfunk3d( $func3, "t", $i, "u", $j ), 4 328 ), 329 nachkommastellen( 330 calcfunk3d( $func1, "t", $i, "u", $j ), 4 331 ), 332 nachkommastellen( 333 calcfunk3d( $func2, "t", $i, "u", $j ), 4 334 ), 335 nachkommastellen( 336 calcfunk3d( $func3, "t", $i, "u", $j ), 4 337 ) 338 ); 339 } 340 } 341 342 } 343 344 } 345 346 } 347 348 my $n = 0; 349 350 # Die Änderungsrate zwischen zwei Punkten wird ermittelt 351 352 sub calcaenderungsrate { 353 my ( $x1, $y1, $x2, $y2 ) = @_; 354 $n++; 355 if ( ( $x2 - $x1 ) == 0 ) { return "ERROR"; } 356 357 else { return ( $y2 - $y1 ) / ( $x2 - $x1 ); } 358 } 359 360 sub calcdiff { 361 my ( $wert1, $wert2, $abstand ) = @_; 362 my $wert = 1; 363 if ( abs( $wert1 * $wert - $wert2 * $wert ) <= $abstand ) { return 1; } 364 else { return 0; } 365 } 366 ##Berechnungen fuer die Ableitungen 367 sub calcablxminmax { 368 my ( $func, $xminwert, $xmaxwert, $yminwert, $ymaxwert, $minmax ) = @_; 369 my ( $bereichmin, $bereichmax, $schritt, $xsuche, $ysuche ); 370 my $schrittanzahl = 1000; 371 my $gueltig = 0; 372 $bereichmin = $bereichmax = $xminwert; 373 for ( $schritt = 0 ; $schritt < $schrittanzahl ; $schritt++ ) { 374 $xsuche = $xminwert + 375 ( $xmaxwert - $xminwert ) * ( $schritt / ( $schrittanzahl - 1 ) ); 376 $ysuche = calcableitung( $func, $xsuche ); 377 if ( ( $ysuche >= $yminwert ) && ( $ysuche <= $ymaxwert ) ) { 378 $bereichmin = $xsuche if ( !$gueltig ); 379 $bereichmax = $xsuche; 380 $gueltig = 1; 381 } 382 else { $gueltig = 0; } 383 } 384 return nachkommastellen( $bereichmin, 4 ) 385 if ( $minmax eq "min" ); 386 return nachkommastellen( $bereichmax, 4 ) 387 if ( $minmax eq "max" ); 388 printf( "calcablxminmax: Unbekannter Parameter minmax='%s'\n", $minmax ); 389 } 390 391 sub calcablxmin { 392 my ( $func, $xminwert, $xmaxwert, $yminwert, $ymaxwert ) = @_; 393 return calcablxminmax( $func, $xminwert, $xmaxwert, $yminwert, $ymaxwert, 394 "min" ); 395 } 396 397 sub calcablxmax { 398 my ( $func, $xminwert, $xmaxwert, $yminwert, $ymaxwert ) = @_; 399 return calcablxminmax( $func, $xminwert, $xmaxwert, $yminwert, $ymaxwert, 400 "max" ); 401 } 402 403 # Berechnung der Ableitung über den Differenzenquotienten 404 sub calcableitung { 405 my ( $func, $xwert ) = @_; 406 my $hwert = 0.00000001; 407 my $ywert = 408 ( calcfunk( $func, "x", $xwert + $hwert ) - 409 calcfunk( $func, "x", $xwert ) ) / $hwert; 410 return nachkommastellen( $ywert, 4 ); 411 } 412 ################################################################## 413 ########### Berechnung des Funktionswertes t(x), wenn t die 414 ########### Tangente an der Funktion func im Punkte festwert ist 415 ################################################################## 416 sub calctangente { 417 my ( $func, $xwert, $festwert ) = @_; 418 return nachkommastellen( 419 calcfunk( $func, "x", $festwert ) + 420 ( calcableitung( $func, $festwert ) * ( $xwert - $festwert ) ), 421 4 422 ); 423 } 424 ################################################################## 425 ########### Berechnung der Schnittpunkte von zwei Funktionen 426 ################################################################## 427 sub calcschnittpunkte { 428 my ( $func1, $func2, $xminwert, $xmaxwert, $linksrechts ) = @_; 429 my ( 430 $xsuche, $links, $rechts, @xpunkte, 431 @xselbst, $schritt, $ysuche1, $ysuche2, 432 $welchegroesser, $schrittanzahl, $zaehler 433 ); 434 $ysuche1 = calcfunk( $func1, "x", getminmaxachsen( "x", "min" ) ); 435 $ysuche2 = calcfunk( $func2, "x", getminmaxachsen( "x", "min" ) ); 436 $welchegroesser = ( $ysuche1 > $ysuche2 ) ? 1 : 2; 437 $schrittanzahl = 9000; 438 $zaehler = 0; 439 440 for ( $schritt = 0 ; $schritt < $schrittanzahl ; $schritt++ ) { 441 $xsuche = $xminwert + 442 ( $xmaxwert - $xminwert ) * ( $schritt / ( $schrittanzahl - 1 ) ); 443 $ysuche1 = calcfunk( $func1, "x", $xsuche ); 444 $ysuche2 = calcfunk( $func2, "x", $xsuche ); 445 if ( ( $ysuche1 > $ysuche2 ) xor( $welchegroesser == 1 ) ) { 446 $welchegroesser = ( $ysuche1 > $ysuche2 ) ? 1 : 2; 447 $zaehler++; 448 if ( $zaehler > 1 ) { $rechts = $xsuche; } 449 else { $links = $xsuche; $rechts = $xsuche; } 450 } 451 } 452 if ( $zaehler == 0 ) { $links = $xminwert; $rechts = $xmaxwert; } 453 return nachkommastellen( $links, 4 ) if ( $linksrechts eq "links" ); 454 return nachkommastellen( $rechts, 4 ) if ( $linksrechts eq "rechts" ); 455 printf( "calcschnittpunkte: Unbekannter Parameter linksrechts='%s'\n", 456 $linksrechts ); 457 } 458 459 sub calcschnittlinks { 460 my ( $func1, $func2, $xminwert, $xmaxwert ) = @_; 461 calcschnittpunkte( $func1, $func2, $xminwert, $xmaxwert, "links" ); 462 } 463 464 sub calcschnittrechts { 465 my ( $func1, $func2, $xminwert, $xmaxwert ) = @_; 466 calcschnittpunkte( $func1, $func2, $xminwert, $xmaxwert, "rechts" ); 467 } 468 ################################################################## 469 ########### Berechnungen für Vektoren 470 ################################################################## 471 sub calcendpunktx { 472 my ( $x, $laenge, $winkel ) = @_; 473 return nachkommastellen( $x + cos( degtorad($winkel) ) * $laenge, 4 ); 474 } 475 476 sub calcendpunkty { 477 my ( $y, $laenge, $winkel ) = @_; 478 return nachkommastellen( $y + sin( degtorad($winkel) ) * $laenge, 4 ); 479 } 480 481 sub calcsumlaenge { 482 my ( $x1, $y1, $l1, $w1, $l2, $w2 ) = @_; 483 my $xsum = calcendpunktx( 0, $l1, $w1 ) + calcendpunktx( 0, $l2, $w2 ); 484 my $ysum = calcendpunkty( 0, $l1, $w1 ) + calcendpunkty( 0, $l2, $w2 ); 485 return nachkommastellen( sqrt( ( $xsum * $xsum ) + ( $ysum * $ysum ) ), 4 ); 486 } 487 488 # Winkel wird in Grad ausgegeben 489 sub calcneuerwinkel { 490 my ( $x1, $y1, $l1, $w1, $l2, $w2 ) = @_; 491 my $x12 = calcendpunktx( $x1, $l1, $w1 ); 492 my $y12 = calcendpunkty( $y1, $l1, $w1 ); 493 my $x22 = calcendpunktx( $x12, $l2, $w2 ); 494 my $y22 = calcendpunkty( $y12, $l2, $w2 ); 495 my $dx = $x22 - $x1; 496 my $dy = $y22 - $y1; 497 return nachkommastellen( radtodeg( atan2( $dy, $dx ) ), 4 ); 498 } 499 ################################################################## 500 # Rechnen mit Vektoren 501 ################################################################## 502 ############$winkel2 = $winkel1 + $winkel;##################################################### 503 # vektordifferenz (A,B) liefert den Vektor von A nach B 504 sub vektordifferenz { 505 my ( $xyoderz, $startx, $starty, $startz, $endex, $endey, $endez ) = @_; 506 if ( $xyoderz eq "x" ) { return $endex - $startx; } 507 elsif ( $xyoderz eq "y" ) { return $endey - $starty; } 508 elsif ( $xyoderz eq "z" ) { return $endez - $startz; } 509 else { return 0; } 510 } 511 512 sub vektorprodukt { 513 my ( $startx, $starty, $startz, $endex, $endey, $endez ) = @_; 514 return $startx * $endex + $starty * $endey + $startz * $endez; 515 } 516 517 sub vektorbetrag { 518 my ( $vektorx, $vektory, $vektorz ) = @_; 519 return 520 sqrt( $vektorx * $vektorx + $vektory * $vektory + $vektorz * $vektorz ); 521 } 522 523 sub vektorwinkel { 524 my ( $vektor1x, $vektor1y, $vektor1z, $vektor2x, $vektor2y, $vektor2z ) = 525 @_; 526 return nachkommastellen( 527 radtodeg( 528 acos( 529 vektorprodukt( 530 $vektor1x, $vektor1y, $vektor1z, 531 $vektor2x, $vektor2y, $vektor2z 532 ) / ( 533 vektorbetrag( $vektor1x, $vektor1y, $vektor1z ) * 534 vektorbetrag( $vektor2x, $vektor2y, $vektor2z ) 535 ) 536 ) 537 ), 538 4 539 ); 540 } 541 542 sub minimum { 543 my ( $x, $y, $z ) = @_; 544 my $hilf1; 545 if ( $x < $y ) { $hilf1 = $x; } 546 else { $hilf1 = $y; } 547 if ( $hilf1 < $z ) { return $hilf1; } 548 else { return $z; } 549 } 550 551 sub istzahl { 552 my ($zahl) = @_; 553 if ( defined $zahl ) { 554 if ( $zahl eq "" ) { return 0; } 555 elsif ( $zahl =~ /([ a-zaeoeueA-Z!]+)/ ) { return 0; } 556 else { return 1; } 557 } 558 else { return 0; } 559 } 560 561 sub max { 562 my $a = shift; 563 my $b = shift; 564 return $a > $b ? $a : $b; 565 } 566 567 sub min { 568 my $a = shift; 569 my $b = shift; 570 return $a < $b ? $a : $b; 571 } 572 573 sub farbverlauf { 574 my ( $farbe, $i ) = @_; 575 $farbe =~ s/!//g; 576 $farbe =~ s/1//g; 577 $farbe =~ s/2//g; 578 $farbe =~ s/3//g; 579 $farbe =~ s/4//g; 580 $farbe =~ s/5//g; 581 $farbe =~ s/6//g; 582 $farbe =~ s/7//g; 583 $farbe =~ s/8//g; 584 $farbe =~ s/9//g; 585 $farbe =~ s/0//g; 586 my $n = abrunden( $n + 100 / $i, 1 ); 587 588 return $farbe . "!" . $n; 589 } 590 591 1; |
A.7 Das Modul für den Funktionsparser
funktionsparser-pm.pm |
---|
1 ################################################################## 2 # Modul fuer einen Funktionsparser 3 # Letzte Aenderung: 06.01.2012 4 ################################################################## 5 use POSIX qw /floor ceil/; 6 use Math::Trig; 7 use strict; 8 use warnings; 9 10 use Data::Dumper; 11 my $hilfsstring = ""; 12 13 sub tokenizer { 14 my ($text) = @_; 15 my ( $token, $vorzeichen ); 16 my @listevontokens; 17 $vorzeichen = 1; 18 $text =~ s/ //g; 19 $text = lc($text); 20 while ( $text ne "" ) { 21 if ( ( $text =~ /^([-+]?[0-9]+(\.[0-9]+)?([eE][-+]?[0-9]+)?)/ ) 22 && ( $vorzeichen == 1 ) ) 23 { 24 25 # Zahlen mit Vorzeichen 26 $token = $1; 27 $vorzeichen = 0; 28 push @listevontokens, 29 { 30 'Inhalt' => $token, 31 'Typ' => "Term", 32 'Baum' => { 33 'knoten' => $token, 34 'links' => undef, 35 'rechts' => undef 36 } 37 }; 38 } 39 elsif (( $text =~ /^([0-9]+(\.[0-9]+)?([eE][-+]?[0-9]+)?)/ ) 40 && ( $vorzeichen == 0 ) ) 41 { 42 43 # Zahlen ohne Vorzeichen 44 $token = $1; 45 $vorzeichen = 0; 46 push @listevontokens, 47 { 48 'Inhalt' => $token, 49 'Typ' => "Term", 50 'Baum' => { 51 'knoten' => $token, 52 'links' => undef, 53 'rechts' => undef 54 } 55 }; 56 } 57 elsif ( $text =~ /^([-])/ ) { 58 59 # Operatoren 60 $token = $1; 61 $vorzeichen = 1; 62 push @listevontokens, 63 { 64 'Inhalt' => $token, 65 'Typ' => "minus", 66 'Baum' => { 67 'knoten' => $token, 68 'links' => undef, 69 'rechts' => undef 70 } 71 }; 72 } 73 elsif ( $text =~ /^([+])/ ) { 74 75 # Operatoren 76 $token = $1; 77 $vorzeichen = 1; 78 push @listevontokens, 79 { 80 'Inhalt' => $token, 81 'Typ' => "plus", 82 'Baum' => { 83 'knoten' => $token, 84 'links' => undef, 85 'rechts' => undef 86 } 87 }; 88 } 89 elsif ( $text =~ /^([*])/ ) { 90 91 # Operatoren 92 $token = $1; 93 $vorzeichen = 1; 94 push @listevontokens, 95 { 96 'Inhalt' => $token, 97 'Typ' => "mal", 98 'Baum' => { 99 'knoten' => $token, 100 'links' => undef, 101 'rechts' => undef 102 } 103 }; 104 } 105 elsif ( $text =~ /^([:\/])/ ) { 106 107 # Operatoren 108 $token = $1; 109 $vorzeichen = 1; 110 push @listevontokens, 111 { 112 'Inhalt' => $token, 113 'Typ' => "geteilt", 114 'Baum' => { 115 'knoten' => $token, 116 'links' => undef, 117 'rechts' => undef 118 } 119 }; 120 } 121 elsif ( $text =~ 122 /^(sin|cos|tan|acos|asin|log|ln|ceiling|floor|truncate|round|sqrt|abs|fact|exp)/ 123 ) 124 { 125 126 # Funktionen 127 $token = $1; 128 $vorzeichen = 1; 129 push @listevontokens, 130 { 131 'Inhalt' => $token, 132 'Typ' => "Funktion", 133 'Baum' => { 134 'knoten' => $token, 135 'links' => undef, 136 'rechts' => undef 137 } 138 }; 139 } 140 141 elsif ( $text =~ /^(\()/ ) { 142 143 # oeffnende Klammer 144 $token = $1; 145 $vorzeichen = 1; 146 push @listevontokens, 147 { 148 'Inhalt' => $token, 149 'Typ' => "(", 150 'Baum' => { 151 'knoten' => $token, 152 'links' => undef, 153 'rechts' => undef 154 } 155 }; 156 } 157 elsif ( $text =~ /^(\))/ ) { 158 159 # schliessende Klammer 160 $token = $1; 161 $vorzeichen = 0; 162 push @listevontokens, 163 { 164 'Inhalt' => $token, 165 'Typ' => ")", 166 'Baum' => { 167 'knoten' => $token, 168 'links' => undef, 169 'rechts' => undef 170 } 171 }; 172 } 173 elsif ( $text =~ /^(\^)/ ) { 174 175 # Hochzeichen 176 $token = $1; 177 $vorzeichen = 1; 178 push @listevontokens, 179 { 180 'Inhalt' => $token, 181 'Typ' => "hoch", 182 'Baum' => { 183 'knoten' => $token, 184 'links' => undef, 185 'rechts' => undef 186 } 187 }; 188 } 189 elsif ( $text =~ /^([a-z][0-9a-z]*)/ ) { 190 191 # Variable 192 $token = $1; 193 $vorzeichen = 0; 194 push @listevontokens, 195 { 196 'Inhalt' => $token, 197 'Typ' => "Term", 198 'Baum' => { 199 'knoten' => $token, 200 'links' => undef, 201 'rechts' => undef 202 } 203 }; 204 } 205 else { 206 207 # Rest 208 $token = $text; 209 $vorzeichen = 1; 210 push @listevontokens, 211 { 212 'Inhalt' => $token, 213 'Typ' => "Rest", 214 'Baum' => { 215 'knoten' => $token, 216 'links' => undef, 217 'rechts' => undef 218 } 219 }; 220 } 221 222 #print "Token " . $token . "\n"; 223 $text = substr $text, length $token; 224 } 225 return @listevontokens; 226 } 227 228 my $ausgabe = 0; 229 230 sub ausgabeliste { 231 my @liste = @_; 232 my $listenlaenge = scalar @liste; 233 my $i; 234 if ( $ausgabe == 1 ) { 235 printf("%%'"); 236 for ( $i = 0 ; $i < $listenlaenge ; $i++ ) { 237 printf( "%s", $liste[$i]{'Inhalt'} ); 238 printf(" ") if ( $i < $listenlaenge - 1 ); 239 } 240 print "'\n"; 241 } 242 } 243 244 sub regelwerk { 245 my (@liste) = @_; 246 my ( @klammerterm, $i, $j, $gefunden, $klammerauf, $klammerzu, 247 $klammertiefe ); 248 249 do { 250 $gefunden = 0; 251 if ( !$gefunden ) { 252 253 $klammerzu = $klammerauf = $klammertiefe = 0; 254 255 # Klammern: 256 # Wenn eine oeffnende Klammer gefunden wurde, dann wird der Zaehler klammertiefe erhoeht, 257 # bei einer schliessenden Klammer erniedrigt. 258 # Bei korrekter Klammerung ist der Zaehler am Ende 0 259 # und es wird die regelwerk-Funktion auf den Inhalt der Klammer angewendet. 260 261 for ( $i = 0 ; $i < scalar @liste ; $i++ ) { 262 263 if ( $liste[$i]{'Typ'} eq "(" ) { 264 if ( ( $klammertiefe == 0 ) ) { 265 $klammerauf = $i; 266 } 267 $klammertiefe++; 268 } 269 if ( $liste[$i]{'Typ'} eq ")" ) { 270 $klammertiefe--; 271 if ( $klammertiefe == 0 ) { 272 $klammerzu = $i; 273 } 274 } 275 276 } 277 ## Fehler wenn klammertiefe != 0 muss noch bearbeitet werden 278 279 if ( $klammerauf != $klammerzu ) { 280 281 @klammerterm = (); 282 for ( $j = $klammerauf + 1 ; $j <= $klammerzu - 1 ; $j++ ) { 283 push @klammerterm, 284 { 285 'Inhalt' => $liste[$j]{'Inhalt'}, 286 'Typ' => $liste[$j]{'Typ'}, 287 'Baum' => { 288 'knoten' => $liste[$j]{'Baum'}{'knoten'}, 289 'links' => undef, 290 'rechts' => undef 291 } 292 }; 293 } 294 295 splice( @liste, $klammerauf, $klammerzu - $klammerauf + 1, 296 regelwerk(@klammerterm) ); 297 $gefunden = 1; 298 299 } 300 301 } 302 if ( !$gefunden ) { 303 304 # Potenzieren 305 for ( $i = 0 ; $i < scalar @liste - 2 ; $i++ ) { 306 307 if ( ( $liste[$i]{'Typ'} eq "Term" ) 308 && ( $liste[ $i + 1 ]{'Typ'} eq "hoch" ) 309 && ( $liste[ $i + 2 ]{'Typ'} eq "Term" ) 310 && ( !$gefunden ) ) 311 { 312 313 splice( 314 @liste, $i, 3, 315 { 316 'Inhalt' => "(" 317 . $liste[$i]{'Inhalt'} 318 . $liste[ $i + 1 ]{'Inhalt'} 319 . $liste[ $i + 2 ]{'Inhalt'} . ")", 320 'Typ' => "Term", 321 'Baum' => { 322 'knoten' => $liste[ $i + 1 ]{'Baum'}{'knoten'}, 323 'links' => $liste[$i]{'Baum'}, 324 'rechts' => $liste[ $i + 2 ]{'Baum'} 325 } 326 } 327 ); 328 $gefunden = 1; 329 } 330 } 331 } 332 if ( !$gefunden ) { 333 334 # Multiplikation und Division 335 for ( $i = 0 ; $i < scalar @liste - 2 ; $i++ ) { 336 if ( 337 ( $liste[$i]{'Typ'} eq "Term" ) 338 && ( ( $liste[ $i + 1 ]{'Typ'} eq "mal" ) 339 || ( $liste[ $i + 1 ]{'Typ'} eq "geteilt" ) ) 340 && ( $liste[ $i + 2 ]{'Typ'} eq "Term" ) 341 && ( !$gefunden ) 342 ) 343 { 344 splice( 345 @liste, $i, 3, 346 { 347 'Inhalt' => "(" 348 . $liste[$i]{'Inhalt'} 349 . $liste[ $i + 1 ]{'Inhalt'} 350 . $liste[ $i + 2 ]{'Inhalt'} . ")", 351 'Typ' => "Term", 352 'Baum' => { 353 'knoten' => $liste[ $i + 1 ]{'Baum'}{'knoten'}, 354 'links' => $liste[$i]{'Baum'}, 355 'rechts' => $liste[ $i + 2 ]{'Baum'} 356 } 357 } 358 ); 359 $gefunden = 1; 360 } 361 } 362 } 363 if ( !$gefunden ) { 364 365 # Funktion 366 for ( $i = 0 ; $i < scalar @liste - 1 ; $i++ ) { 367 if ( ( $liste[$i]{'Typ'} eq "Funktion" ) 368 && ( $liste[ $i + 1 ]{'Typ'} eq "Term" ) 369 && ( !$gefunden ) ) 370 { 371 if ( $liste[$i]{'Inhalt'} eq "exp" ) { 372 splice( 373 @liste, $i, 2, 374 { 375 'Inhalt' => "(" 376 . exp(1) . "\^" 377 . $liste[ $i + 1 ]{'Inhalt'} . ")", 378 'Typ' => "Term", 379 'Baum' => { 380 'knoten' => "^", 381 'links' => { 382 'knoten' => exp(1), 383 'links' => undef, 384 'rechts' => undef 385 }, 386 'rechts' => $liste[ $i + 1 ]{'Baum'} 387 } 388 } 389 ); 390 } 391 else { 392 splice( 393 @liste, $i, 2, 394 { 395 'Inhalt' => "(" 396 . $liste[$i]{'Inhalt'} 397 . $liste[ $i + 1 ]{'Inhalt'} . ")", 398 'Typ' => "Term", 399 'Baum' => { 400 'knoten' => $liste[$i]{'Baum'}{'knoten'}, 401 'links' => $liste[ $i + 1 ]{'Baum'}, 402 'rechts' => undef 403 } 404 } 405 ); 406 } 407 $gefunden = 1; 408 } 409 } 410 } 411 if ( !$gefunden ) { 412 413 # Addition und Subtraktion 414 for ( $i = 0 ; $i < scalar @liste - 2 ; $i++ ) { 415 if ( 416 ( $liste[$i]{'Typ'} eq "Term" ) 417 && ( ( $liste[ $i + 1 ]{'Typ'} eq "plus" ) 418 || ( $liste[ $i + 1 ]{'Typ'} eq "minus" ) ) 419 && ( $liste[ $i + 2 ]{'Typ'} eq "Term" ) 420 && ( !$gefunden ) 421 ) 422 { 423 splice( 424 @liste, $i, 3, 425 { 426 'Inhalt' => "(" 427 . $liste[$i]{'Inhalt'} 428 . $liste[ $i + 1 ]{'Inhalt'} 429 . $liste[ $i + 2 ]{'Inhalt'} . ")", 430 'Typ' => "Term", 431 'Baum' => { 432 'knoten' => $liste[ $i + 1 ]{'Baum'}{'knoten'}, 433 'links' => $liste[$i]{'Baum'}, 434 'rechts' => $liste[ $i + 2 ]{'Baum'} 435 } 436 } 437 ); 438 $gefunden = 1; 439 } 440 } 441 } 442 if ( !$gefunden ) { 443 444 # Term mit Vorzeichen 445 for ( $i = 0 ; $i < scalar @liste - 1 ; $i++ ) { 446 if ( 447 ( 448 ( $liste[$i]{'Typ'} eq "plus" ) 449 || ( $liste[$i]{'Typ'} eq "minus" ) 450 ) 451 && ( $liste[ $i + 1 ]{'Typ'} eq "Term" ) 452 ) 453 { 454 splice( 455 @liste, $i, 2, 456 { 457 'Inhalt' => "(0" 458 . $liste[$i]{'Inhalt'} 459 . $liste[ $i + 1 ]{'Inhalt'} . ")", 460 'Typ' => "Term", 461 'Baum' => { 462 'knoten' => $liste[$i]{'Baum'}{'knoten'}, 463 'links' => { 464 'knoten' => 0, 465 'links' => undef, 466 'rechts' => undef 467 }, 468 'rechts' => $liste[ $i + 1 ]{'Baum'} 469 } 470 } 471 ); 472 $gefunden = 1; 473 } 474 } 475 } 476 477 } while ($gefunden); 478 479 #ausgabeliste(@liste); 480 return @liste; 481 } 482 483 sub regelwerkupn { 484 my @liste = @_; 485 my ( @klammerterm, $i, $j, $gefunden, $klammerauf, $klammerzu, 486 $klammertiefe ); 487 488 do { 489 $gefunden = 0; 490 if ( !$gefunden ) { 491 492 $klammerzu = $klammerauf = $klammertiefe = 0; 493 494 # Klammern: 495 # Wenn eine oeffnende Klammer gefunden wurde, dann wird der Zaehler klammertiefe erhoeht, 496 # bei einer schliessenden Klammer erniedrigt. 497 # Bei korrekter Klammerung ist der Zaehler am Ende 0 498 # und es wird die regelwerk-Funktion auf den Inhalt der Klammer angewendet. 499 500 for ( $i = 0 ; $i < scalar @liste ; $i++ ) { 501 502 if ( $liste[$i]{'Typ'} eq "(" ) { 503 if ( ( $klammertiefe == 0 ) ) { 504 $klammerauf = $i; 505 } 506 $klammertiefe++; 507 } 508 if ( $liste[$i]{'Typ'} eq ")" ) { 509 $klammertiefe--; 510 if ( $klammertiefe == 0 ) { 511 $klammerzu = $i; 512 } 513 } 514 515 } 516 ## Fehler wenn klammertiefe != 0 muss noch bearbeitet werden 517 518 if ( $klammerauf != $klammerzu ) { 519 520 @klammerterm = (); 521 for ( $j = $klammerauf + 1 ; $j <= $klammerzu - 1 ; $j++ ) { 522 push @klammerterm, 523 { 524 'Inhalt' => $liste[$j]{'Inhalt'}, 525 'Typ' => $liste[$j]{'Typ'}, 526 'Baum' => { 527 'knoten' => $liste[$j]{'Baum'}{'knoten'}, 528 'links' => undef, 529 'rechts' => undef 530 } 531 }; 532 } 533 534 splice( 535 @liste, $klammerauf, 536 $klammerzu - $klammerauf + 1, 537 regelwerkupn(@klammerterm) 538 ); 539 $gefunden = 1; 540 541 } 542 543 } 544 if ( !$gefunden ) { 545 546 # Potenzieren 547 for ( $i = 0 ; $i < scalar @liste - 2 ; $i++ ) { 548 if ( ( $liste[$i]{'Typ'} eq "Term" ) 549 && ( $liste[ $i + 1 ]{'Typ'} eq "hoch" ) 550 && ( $liste[ $i + 2 ]{'Typ'} eq "Term" ) ) 551 { 552 553 if ( $liste[ $i + 2 ]{'Inhalt'} == 2 ) { 554 splice( 555 @liste, $i, 3, 556 { 557 'Inhalt' => "(" 558 . $liste[$i]{'Inhalt'} 559 . $liste[ $i + 1 ]{'Inhalt'} 560 . $liste[ $i + 2 ]{'Inhalt'} . ")", 561 'Typ' => "Term", 562 'Baum' => { 563 'knoten' => "mul", 564 'links' => $liste[$i]{'Baum'}, 565 'rechts' => { 566 'knoten' => "dup", 567 'links' => undef, 568 'rechts' => undef 569 }, 570 } 571 } 572 ); 573 } 574 else { 575 576 splice( 577 @liste, $i, 3, 578 { 579 'Inhalt' => "(" 580 . $liste[$i]{'Inhalt'} 581 . $liste[ $i + 1 ]{'Inhalt'} 582 . $liste[ $i + 2 ]{'Inhalt'} . ")", 583 'Typ' => "Term", 584 'Baum' => { 585 'knoten' => 586 $liste[ $i + 1 ]{'Baum'}{'knoten'}, 587 'links' => $liste[$i]{'Baum'}, 588 'rechts' => $liste[ $i + 2 ]{'Baum'} 589 } 590 } 591 ); 592 } 593 $gefunden = 1; 594 595 ausgabeliste(@liste); 596 } 597 } 598 } 599 if ( !$gefunden ) { 600 601 # Multiplikation und Division 602 for ( $i = 0 ; $i < scalar @liste - 2 ; $i++ ) { 603 if ( 604 ( $liste[$i]{'Typ'} eq "Term" ) 605 && ( ( $liste[ $i + 1 ]{'Typ'} eq "mal" ) 606 || ( $liste[ $i + 1 ]{'Typ'} eq "geteilt" ) ) 607 && ( $liste[ $i + 2 ]{'Typ'} eq "Term" ) 608 ) 609 { 610 splice( 611 @liste, $i, 3, 612 { 613 'Inhalt' => "(" 614 . $liste[$i]{'Inhalt'} 615 . $liste[ $i + 1 ]{'Inhalt'} 616 . $liste[ $i + 2 ]{'Inhalt'} . ")", 617 'Typ' => "Term", 618 'Baum' => { 619 'knoten' => $liste[ $i + 1 ]{'Baum'}{'knoten'}, 620 'links' => $liste[$i]{'Baum'}, 621 'rechts' => $liste[ $i + 2 ]{'Baum'} 622 } 623 } 624 ); 625 $gefunden = 1; 626 627 ausgabeliste(@liste); 628 } 629 } 630 } 631 if ( !$gefunden ) { 632 633 # Funktion 634 for ( $i = 0 ; $i < scalar @liste - 1 ; $i++ ) { 635 if ( ( $liste[$i]{'Typ'} eq "Funktion" ) 636 && ( $liste[ $i + 1 ]{'Typ'} eq "Term" ) ) 637 { 638 if ( $liste[$i]{'Inhalt'} eq "exp" ) { 639 splice( 640 @liste, $i, 2, 641 { 642 'Inhalt' => "(" 643 . exp(1) . "\^" 644 . $liste[ $i + 1 ]{'Inhalt'} . ")", 645 'Typ' => "Term", 646 'Baum' => { 647 'knoten' => "^", 648 'links' => { 649 'knoten' => exp(1), 650 'links' => undef, 651 'rechts' => undef 652 }, 653 'rechts' => $liste[ $i + 1 ]{'Baum'} 654 } 655 } 656 ); 657 } 658 else { 659 splice( 660 @liste, $i, 2, 661 { 662 'Inhalt' => "(" 663 . $liste[$i]{'Inhalt'} 664 . $liste[ $i + 1 ]{'Inhalt'} . ")", 665 'Typ' => "Term", 666 'Baum' => { 667 'knoten' => $liste[$i]{'Baum'}{'knoten'}, 668 'links' => $liste[ $i + 1 ]{'Baum'}, 669 'rechts' => undef 670 } 671 } 672 ); 673 } 674 $gefunden = 1; 675 676 ausgabeliste(@liste); 677 } 678 } 679 } 680 if ( !$gefunden ) { 681 682 # Addition und Subtraktion 683 for ( $i = 0 ; $i < scalar @liste - 2 ; $i++ ) { 684 if ( ( $liste[$i]{'Typ'} eq "Term" ) 685 && ( ( $liste[ $i + 1 ]{'Typ'} eq "plus" ) ) 686 && ( $liste[ $i + 2 ]{'Typ'} eq "Term" ) ) 687 { 688 splice( 689 @liste, $i, 3, 690 { 691 'Inhalt' => "(" 692 . $liste[$i]{'Inhalt'} 693 . $liste[ $i + 1 ]{'Inhalt'} 694 . $liste[ $i + 2 ]{'Inhalt'} . ")", 695 'Typ' => "Term", 696 'Baum' => { 697 'knoten' => $liste[ $i + 1 ]{'Baum'}{'knoten'}, 698 'links' => $liste[$i]{'Baum'}, 699 'rechts' => $liste[ $i + 2 ]{'Baum'} 700 } 701 } 702 ); 703 $gefunden = 1; 704 705 ausgabeliste(@liste); 706 } 707 } 708 } 709 710 if ( !$gefunden ) { 711 712 # Addition und Subtraktion 713 for ( $i = 0 ; $i < scalar @liste - 2 ; $i++ ) { 714 if ( ( $liste[$i]{'Typ'} eq "Term" ) 715 && ( ( $liste[ $i + 1 ]{'Typ'} eq "minus" ) ) 716 && ( $liste[ $i + 2 ]{'Typ'} eq "Term" ) ) 717 { 718 splice( 719 @liste, $i, 3, 720 { 721 'Inhalt' => "(" 722 . $liste[$i]{'Inhalt'} 723 . $liste[ $i + 1 ]{'Inhalt'} 724 . $liste[ $i + 2 ]{'Inhalt'} . ")", 725 'Typ' => "Term", 726 'Baum' => { 727 'knoten' => "minus", 728 'links' => $liste[$i]{'Baum'}, 729 'rechts' => $liste[ $i + 2 ]{'Baum'} 730 } 731 } 732 ); 733 $gefunden = 1; 734 735 ausgabeliste(@liste); 736 } 737 } 738 } 739 740 if ( !$gefunden ) { 741 742 # Term mit Vorzeichen 743 for ( $i = 0 ; $i < scalar @liste - 1 ; $i++ ) { 744 if ( 745 ( 746 ( $liste[$i]{'Typ'} eq "plus" ) 747 || ( $liste[$i]{'Typ'} eq "minus" ) 748 ) 749 && ( $liste[ $i + 1 ]{'Typ'} eq "Term" ) 750 ) 751 { 752 splice( 753 @liste, $i, 2, 754 { 755 'Inhalt' => "(0" 756 . $liste[$i]{'Inhalt'} 757 . $liste[ $i + 1 ]{'Inhalt'} . ")", 758 'Typ' => "Term", 759 'Baum' => { 760 'knoten' => "neg", 761 'links' => undef, 762 'rechts' => $liste[ $i + 1 ]{'Baum'} 763 } 764 } 765 ); 766 $gefunden = 1; 767 768 ausgabeliste(@liste); 769 } 770 } 771 } 772 } while ($gefunden); 773 774 ausgabeliste(@liste); 775 return @liste; 776 } 777 778 sub rechenbaum_ausrechnen { 779 my $baum = shift; 780 my $variablen = shift; 781 782 #print $$baum{'knoten'} . "\n"; 783 if ( $$baum{'knoten'} eq "*" ) { 784 return rechenbaum_ausrechnen( $$baum{'links'}, $variablen ) * 785 rechenbaum_ausrechnen( $$baum{'rechts'}, $variablen ); 786 } 787 elsif ( $$baum{'knoten'} eq ":" ) { 788 return rechenbaum_ausrechnen( $$baum{'links'}, $variablen ) / 789 rechenbaum_ausrechnen( $$baum{'rechts'}, $variablen ); 790 } 791 elsif ( $$baum{'knoten'} eq "/" ) { 792 return rechenbaum_ausrechnen( $$baum{'links'}, $variablen ) / 793 rechenbaum_ausrechnen( $$baum{'rechts'}, $variablen ); 794 } 795 elsif ( $$baum{'knoten'} eq "+" ) { 796 797 return rechenbaum_ausrechnen( $$baum{'links'}, $variablen ) + 798 rechenbaum_ausrechnen( $$baum{'rechts'}, $variablen ); 799 } 800 elsif ( $$baum{'knoten'} eq "^" ) { 801 802 return rechenbaum_ausrechnen( $$baum{'links'}, $variablen ) 803 **rechenbaum_ausrechnen( $$baum{'rechts'}, $variablen ); 804 } 805 806 elsif ( $$baum{'knoten'} eq "-" ) { 807 return rechenbaum_ausrechnen( $$baum{'links'}, $variablen ) - 808 rechenbaum_ausrechnen( $$baum{'rechts'}, $variablen ); 809 } 810 elsif ( defined $$variablen{ $$baum{'knoten'} } ) { 811 return $$variablen{ $$baum{'knoten'} }; 812 } 813 elsif ( $$baum{'knoten'} eq "sin" ) { 814 return sin( rechenbaum_ausrechnen( $$baum{'links'}, $variablen ) ); 815 } 816 elsif ( $$baum{'knoten'} eq "cos" ) { 817 return cos( rechenbaum_ausrechnen( $$baum{'links'}, $variablen ) ); 818 } 819 elsif ( $$baum{'knoten'} eq "tan" ) { 820 return tan( rechenbaum_ausrechnen( $$baum{'links'}, $variablen ) ); 821 } 822 elsif ( $$baum{'knoten'} eq "asin" ) { 823 return arcsin( rechenbaum_ausrechnen( $$baum{'links'}, $variablen ) ); 824 } 825 elsif ( $$baum{'knoten'} eq "acos" ) { 826 return acos( rechenbaum_ausrechnen( $$baum{'links'}, $variablen ) ); 827 } 828 elsif ( $$baum{'knoten'} eq "log" ) { 829 return log( rechenbaum_ausrechnen( $$baum{'links'}, $variablen ) ); 830 } 831 elsif ( $$baum{'knoten'} eq "ceiling" ) { 832 return aufrunden( rechenbaum_ausrechnen( $$baum{'links'}, $variablen ), 833 1 ); 834 } 835 elsif ( $$baum{'knoten'} eq "floor" ) { 836 return abrunden( rechenbaum_ausrechnen( $$baum{'links'}, $variablen ), 837 1 ); 838 } 839 elsif ( $$baum{'knoten'} eq "truncate" ) { 840 841 if ( rechenbaum_ausrechnen( $$baum{'links'}, $variablen ) < 0 ) { 842 return aufrunden( 843 rechenbaum_ausrechnen( $$baum{'links'}, $variablen ), 1 ); 844 } 845 else { 846 return abrunden( 847 rechenbaum_ausrechnen( $$baum{'links'}, $variablen ), 1 ); 848 } 849 850 } 851 elsif ( $$baum{'knoten'} eq "round" ) { 852 return round( rechenbaum_ausrechnen( $$baum{'links'}, $variablen ) ); 853 } 854 elsif ( $$baum{'knoten'} eq "sqrt" ) { 855 return sqrt( rechenbaum_ausrechnen( $$baum{'links'}, $variablen ) ); 856 } 857 elsif ( $$baum{'knoten'} eq "abs" ) { 858 return abs( rechenbaum_ausrechnen( $$baum{'links'}, $variablen ) ); 859 } 860 elsif ( $$baum{'knoten'} eq "fact" ) { 861 return fact( rechenbaum_ausrechnen( $$baum{'links'}, $variablen ) ); 862 } 863 elsif ( $$baum{'knoten'} eq "exp" ) { 864 return exp( rechenbaum_ausrechnen( $$baum{'links'}, $variablen ) ); 865 } 866 else { 867 868 # ACHTUNG: Keine Fehlerbehandlung!!! 869 return $$baum{'knoten'}; 870 } 871 872 } 873 874 sub polnisch { 875 my $ref = shift; 876 $hilfsstring = $$ref{'knoten'} . " " . " " . $hilfsstring; 877 878 # suche rechts (rekursiv) 879 if ( defined( $$ref{'rechts'} ) ) { polnisch( $$ref{'rechts'} ); } 880 881 # suche links (rekursiv) 882 if ( defined( $$ref{'links'} ) ) { polnisch( $$ref{'links'} ); } 883 884 # Ausgabe des Knotens 885 return $hilfsstring; 886 } 887 888 sub upn { 889 my $funktionsausdruck = shift; 890 my @ergebnis = regelwerkupn( tokenizer($funktionsausdruck) ); 891 my $funktion; 892 $funktion = polnisch( $ergebnis[0]{'Baum'} ); 893 $funktion =~ s/\*/mul/g; 894 $funktion =~ s/\+/add/g; 895 $funktion =~ s/minus/sub/g; 896 $funktion =~ s/\//div/g; 897 $funktion =~ s/\:/div/g; 898 $funktion =~ s/\^/exp/g; 899 $funktion =~ s/pi/3.14159/g; 900 901 if ( scalar @ergebnis != 1 ) { 902 printf("Fehler \n"); 903 ausgabeliste(@ergebnis); 904 } 905 else { 906 $hilfsstring = ""; 907 return $funktion; 908 909 } 910 } 911 912 sub dreidimensional { 913 my ( $funktion, $variable ) = @_; 914 915 my $gefunden; 916 $gefunden = 0; 917 918 if ( $funktion =~ /$variable/ ) { return 1; } 919 else { return 0; } 920 921 } 922 923 1; |
A.8 Das Modul für Gitter
gitter-pm.pm |
---|
1 ############################################################## 2 #Modul fuer kariertes Papier 3 #Letzte Aenderung: 12.08.2011 4 ############################################################## 5 use POSIX qw /floor ceil/; 6 use Math::Trig; 7 use strict; 8 use warnings; 9 10 my $gittersetzen = 0; 11 my $matheheftsetzen = 0; 12 13 sub setgitter { 14 my ($wert) = @_; 15 if ( $gittersetzen == 3 ) { 16 if ( $wert == 1 ) { $gittersetzen = $gittersetzen; } 17 else { $gittersetzen = $wert; } 18 } 19 else { $gittersetzen = $wert; } 20 21 } 22 23 sub getgitter { return $gittersetzen; } 24 25 sub setmatheheft { 26 my ($wert) = @_; 27 if ( $matheheftsetzen == 3 ) { 28 if ( $wert == 1 ) { $matheheftsetzen = $matheheftsetzen; } 29 else { $matheheftsetzen = $wert; } 30 } 31 else { $matheheftsetzen = $wert; } 32 setgitter(2) 33 34 } 35 36 sub getmatheheft { return $matheheftsetzen; } 37 38 sub kariert { 39 my ( 40 $layer, $farbe, $linienstaerke, $linienart, 41 $xminkariert, $yminkariert, $xmaxkariert, $ymaxkariert, 42 $abstandx, $dickx, $ganzdickx, $abstandy, 43 $dicky, $ganzdicky 44 ) = @_; 45 my ( 46 $xminersatz, $xmaxersatz, $yminersatz, 47 $ymaxersatz, $dickersatzx, $ganzdickersatzx, 48 $abstandxersatz, $dickersatzy, $ganzdickersatzy, 49 $abstandyersatz 50 ); 51 52 settexthier(""); 53 setgrossskalierung( $xmaxkariert - $xminkariert, 54 $ymaxkariert - $yminkariert ); 55 56 setachsengraph( $xminkariert, $yminkariert, $xmaxkariert, $ymaxkariert ); 57 setmaxberechnung(0); 58 59 if ( $abstandx == 0 ) { 60 $abstandx = aufrunden( $xmaxkariert * 10000, 1 ) / 10000; 61 $abstandx = schoenetabelle( $abstandx * 10000 ) / 10000; 62 63 } 64 if ( $abstandy == 0 ) { 65 $abstandy = aufrunden( $ymaxkariert * 10000, 1 ) / 10000; 66 $abstandy = schoenetabelle( $abstandy * 10000 ) / 10000; 67 68 } 69 if ( $dickx == 0 ) { 70 $dickersatzx = $abstandx; 71 $abstandxersatz = 0; 72 } 73 else { 74 $dickersatzx = $dickx; 75 $abstandxersatz = $abstandx; 76 } 77 if ( $dicky == 0 ) { 78 $dickersatzy = $abstandy; 79 $abstandyersatz = 0; 80 } 81 else { 82 $dickersatzy = $dicky; 83 $abstandyersatz = $abstandy; 84 } 85 86 $xminersatz = $xminkariert / $abstandx; 87 $xmaxersatz = $xmaxkariert / $abstandx; 88 $yminersatz = $yminkariert / $abstandy; 89 $ymaxersatz = $ymaxkariert / $abstandy; 90 91 paarohneminmax( getschnitt("x"), getschnitt("y") ); 92 paarohneminmax( $xminersatz, $yminersatz ); 93 paarohneminmax( $xmaxersatz, $ymaxersatz ); 94 schreibeinarray( 95 $layer, 96 sprintf( 97 "\\psgrid[xunit=%g, yunit=%g, gridwidth=%gpt, gridcolor=%s, griddots=0, gridlabels=0pt, subgriddiv=0, subgridwidth=0pt, subgridcolor=%s, subgriddots=0]%s%%", 98 $abstandx, $abstandy, $linienstaerke, 99 $farbe, $farbe, gettexthier() 100 ) 101 ); 102 settexthier(""); 103 104 #Die zweite dicke Linie wird gezeichnet 105 if ( $dickersatzx == 0 ) { 106 $xminersatz = $xminkariert; 107 $xmaxersatz = $xmaxkariert; 108 } 109 else { 110 if ( $dickersatzx > $xmaxkariert ) { 111 $dickersatzx = 0; 112 $xminersatz = $xminkariert; 113 $xmaxersatz = $xmaxkariert; 114 } 115 else { 116 $xminersatz = $xminkariert / $dickersatzx; 117 $xmaxersatz = $xmaxkariert / $dickersatzx; 118 } 119 } 120 if ( $dickersatzy == 0 ) { 121 $yminersatz = $yminkariert; 122 $ymaxersatz = $ymaxkariert; 123 } 124 else { 125 if ( $dickersatzy > $ymaxkariert ) { 126 $dickersatzy = 0; 127 $yminersatz = $yminkariert; 128 $ymaxersatz = $ymaxkariert; 129 } 130 else { 131 $yminersatz = $yminkariert / $dickersatzy; 132 $ymaxersatz = $ymaxkariert / $dickersatzy; 133 } 134 } 135 if ( ( $dickx != 0 ) || ( $dicky != 0 ) ) { 136 drei( 137 getschnitt("x"), getschnitt("y"), 138 $xminersatz, $yminersatz, 139 $xmaxersatz, $ymaxersatz 140 ); 141 142 schreibeinarray( 143 $layer, 144 sprintf( 145 "\\psgrid[xunit=%g, yunit=%g, gridwidth=%gpt, gridcolor=%s!100, griddots=0, gridlabels=0pt, subgriddiv=0, subgridwidth=0pt, subgridcolor=%s, 146 subgriddots=0]%s%% ", 147 $dickersatzx, $dickersatzy, $linienstaerke * 2, $farbe, $farbe, 148 gettexthier() 149 ) 150 ); 151 152 } 153 154 # Die ganz dicke Linie wird gezeichnet 155 if ( $ganzdickx == 0 ) { 156 $ganzdickersatzx = $abstandx; 157 $abstandxersatz = 0; 158 } 159 else { 160 $ganzdickersatzx = $ganzdickx; 161 $abstandxersatz = $abstandx; 162 } 163 if ( $ganzdicky == 0 ) { 164 $ganzdickersatzy = $abstandy; 165 $abstandyersatz = 0; 166 } 167 else { 168 $ganzdickersatzy = $ganzdicky; 169 $abstandyersatz = $abstandy; 170 } 171 if ( $ganzdickersatzx == 0 ) { 172 $xminersatz = $xminkariert; 173 $xmaxersatz = $xmaxkariert; 174 } 175 else { 176 if ( $ganzdickersatzx > $xmaxkariert ) { 177 $ganzdickersatzx = 0; 178 $xminersatz = $xminkariert; 179 $xmaxersatz = $xmaxkariert; 180 } 181 else { 182 $xminersatz = $xminkariert / $ganzdickersatzx; 183 $xmaxersatz = $xmaxkariert / $ganzdickersatzx; 184 } 185 } 186 if ( $ganzdickersatzy == 0 ) { 187 $yminersatz = $yminkariert; 188 $ymaxersatz = $ymaxkariert; 189 } 190 else { 191 if ( $ganzdickersatzy > $ymaxkariert ) { 192 $ganzdickersatzy = 0; 193 $yminersatz = $yminkariert; 194 $ymaxersatz = $ymaxkariert; 195 } 196 else { 197 $yminersatz = $yminkariert / $ganzdickersatzy; 198 $ymaxersatz = $ymaxkariert / $ganzdickersatzy; 199 } 200 } 201 if ( ( $ganzdickx != 0 ) || ( $ganzdicky != 0 ) ) { 202 drei( 203 getschnitt("x"), getschnitt("y"), 204 $xminersatz, $yminersatz, 205 $xmaxersatz, $ymaxersatz 206 ); 207 schreibeinarray( 208 $layer, 209 sprintf( 210 "\\psgrid[xunit=%g, yunit=%g, gridwidth=%gpt, gridcolor=%s!100, griddots=0, gridlabels=0pt, subgriddiv=0, subgridwidth=0pt, subgridcolor=%s, subgriddots=0]%s%% ", 211 $ganzdickersatzx, $ganzdickersatzy, $linienstaerke * 3, 212 $farbe, $farbe, gettexthier() 213 ) 214 ); 215 216 } 217 setmaxberechnung(1); 218 settexthier(""); 219 220 minmax( 221 $xminkariert - $dickx, 222 $yminkariert - $dicky, 223 $xmaxkariert + $dickx, 224 $ymaxkariert + $dicky 225 ); 226 minmax( 227 $xminkariert + $dickx, 228 $yminkariert + $dicky, 229 $xmaxkariert - $dickx, 230 $ymaxkariert - $dicky 231 ); 232 233 } 234 235 sub grid { 236 my ( 237 $layer, $farbe, $linienstaerke, $linienart, 238 $xmingrid, $ymingrid, $xmaxgrid, $ymaxgrid, 239 $abstandx, $dickx, $ganzdickx, $abstandy, 240 $dicky, $ganzdicky 241 ) = @_; 242 243 drei( 244 getschnitt("x"), 245 getschnitt("y"), 246 $xmingrid / $abstandx, 247 $ymingrid / $abstandy, 248 $xmaxgrid / $abstandx, 249 $ymaxgrid / $abstandy 250 ); 251 setgrossskalierung( $xmaxgrid - $xmingrid, $ymaxgrid - $ymingrid ); 252 schreibeinarray( 253 $layer, 254 sprintf( 255 "\\psgrid[xunit=%g, yunit=%g, gridwidth=%gpt, gridcolor=%s, griddots=%g, gridlabels=0pt, gridlabelcolor=%s, subgriddiv=0, subgriddots=0]%s%% ", 256 $abstandx, $abstandy, $linienstaerke, $farbe, 257 $dickx, $farbe, gettexthier() 258 ) 259 ); 260 settexthier(""); 261 262 } 263 264 sub millimeterpapier { 265 my ( $layer, $farbe, $xminheft, $yminheft, $xmaxheft, $ymaxheft ) = @_; 266 kariert( 267 $layer, $farbe, 0.25, "solid", $xminheft, $yminheft, 268 $xmaxheft, $ymaxheft, 0.1, 0.5, 1, 0.1, 269 0.5, 1 270 ); 271 } 272 273 sub matheheft { 274 my ( $layer, $farbe, $xminheft, $yminheft, $xmaxheft, $ymaxheft ) = @_; 275 kariert( 276 $layer, $farbe, 0.5, "solid", $xminheft, $yminheft, 277 $xmaxheft, $ymaxheft, 0.5, 0, 0, 0.5, 278 0, 0 279 ); 280 } 281 1; 282 |
A.9 Das Modul für Graphen
graphen-pm.pm |
---|
1 ################################################################## 2 # Modul fuer allgemeine Funktionen des Plotter-Skriptes in Pstricks 3 # 4 # Letzte Aenderung: 10.01.2012 5 ################################################################## 6 use POSIX qw /floor ceil/; 7 use Math::Trig; 8 use strict; 9 use warnings; 10 my ( $zahler, $extern, $dateiname ); 11 12 sub setextern { 13 my ($ext) = @_; 14 $extern = $ext; 15 } 16 17 sub getextern { return $extern; } 18 19 my ($xminachse, $xmaxachse, $yminachse, $ymaxachse, $xsetzen1, $xsetzen2, 20 $ysetzen1, $ysetzen2); 21 22 $xminachse = $xmaxachse = $yminachse = $ymaxachse = $xsetzen1 = $xsetzen2 = 23 $ysetzen1 = $ysetzen2 = 0; 24 25 sub achsengraph { 26 my ( $x1, $y1 ) = @_; 27 setachsengraph( $x1, $y1, $x1, $y1 ); 28 } 29 30 sub setachsengraphrueck { 31 $xminachse=$xmaxachse=$yminachse=$ymaxachse=0; 32 } 33 34 sub setachsengraph { 35 my ( $xmin, $ymin, $xmax, $ymax ) = @_; 36 37 38 if ( ( istzahl($xmin) == 1 ) 39 && ( istzahl($ymin) == 1 ) 40 && ( istzahl($xmax) == 1 ) 41 && ( istzahl($ymax) == 1 ) ) 42 { 43 44 45 if ( $xsetzen1 == 0 ) { 46 $xminachse = $xmin; 47 $xsetzen1 = 1; 48 } 49 else {$xminachse =min($xminachse,$xmin); } 50 if ( $xsetzen2 == 0 ) { 51 $xmaxachse = $xmax; 52 $xsetzen2 = 1; 53 } 54 else {$xmaxachse=max($xmaxachse,$xmax);} 55 if ( $ysetzen1 == 0 ) { 56 $yminachse = $ymin; 57 $ysetzen1 = 1; 58 } 59 else {$yminachse =min($yminachse,$ymin);} 60 if ( $ysetzen2 == 0 ) { 61 $ymaxachse = $ymax; 62 $ysetzen2 = 1; 63 } 64 else {$ymaxachse=max($ymaxachse,$ymax); } 65 } 66 } 67 68 sub getachsengraph { 69 my ($text) = @_; 70 if ( $text eq "xmin" ) { return $xminachse; } 71 if ( $text eq "ymin" ) { return $yminachse; } 72 if ( $text eq "xmax" ) { return $xmaxachse; } 73 if ( $text eq "ymax" ) { return $ymaxachse; } 74 } 75 76 $dateiname = 0; 77 78 ## Zeichnen von Funktionen 79 80 sub graph { 81 my ( $layer, $func, $x1, $y1, $z1, $x2, $y2, $z2, $linienart, 82 $linienstaerke, $farbe, $parameter ) 83 = @_; 84 85 my ( $xmin, $xmax, $ymin, $ymax, $parameterweiter, $x, $y, $z, $i, $j, 86 $jzahler, $abstandx, $abstandy, $dx, $dy, $n, $xzeichnen, $yzeichnen, 87 $innen, $aussen, $wechsel, $wechselhilf1, $wechselhilf2, $start ); 88 89 $parameterweiter = ""; 90 $xzeichnen = 1; 91 $yzeichnen = 0; 92 $innen = $aussen = 0; 93 $wechselhilf1 = $wechselhilf2 = 0; 94 $wechsel = 1; 95 $start = 0; 96 97 settexthier(""); 98 99 if ( dreidimensional( $func, "y" ) == 0 ) { 100 101 setachsengraph( $x1, $y1, $x2, $y2 ); 102 minmax( $x1, $y1, $x2, $y2 ); 103 if ( $y1 != $y2 ) { 104 105 for ( $j = $x1 ; $j <= $x2 ; $j = $j + ( $x2 - $x1 ) / 100 ) { 106 if ( ( calcfunk( $func, "x", $j ) <= $y2 ) 107 && ( calcfunk( $func, "x", $j ) >= $y1 ) ) 108 { 109 110 if ( $start == 0 ) { 111 $wechsel = 1; 112 $wechselhilf1 = $wechsel; 113 $start = 1; 114 } 115 116 if ( $wechsel == $wechselhilf1 ) {$wechsel = $wechsel;} 117 else {$wechsel++;} 118 $wechselhilf1 = $wechsel; 119 $innen++; 120 121 } 122 else { 123 124 if ( $start == 0 ) { 125 $wechsel = 1; 126 $wechselhilf2 = $wechsel; 127 $start = 1; 128 } 129 130 if ( $wechsel == $wechselhilf2 ) {$wechsel = $wechsel;} 131 else {$wechsel++;} 132 $wechselhilf2 = $wechsel; 133 134 $aussen++; 135 136 } 137 } 138 139 $xmin = calcxmin( $func, $x1, $x2, $y1, $y2 ); 140 $xmax = calcxmax( $func, $x1, $x2, $y1, $y2 ); 141 if ( $xmin == $xmax ) { 142 $xmin = $x1; 143 $xmax = $x2; 144 } 145 } 146 else { 147 $xmin = $x1; 148 $xmax = $x2; 149 } 150 151 if ( getknoten() == 1 ) { 152 if ( get3dzeichnen() == 1 ) { } 153 else { 154 knotensetzen( "\\pnode", $xmin, calcfunk( $func, "x", $xmin ), 155 "" ); 156 knotensetzen( "\\pnode", $xmax, calcfunk( $func, "x", $xmax ), 157 "" ); 158 } 159 } 160 161 # kommentar($layer,$wechsel); 162 163 # kommentar($layer,aufrunden( (schoenetabelle( ($x2-$x1) * 10000 ) / 10000), 1)); 164 # kommentar($layer,schoenetabelle( ($x2-$x1) * 10000 ) / 10000); 165 166 if ( $wechsel <= 3 ) { 167 168 if ( ( $func =~ /cos/ ) 169 || ( $func =~ /sin/ ) 170 || ( $func =~ /tan/ ) ) 171 { 172 if ( $parameter =~ /algebraic/ ) { $parameterweiter = ""; } 173 else { $parameterweiter = "algebraic, "; } 174 } 175 $parameterweiter = $parameterweiter . $parameter; 176 177 if ( $parameterweiter =~ /algebraic/ ) { 178 klammer($xmin); 179 klammer($xmax); 180 klammer($func); 181 befehlerzeugen( $layer, "psplot", $farbe, $linienart, 182 $linienstaerke, $parameterweiter, "", gettexthier() ); 183 } 184 else { 185 klammer($xmin); 186 klammer($xmax); 187 klammer( upn($func) ); 188 befehlerzeugen( $layer, "psplot", $farbe, $linienart, 189 $linienstaerke, $parameterweiter, "", gettexthier() ); 190 } 191 minmax( $xmin, $y1, $xmax, $y2 ); 192 } 193 else { 194 settexthier(""); 195 for ($j = $x1 ;$j <= $x2 ;$j =$j +aufrunden( ( schoenetabelle( ( $x2 - $x1 ) * 10000 ) / 10000 ),1 ) / 10) { 196 if ( ( calcfunk( $func, "x", $j ) <= $y2 ) 197 && ( calcfunk( $func, "x", $j ) >= $y1 ) ) 198 { 199 200 paarohneminmax( nachkommastellen( $j, 3 ), 201 nachkommastellen( calcfunk( $func, "x", $j ), 3 ) ); 202 } 203 else { 204 liniekopf( $layer, $linienart, $linienstaerke, $farbe, 205 $parameterweiter, "", gettexthier() ); 206 settexthier(""); 207 } 208 209 } 210 211 # listplot( $layer, "", $linienart, $linienstaerke, $farbe, gettexthier() ); 212 213 } 214 } 215 else { 216 setachsengraph3d( $x1, $y1, $z1, $x2, $y2, $z2 ); 217 if ( $z1 == $z2 ) { 218 $ymin = $y1; 219 $ymax = $y2; 220 if ( $parameter =~ /xPlotpoints=([-0-9\.]+)/ ) { 221 $n = $1; 222 $dx = ( $x2 - $x1 ) / $n; 223 } 224 else { $dx = ( $x2 - $x1 ) / 25; } 225 if ( $parameter =~ /yPlotpoints=([-0-9\.]+)/ ) { 226 $n = $1; 227 $dy = ( $y2 - $y1 ) / $n; 228 } 229 else { $dy = ( $y2 - $y1 ) / 25; } 230 231 for ( $i = $y1 ; $i <= $y2 ; $i = $i + $dy ) { 232 for ( $j = $x1 ; $j <= $x2 ; $j = $j + $dx ) { 233 $z = calcfunk3d( $func, "x", $j, "y", $i ); 234 setachsengraph3d( $j, $i, $z, $j, $i, $z ); 235 minmax3d( $j, $i, $z, $j, $i, $z ); 236 } 237 } 238 } 239 else { 240 $ymin = calcymin3d( $func, $x1, $x2, $y1, $y2, $z1, $z2 ); 241 $ymax = calcymax3d( $func, $x1, $x2, $y1, $y2, $z1, $z2 ); 242 setachsengraph3d( $x1, $y1, $z1, $x2, $y2, $z2 ); 243 minmax3d( $x1, $y1, $z1, $x2, $y2, $z2 ); 244 } 245 246 set3dzeichnen(1); 247 248 if ( get3dpstricks() == 1 ) { 249 $parameterweiter = 250 "plotstyle=curve, " . $parameterweiter . $parameter; 251 252 if ( $parameterweiter =~ /algebraic/ ) { 253 254 paar( $x1, $x2 ); 255 paar( $ymin, $ymax ); 256 klammer($func); 257 befehlerzeugen( $layer, "psplotThreeD", $farbe, $linienart, 258 $linienstaerke, $parameterweiter, "", gettexthier() ); 259 } 260 else { 261 paar( $x1, $x2 ); 262 paar( $ymin, $ymax ); 263 klammer( upn($func) ); 264 befehlerzeugen( $layer, "psplotThreeD", $farbe, $linienart, 265 $linienstaerke, $parameterweiter, "", gettexthier() ); 266 } 267 minmax3d( $x1, $ymin, $z1, $x1, $ymax, $z2 ); 268 settexthier(""); 269 270 } 271 else { 272 273 if ( $parameter =~ /xPlotpoints=([-0-9\.]+)/ ) { 274 $n = $1; 275 $parameter =~ s/xPlotpoints=$n//g; 276 $dx = ( $x2 - $x1 ) / $n; 277 } 278 else { $dx = ( $x2 - $x1 ) / 25; } 279 if ( $parameter =~ /yPlotpoints=([-0-9\.]+)/ ) { 280 $n = $1; 281 $parameter =~ s/yPlotpoints=$n//g; 282 $dy = ( $ymax - $ymin ) / $n; 283 } 284 else { $dy = ( $ymax - $ymin ) / 25; } 285 $parameterweiter = $parameterweiter . $parameter; 286 settexthier(""); 287 288 if ( $parameterweiter =~ /drawStyle=xLines/ ) { 289 $parameterweiter =~ s/drawStyle=xLines,//g; 290 $parameterweiter =~ s/drawStyle=xLines//g; 291 $xzeichnen = 1; 292 } 293 if ( $parameterweiter =~ /drawStyle=yLines/ ) { 294 $parameterweiter =~ s/drawStyle=yLines,//g; 295 $parameterweiter =~ s/drawStyle=yLines//g; 296 $yzeichnen = 1; 297 $xzeichnen = 0; 298 } 299 if ( $parameterweiter =~ /drawStyle=xyLines/ ) { 300 $parameterweiter =~ s/drawStyle=xyLines,//g; 301 $parameterweiter =~ s/drawStyle=xyLines//g; 302 $yzeichnen = $xzeichnen = 1; 303 } 304 if ( $parameterweiter =~ /drawStyle=yxLines/ ) { 305 $parameterweiter =~ s/drawStyle=yxLines,//g; 306 $parameterweiter =~ s/drawStyle=yxLines//g; 307 $yzeichnen = $xzeichnen = 1; 308 } 309 $parameterweiter =~ s/hiddenLine=true,//g; 310 $parameterweiter =~ s/hiddenLine=false,//g; 311 $parameterweiter =~ s/hiddenLine=true//g; 312 $parameterweiter =~ s/hiddenLine=false//g; 313 $parameterweiter =~ s/hiddenLine,//g; 314 $parameterweiter =~ s/hiddenLine//g; 315 $n = 0; 316 317 if ( $xzeichnen == 1 ) { 318 for ( $i = $ymin ; $i <= $ymax ; $i = $i + $dy ) { 319 for ( $j = $x1 ; $j <= $x2 ; $j = $j + $dx ) { 320 if ( $z1 == $z2 ) { 321 $z = calcfunk3d( $func, "x", $j, "y", $i ); 322 tripel( 323 nachkommastellen( $j, 4 ), 324 nachkommastellen( $i, 4 ), 325 nachkommastellen( $z, 4 ) 326 ); 327 $n++; 328 } 329 else { 330 if ( ( calcfunk3d( $func, "x", $j, "y", $i ) > $z1 ) 331 && ( calcfunk3d( $func, "x", $j, "y", $i ) < 332 $z2 ) ) 333 { 334 $z = calcfunk3d( $func, "x", $j, "y", $i ); 335 tripel( 336 nachkommastellen( $j, 4 ), 337 nachkommastellen( $i, 4 ), 338 nachkommastellen( $z, 4 ) 339 ); 340 $n++ 341 342 } 343 } 344 345 } 346 if ( $n > 1 ) { 347 liniekopf( $layer, $linienart, $linienstaerke, $farbe, 348 $parameterweiter, "", gettexthier() ); 349 } 350 settexthier(""); 351 $n = 0; 352 } 353 } 354 355 if ( $yzeichnen == 1 ) { 356 357 for ( $j = $x1 ; $j <= $x2 ; $j = $j + $dx ) { 358 for ( $i = $ymin ; $i <= $ymax ; $i = $i + $dy ) { 359 if ( $z1 == $z2 ) { 360 $z = calcfunk3d( $func, "x", $j, "y", $i ); 361 tripel( 362 nachkommastellen( $j, 4 ), 363 nachkommastellen( $i, 4 ), 364 nachkommastellen( $z, 4 ) 365 ); 366 $n++; 367 } 368 else { 369 if ( ( calcfunk3d( $func, "x", $j, "y", $i ) > $z1 ) 370 && ( calcfunk3d( $func, "x", $j, "y", $i ) < 371 $z2 ) ) 372 { 373 $z = calcfunk3d( $func, "x", $j, "y", $i ); 374 tripel( 375 nachkommastellen( $j, 4 ), 376 nachkommastellen( $i, 4 ), 377 nachkommastellen( $z, 4 ) 378 ); 379 $n++ 380 381 } 382 } 383 384 } 385 if ( $n > 1 ) { 386 387 liniekopf( 388 $layer, $linienart, 389 $linienstaerke, $farbe, 390 "plotstyle=curve" . $parameterweiter, "", 391 gettexthier() 392 ); 393 } 394 settexthier(""); 395 $n = 0; 396 } 397 } 398 399 } 400 } 401 settexthier(""); 402 403 $innen = $aussen = 0; 404 $wechselhilf1 = 0; 405 $wechselhilf2 = 0; 406 $wechsel = 1; 407 $start = 0; 408 409 } 410 411 sub graphrot { 412 413 my ( $layer, $func, $x1, $y1, $x2, $y2, $schritte, $farbe, $fuellart, 414 $fuellfarbe, $linienart, $linienstaerke, $parameter ) = @_; 415 416 setachsengraph( $x1, min( -$y1, -$y2 ), $x2, max( $y1, $y2 ) ); 417 minmax( $x1, $y1, $x2, $y2 ); 418 my ( $xmin, $xmax ); 419 420 if ( $y1 == $y2 ) { 421 $xmin = $x1; 422 $xmax = $x2; 423 } 424 else { 425 $xmin = calcxmin( $func, $x1, $x2, $y1, $y2 ); 426 $xmax = calcxmax( $func, $x1, $x2, $y1, $y2 ); 427 } 428 settexthier(""); 429 430 paar( $xmin, $xmax ); 431 klammer($schritte); 432 klammer( upn($func) ); 433 befehlfuellungerzeugen( 434 $layer, "psVolume", $farbe, $fuellart, 435 $fuellfarbe, $linienart, $linienstaerke, $parameter, 436 "", gettexthier() 437 ); 438 439 settexthier(""); 440 441 } 442 443 ### Folgen zeichnen 444 445 sub folge { 446 my ( $layer, $func, $x1, $x2, $dx, $groesse, $linienart, $linienstaerke, 447 $farbe, $parameter ) = @_; 448 449 setachsengraph( $x1, calcfunk( $func, "x", $x1 ), 450 $x2, calcfunk( $func, "x", $x2 ) ); 451 my $anzahlpunkte = aufrunden( abs( $x2 - $x1 ) / $dx + 1, 1 ); 452 453 my $parameterweiter = 454 "showpoints=true, plotstyle=dots, dotstyle=o, plotpoints=" 455 . $anzahlpunkte 456 . ", dotsize=" 457 . $groesse . "pt"; 458 459 $parameterweiter = $parameterweiter . $parameter; 460 graph( $layer, $func, $x1, 0, 0, $x2, 0, 0, $linienart, $linienstaerke, 461 $farbe, $parameterweiter ); 462 463 } 464 465 ###Parametrisierte Funktionen 466 467 sub parametricplot { 468 my ( $layer, $func1, $func2, $func3, $t1, $u1, $t2, $u2, $linienart, 469 $linienstaerke, $farbe, $parameter ) = @_; 470 471 my $parameterweiter = "plotpoints=200, "; 472 $parameterweiter = $parameterweiter . "" . "" . $parameter; 473 474 my ( $i, $j, $n ); 475 calcparaminmax( $func1, $func2, $func3, $t1, $t2, $u1, $u2 ); 476 477 478 settexthier(""); 479 480 if ( $func3 eq "" ) { 481 klammer($t1); 482 klammer($t2); 483 if ( $parameterweiter =~ /algebraic/ ) { 484 klammer( $func1 . "|" . $func2 ); 485 } 486 else { 487 klammer( upn($func1) . upn($func2) ); 488 } 489 490 befehlerzeugen( $layer, "parametricplot", $farbe, $linienart, 491 $linienstaerke, $parameterweiter, "", gettexthier() ); 492 } 493 else { 494 495 if ( $u1 == $u2 ) { 496 paarohneminmax( $t1, $t2 ); 497 if ( $parameterweiter =~ /algebraic/ ) { 498 klammer( $func1 . "|" . $func2 . "|" . $func3 ); 499 } 500 else { 501 klammer( upn($func1) . upn($func2) . upn($func3) ); 502 } 503 } 504 else { 505 paarohneminmax( $t1, $t2 ); 506 paarohneminmax( $u1, $u2 ); 507 if ( $parameterweiter =~ /algebraic/ ) { 508 klammer( $func1 . "|" . $func2 . "|" . $func3 ); 509 } 510 else { 511 klammer( upn($func1) . upn($func2) . upn($func3) ); 512 } 513 } 514 515 set3dzeichnen(1); 516 set3dpstricks(1); 517 befehlerzeugen( $layer, "parametricplotThreeD", $farbe, $linienart, 518 $linienstaerke, $parameterweiter, "", gettexthier() ); 519 520 } 521 522 settexthier(""); 523 524 } 525 526 ### Zeichnen von allgemeinen Daten 527 sub fileplot { 528 my ( $layer, $datei, $linienart, $linienstaerke, $farbe, $parameter ) = @_; 529 530 settexthier(""); 531 setachsengraph( 0, 0, 0, 0 ); 532 setachsengraph3d( 0, 0, 0, 0, 0, 0 ); 533 klammer($datei); 534 my $parameterweiter = ""; 535 536 $parameterweiter = $parameterweiter . " " . " " . $parameter; 537 538 if ( get3dpstricks() == 1 ) { 539 befehlerzeugen( $layer, "fileplotThreeD", $farbe, $linienart, 540 $linienstaerke, $parameterweiter, "", gettexthier() ); 541 } 542 else { 543 befehlerzeugen( $layer, "fileplot", $farbe, $linienart, $linienstaerke, 544 $parameterweiter, "", gettexthier() ); 545 } 546 settexthier(""); 547 548 } 549 550 sub listplot { 551 my ( $layer, $datei, $linienart, $linienstaerke, $farbe, $parameter ) = @_; 552 setachsengraph( 0, 0, 0, 0 ); 553 setachsengraph3d( 0, 0, 0, 0, 0, 0 ); 554 my $parameterweiter = ""; 555 556 $parameterweiter = $parameterweiter . " " . " " . $parameter; 557 558 if ( get3dpstricks() == 1 ) { 559 befehlerzeugen( $layer, "listplotThreeD", $farbe, $linienart, 560 $linienstaerke, $parameterweiter, "", "{\\datenlesen}" ); 561 } 562 else { 563 befehlerzeugen( $layer, "listplot", $farbe, $linienart, $linienstaerke, 564 $parameterweiter, "", "{\\datenlesen}" ); 565 } 566 567 } 568 569 sub daten { 570 my ( $layer, $datei, $linienart, $linienstaerke, $farbe, $parameter ) = @_; 571 setachsengraph( 0, 0, 0, 0 ); 572 setachsengraph3d( 0, 0, 0, 0, 0, 0 ); 573 my $parameterweiter = ""; 574 575 $parameterweiter = $parameterweiter . "" . "" . $parameter; 576 577 if ( get3dpstricks() == 1 ) { 578 befehlerzeugen( $layer, "dataplotThreeD", $farbe, $linienart, 579 $linienstaerke, $parameterweiter, "", "{\\datenlesen}" ); 580 } 581 else { 582 befehlerzeugen( $layer, "dataplot", $farbe, $linienart, $linienstaerke, 583 $parameterweiter, "", "{\\datenlesen}" ); 584 } 585 586 } 587 588 # Ableitungsfunktion zeichnen 589 sub ableitung { 590 my ( $layer, $func, $grad, $x1, $y1, $x2, $y2, $linienart, $linienstaerke, 591 $farbe, $parameter ) 592 = @_; 593 594 setachsengraph( $x1, $y1, $x2, $y2 ); 595 my ( $xmin, $xmax, $parameterweiter, $text ); 596 settexthier(""); 597 $parameterweiter = " algebraic,"; 598 $parameterweiter = $parameterweiter . " " . " " . $parameter; 599 $xmin = sprintf( "%0.4f", calcablxmin( $func, $x1, $x2, $y1, $y2 ) ); 600 $xmax = sprintf( "%0.4f", calcablxmax( $func, $x1, $x2, $y1, $y2 ) ); 601 klammer($xmin); 602 klammer($xmax); 603 $text = "Derive(" . $grad . "," . $func . ")"; 604 klammer($text); 605 befehlerzeugen( $layer, "psplot", $farbe, $linienart, $linienstaerke, 606 $parameterweiter, "", gettexthier() ); 607 608 minmax( $x1, $y1, $x2, $y2 ); 609 settexthier(""); 610 } 611 612 # Stammfunktion zeichnen 613 sub stammfunktion { 614 my ( $layer, $func, $x1, $y1, $x2, $y2, $linienart, $linienstaerke, $farbe, 615 $verschiebungswert, $parameter ) 616 = @_; 617 setachsengraph( $x1, $y1, $x2, $y2 ); 618 settexthier(""); 619 my ( 620 @xpunkte, @ypunkte, $schritt, $i, 621 @yintegral, $x, $y, $integral, 622 $breite, $element, $datei, $merkex, 623 $merkey, $weite, $schrittanzahl, $schrittweite, 624 $punkte, $nullwert 625 ); 626 $dateiname++; 627 $weite = 3000; 628 $schrittanzahl = ceil( $x2 - $x1 ) * $weite; 629 $schrittweite = ceil( ceil( $x2 - $x1 ) / ( getskalierung("x") / 2 ) ); 630 $punkte = 0; 631 $integral = 0; 632 $nullwert = 0; 633 634 # Integral wird berechnet 635 $breite = ( $x2 - $x1 ) / ($schrittanzahl); 636 for ( $schritt = 0 ; $schritt < $schrittanzahl + 1 ; $schritt++ ) { 637 $x = $x1 + ( $x2 - $x1 ) * ( $schritt / $schrittanzahl ); 638 $y = calcfunk( $func, "x", $x ); 639 $element = ( $breite * $y ); 640 $integral += $element; 641 $nullwert = $integral if ( $x <= 0 ); 642 $yintegral[$schritt] = $integral; 643 } 644 $nullwert -= $verschiebungswert; 645 646 #oeffnedatei($dateiname); 647 648 # Schleife zum zeichnen der Funktion 649 for ( 650 $schritt = 0 ; 651 $schritt < $schrittanzahl ; 652 $schritt = $schritt + $schrittweite 653 ) 654 { 655 $x = nachkommastellen( 656 $x1 + ( $x2 - $x1 ) * ( $schritt / ( $schrittanzahl - 1 ) ), 3 ); 657 $y = nachkommastellen( $yintegral[$schritt] - $nullwert, 3 ); 658 659 # liegen die Funktionswerte innerhalb von ymin und ymax? 660 if ( ( $y >= $y1 ) && ( $y <= $y2 ) ) { 661 $xpunkte[$punkte] = $x; 662 $ypunkte[$punkte] = $y; 663 $punkte++; 664 } 665 else { 666 667 # wenn nicht wird das bisherige Array ausgelesen und gezeichnet 668 if ( $punkte > 1 ) { 669 #schreibedaten( $dateiname, $xpunkte[0], $ypunkte[0] ); 670 paar($xpunkte[0], $ypunkte[0]); 671 for ( $i = 0 ; $i < $punkte - 2 ; $i = $i + 2 ) { 672 673 if ( 674 calcaenderungsrate( 675 $xpunkte[$i], $ypunkte[$i], 676 $xpunkte[ $i + 1 ], $ypunkte[ $i + 1 ] 677 ) != calcaenderungsrate( 678 $xpunkte[ $i + 1 ], 679 $ypunkte[ $i + 1 ], 680 $xpunkte[ $i + 2 ], 681 $ypunkte[ $i + 2 ] 682 ) 683 ) 684 685 { 686 #schreibedaten( 687 # $dateiname, 688 #$xpunkte[ $i + 1 ], 689 #$ypunkte[ $i + 1 ] 690 #); 691 paar($xpunkte[$i+1], $ypunkte[$i+1]); 692 693 } 694 } 695 #schreibedaten( 696 #$dateiname, 697 #$xpunkte[ $i - 1 ], 698 #$ypunkte[ $i - 1 ] 699 #); 700 701 paar($xpunkte[$i+1], $ypunkte[$i-1]); 702 703 } 704 $punkte = 0; 705 } 706 707 } 708 709 # Restarray wird ausgelesen 710 if ( $punkte > 1 ) { 711 for ( $i = 0 ; $i < $punkte - 2 ; $i = $i + 2 ) { 712 if ( 713 calcaenderungsrate( 714 $xpunkte[$i], $ypunkte[$i], 715 $xpunkte[ $i + 1 ], $ypunkte[ $i + 1 ] 716 ) != calcaenderungsrate( 717 $xpunkte[ $i + 1 ], 718 $ypunkte[ $i + 1 ], 719 $xpunkte[ $i + 2 ], 720 $ypunkte[ $i + 2 ] 721 ) 722 ) 723 { 724 #schreibedaten( 725 #$dateiname, 726 #$xpunkte[ $i + 1 ], 727 #$ypunkte[ $i + 1 ] 728 #); 729 paar($xpunkte[$i+1], $ypunkte[$i+1]); 730 } 731 } 732 } 733 #schliessedatei($dateiname); 734 #readdata( $layer, $dateiname ); 735 liniekopf( $layer, $linienart, $linienstaerke, $farbe, 736 $parameter, "", gettexthier() ); 737 #daten( $layer, $dateiname, $linienart, $linienstaerke, $farbe, $parameter ); 738 $punkte = 0; 739 settexthier(""); 740 741 } 742 743 # Zeichnen der Flaeche unter einer Funktion 744 sub integral { 745 my ( 746 $layer, $func, $x1, $y1, 747 $x2, $y2, $farbe, $fuellart, 748 $fuellfarbe, $linienart, $linienstaerke, $parameter 749 ) = @_; 750 751 setachsengraph( $x1, $y1, $x2, $y2 ); 752 my ( $parameterweiter, $xmin, $xmax ); 753 754 $parameterweiter = "algebraic" . $parameter; 755 756 if ( $y1 == $y2 ) { 757 $xmin = $x1; 758 $xmax = $x2; 759 760 } 761 else { 762 $xmin = nachkommastellen( calcxmin( $func, $x1, $x2, $y1, $y2 ), 2 ); 763 $xmax = nachkommastellen( calcxmax( $func, $x1, $x2, $y1, $y2 ), 2 ); 764 } 765 schreibeinarray( 766 $layer, 767 sprintf( 768 "\\pscustom[fillcolor = %s] 769 {\\gsave", $fuellfarbe 770 ) 771 ); 772 graph( $layer, $func, $xmin, $y1, 0, $xmax, $y2, 0, $linienart, 773 $linienstaerke, $farbe, $parameter ); 774 linie( $layer, $xmax, 0, "", $xmin, 0, "", $linienart, $linienstaerke, 775 $farbe, $parameter, "" ); 776 befehlfuellungerzeugen( 777 $layer, "fill", $farbe, $fuellart, 778 $fuellfarbe, $linienart, $linienstaerke, $parameter, 779 "", "" 780 ); 781 schreibeinarray( $layer, sprintf("\\grestore}") ); 782 783 } 784 ### Sichern von Daten 785 sub datensichern { 786 my ($layer) = @_; 787 schreibeinarray( $layer, sprintf("\\savedata{\\mydata}[") ); 788 } 789 790 sub readdata { 791 my ( $layer, $name ) = @_; 792 schreibeinarray( $layer, sprintf( "\\readdata{\\datenlesen}{%s}", $name ) ); 793 } 794 795 sub setfilehandle { my ($file) = @_; } 796 my $AUSGABE; 797 798 my $filecontens = 0; 799 800 sub oeffnedatei { 801 my ($name) = @_; 802 if ( getextern() == 0 ) { 803 if ( $filecontens == 0 ) { 804 usepackage( "", "filecontents" ); 805 $filecontens = 1; 806 } 807 else { 808 } 809 schreibeinarray( 105, 810 sprintf( "\n\\begin{filecontents*}{%s}", $name ) ); 811 $zahler = 0; 812 settexthier(""); 813 } 814 else { 815 open( $AUSGABE, '>', $name ); 816 $zahler = 0; 817 } 818 } 819 820 sub schliessedatei { 821 my ($name) = @_; 822 if ( $extern == 0 ) { 823 pstricks( 105, gettexthier() ); 824 pstricks( 105, "\\end{filecontents*}" ); 825 abstand(105); 826 $zahler = 0; 827 } 828 else { 829 close $AUSGABE; 830 $zahler = 0; 831 } 832 } 833 834 sub schreibedaten { 835 my ( $name, $x, $y ) = @_; 836 setachsengraph( $x, $y, $x, $y ); 837 $zahler++; 838 if ( getextern() == 0 ) { paar( $x, $y ); } 839 else { printf( $AUSGABE "(%g,%g)", $x, $y ); } 840 minmax( $x, $y, $x, $y ); 841 } 842 843 sub schreibedaten3d { 844 my ( $name, $x, $y, $z ) = @_; 845 $zahler++; 846 setachsengraph3d( $x, $y, $z, $x, $y, $z ); 847 my ( $xersatz, $yersatz ); 848 $xersatz = x3d( $x, $y, $z ); 849 $yersatz = y3d( $x, $y, $z ); 850 if ( getextern() == 0 ) { tripel( $x, $y, $z ); } 851 else { 852 853 if ( get3dpstricks() == 1 ) { 854 printf( $AUSGABE "(%g,%g,%g) ", $x, $y, $z ); 855 } 856 else { printf( $AUSGABE "(%g,%g) ", $xersatz, $yersatz ); } 857 } 858 859 } 860 861 sub lesedaten { 862 my ( $layer, $name ) = @_; 863 my $zeile; 864 open( $AUSGABE, $name ) || die $name . ": $!"; 865 while ( $zeile = <$AUSGABE> ) { 866 schreibeinarray( $layer, sprintf( "%s", $zeile ) ); 867 } 868 } 869 870 sub oberuntersumme { 871 my ( $layer, $func, $x1, $y1, $x2, $y2, $farbe, $fuellart, $fuellfarbe, 872 $linienart, $linienstaerke, $n, $summen ) 873 = @_; 874 setachsengraph( $x1, $y1, $x2, $y2 ); 875 my $farbeersatz = getfarbe(); 876 my $fuellartersatz = getfuellart(); 877 my $fuellfarbeersatz = getfuellfarbe(); 878 my $linienstaerkeersatz = getlinienstaerke(); 879 my $linienartersatz = getlinienart(); 880 my ( 881 $yober, $yunter, $schritt, $xlinks, 882 $xrechts, $flaecheober, $flaecheunter, $xmin, 883 $xmax, $parameterweiter, $breite 884 ); 885 886 $parameterweiter = ""; 887 888 if ( $y1 != $y2 ) { 889 $xmin = calcxmin( $func, $x1, $x2, $y1, $y2 ); 890 $xmax = calcxmax( $func, $x1, $x2, $y1, $y2 ); 891 } 892 else { 893 $xmin = $x1; 894 $xmax = $x2; 895 } 896 897 $breite = nachkommastellen( ( $xmax - $xmin ) / $n, 4 ); 898 899 if ( $n > 2 ) { 900 pstricks( $layer, "{" ); 901 902 einstellungen( $layer, $farbe, $fuellart, $fuellfarbe, $linienart, 903 $linienstaerke, $parameterweiter ); 904 905 for ( $schritt = 0 ; $schritt < $n ; $schritt++ ) { 906 $xlinks = 907 nachkommastellen( $xmin + ( $xmax - $xmin ) * ( $schritt / ($n) ), 908 4 ); 909 $xrechts = nachkommastellen( 910 $xmin + ( $xmax - $xmin ) * ( ( $schritt + 1 ) / ($n) ), 4 ); 911 $yober = calcymax( $func, $xlinks, $xrechts ); 912 $yunter = calcymin( $func, $xlinks, $xrechts ); 913 if ( abs($yober) > abs($yunter) ) { 914 rechteck( $layer, $xlinks, 0, $breite, $yober, 0, "", "", "", 915 "", $linienstaerke, $parameterweiter ) 916 if ( ( $summen eq "ober" ) || ( $summen eq "beide" ) ); 917 rechteck( $layer, $xlinks, 0, $breite, $yunter, 0, "", "", "", 918 "", $linienstaerke, $parameterweiter ) 919 if ( ( $summen eq "unter" ) || ( $summen eq "beide" ) ); 920 } 921 else { 922 rechteck( $layer, $xlinks, 0, $breite, $yober, 0, "", "", "", 923 "", $linienstaerke, $parameterweiter ) 924 if ( ( $summen eq "ober" ) || ( $summen eq "beide" ) ); 925 rechteck( $layer, $xlinks, 0, $breite, $yunter, 0, "", "", "", 926 "", $linienstaerke, $parameterweiter ) 927 if ( ( $summen eq "unter" ) || ( $summen eq "beide" ) ); 928 } 929 } 930 pstricks( $layer, "}" ); 931 } 932 else { 933 for ( $schritt = 0 ; $schritt < $n ; $schritt++ ) { 934 $xlinks = $xmin + ( $xmax - $xmin ) * ( $schritt / ($n) ); 935 $xrechts = $xmin + ( $xmax - $xmin ) * ( ( $schritt + 1 ) / ($n) ); 936 $yober = calcymax( $func, $xlinks, $xrechts ); 937 $yunter = calcymin( $func, $xlinks, $xrechts ); 938 if ( abs($yober) > abs($yunter) ) { 939 rechteck( 940 $layer, $xlinks, 941 0, $breite, 942 $yober, 0, 943 $farbe, $fuellart, 944 $fuellfarbe, $linienart, 945 $linienstaerke, $parameterweiter 946 ) if ( ( $summen eq "ober" ) || ( $summen eq "beide" ) ); 947 rechteck( 948 $layer, $xlinks, 949 0, $breite, 950 $yunter, 0, 951 $farbe, $fuellart, 952 $fuellfarbe, $linienart, 953 $linienstaerke, $parameterweiter 954 ) if ( ( $summen eq "unter" ) || ( $summen eq "beide" ) ); 955 } 956 else { 957 rechteck( 958 $layer, $xlinks, 959 0, $breite, 960 $yober, 0, 961 $farbe, $fuellart, 962 $fuellfarbe, $linienart, 963 $linienstaerke, $parameterweiter 964 ) if ( ( $summen eq "ober" ) || ( $summen eq "beide" ) ); 965 rechteck( 966 $layer, $xlinks, 967 0, $breite, 968 $yunter, 0, 969 $farbe, $fuellart, 970 $fuellfarbe, $linienart, 971 $linienstaerke, $parameterweiter 972 ) if ( ( $summen eq "unter" ) || ( $summen eq "beide" ) ); 973 } 974 } 975 } 976 setfarbe($farbeersatz); 977 setfuellart($fuellartersatz); 978 setfuellfarbe($fuellfarbeersatz); 979 setlinienstaerke($linienstaerkeersatz); 980 setlinienart($linienartersatz); 981 982 } 983 984 # der Flaecheninhalt zwischen zwei Funktionen kann gezeichnet werden 985 sub einschluss { 986 my ( $layer, $func1, $func2, $x1, $y1, $x2, $y2, $schnittpunkte, $farbe, 987 $fuellart, $fuellfarbe, $linienart, $linienstaerke, $parameter ) 988 = @_; 989 my ( $bereichxmin, $bereichxmax, $parameterweiter ); 990 991 setachsengraph( $x1, $y1, $x2, $y2 ); 992 kommentar( $layer, 993 "Einschluss zwischen den Funktionen " . $func1 . " und " . $func2 ); 994 995 $parameterweiter = $parameter; 996 if ( $schnittpunkte eq "links" ) { 997 $bereichxmin = 998 nachkommastellen( calcschnittlinks( $func1, $func2, $x1, $x2 ), 6 ); 999 $bereichxmax = nachkommastellen( $x2, 2 ); 1000 } 1001 elsif ( $schnittpunkte eq "rechts" ) { 1002 $bereichxmax = 1003 nachkommastellen( calcschnittrechts( $func1, $func2, $x1, $x2 ), 6 ); 1004 $bereichxmin = nachkommastellen( $x1, 2 ); 1005 } 1006 elsif ( $schnittpunkte eq "beide" ) { 1007 $bereichxmin = 1008 nachkommastellen( calcschnittlinks( $func1, $func2, $x1, $x2 ), 6 ); 1009 $bereichxmax = 1010 nachkommastellen( calcschnittrechts( $func1, $func2, $x1, $x2 ), 6 ); 1011 } 1012 else { 1013 $bereichxmin = nachkommastellen( $x1, 2 ); 1014 $bereichxmax = nachkommastellen( $x2, 2 ); 1015 } 1016 1017 einschlussanfang( $layer, $farbe, $fuellart, $fuellfarbe, $linienart, 1018 $linienstaerke, $parameter ); 1019 graph( $layer, $func1, $bereichxmin, 0, 0, $bereichxmax, 0, 0, $linienart, 1020 $linienstaerke, $farbe, $parameterweiter ); 1021 1022 graph( $layer, $func2, $bereichxmax, 0, 0, $bereichxmin, 0, 0, $linienart, 1023 $linienstaerke, $farbe, $parameterweiter ); 1024 einschlussende( $layer, $farbe, $fuellart, $fuellfarbe, $linienart, 1025 $linienstaerke, $parameter ); 1026 1027 # if ( calcfunk( $func1, "x", $bereichxmax ) != calcfunk( $func2, "x", $bereichxmax ) ) { 1028 # 1029 # linie( 1030 # $layer, $bereichxmax, nachkommastellen( calcfunk( $func1, "x", $bereichxmax ), 6 ), 1031 # "", $bereichxmax, nachkommastellen( calcfunk( $func2, "x", $bereichxmax ), 6 ), 1032 # "", $linienart, $linienstaerke, $farbe, $parameter, "" 1033 # ); 1034 # 1035 # } 1036 # 1037 # if ( calcfunk( $func1, "x", $bereichxmin ) != calcfunk( $func2, "x", $bereichxmin ) ) { 1038 # linie( 1039 # $layer, $bereichxmin, nachkommastellen( calcfunk( $func1, "x", $bereichxmin ), 6 ), 1040 # "", $bereichxmin, nachkommastellen( calcfunk( $func2, "x", $bereichxmin ), 6 ), 1041 # "", $linienart, $linienstaerke, $farbe, $parameter, "" 1042 # ); 1043 # 1044 # } 1045 1046 } 1047 1048 sub punkteende { 1049 my ( $layer, $farbe, $linienart, $linienstaerke ) = @_; 1050 schreibeinarray( $layer, sprintf("]") ); 1051 schreibeinarray( $layer, 1052 sprintf("\\dataplot[plotstyle=curve,showpoints=false,") ); 1053 erzeugen( $layer, $linienart, $linienstaerke, $farbe, "" ); 1054 schreibeinarray( $layer, 1055 sprintf( "{\\mydata}", $farbe, $linienstaerke, $linienart ) ); 1056 } 1057 1058 1; |
A.10 Das Modul für Tupel
paar-pm.pm |
---|
1 ################################################################## 2 # Modul für Paare, Tupel, etc Plotter-Skriptes in Pstricks 3 # 4 # VERSION 3 Arbeitsversion 5 # Letzte Aenderung: 10.01.2012 6 ################################################################## 7 use POSIX qw /floor ceil/; 8 use Math::Trig; 9 use strict; 10 use warnings; 11 12 my $texthier = ""; 13 14 sub settexthier { 15 my ($text) = @_; 16 $texthier = $text; 17 } 18 19 sub gettexthier { return $texthier; } 20 21 sub textanhaengen { 22 my ($text) = @_; 23 $texthier = $texthier . $text; 24 } 25 26 sub klammer { 27 my ($x) = @_; 28 29 my $text = "{" . $x . "}"; 30 textanhaengen($text); 31 } 32 33 sub paar { 34 my ( $x, $y ) = @_; 35 if ( ( $x ne "ERROR" ) && ( $y ne "ERROR" ) && ( $x ne "" ) && ( $y ne "" ) ) { 36 paarohneminmax( $x, $y ); 37 38 if ( ( istzahl($x) == 1 ) && ( istzahl($y) == 1 ) ) { 39 minmax( $x, $y, $x, $y ); 40 } 41 if ( getknoten() == 1 ) { 42 if ( get3dzeichnen() == 1 ) { } 43 else { knotensetzen( "\\pnode", $x, $y, "" ); } 44 } 45 } 46 } 47 48 sub paarohneminmax { 49 my ( $x, $y ) = @_; 50 51 my $text; 52 53 $text = sprintf( "(%s,%s)", $x, $y ); 54 55 if ( $text =~ /([e!]+)/ ) { 56 $text = sprintf( "(%s,%s)", 57 nachkommastellen( $x, 4 ), 58 nachkommastellen( $y, 4 ) ); 59 } 60 textanhaengen($text); 61 } 62 63 sub tupel { 64 my ( $x1, $y1, $x2, $y2 ) = @_; 65 settexthier(""); 66 paar( $x1, $y1 ); 67 paar( $x2, $y2 ); 68 } 69 70 sub vier { 71 my ( $x1, $y1, $x2, $y2, $x3, $y3, $x4, $y4 ) = @_; 72 settexthier(""); 73 paar( $x1, $y1 ); 74 paar( $x2, $y2 ); 75 paar( $x3, $y3 ); 76 paar( $x4, $y4 ); 77 78 } 79 80 sub drei { 81 my ( $x1, $y1, $x2, $y2, $x3, $y3 ) = @_; 82 settexthier(""); 83 paarohneminmax( $x1, $y1 ); 84 paarohneminmax( $x2, $y2 ); 85 paarohneminmax( $x3, $y3 ); 86 } 87 88 sub tripel { 89 my ( $x, $y, $z ) = @_; 90 91 my $text; 92 93 if ( get3dpstricks() == 1 ) { tripelohneminmax( $x, $y, $z ) } 94 else { paar( x3d( $x, $y, $z ), y3d( $x, $y, $z ) ); } 95 96 minmax3d( $x, $y, $z, $x, $y, $z ); 97 98 if ( getknoten() == 1 ) { 99 knotensetzen( "\\pnode", $x, $y, $z ); 100 } 101 102 } 103 104 sub tripelohneminmax { 105 my ( $x, $y, $z ) = @_; 106 my $text; 107 $text = "(" . $x . "," . $y . "," . $z . ")"; 108 textanhaengen($text); 109 } 110 111 1; |
A.11 Das Modul für Zeichenroutinen
zeichnen-pm.pm |
---|
1 ################################################################## 2 # Modul für Zeichenroutinen 3 # 4 # Letzte Aenderung: 12.01.2012 5 ################################################################## 6 use POSIX qw /floor ceil/; 7 use Math::Trig; 8 use strict; 9 use warnings; 10 11 # Linie zeichnen zwischen zwei Punkten 12 sub linie { 13 my ( $layer, $x1, $y1, $z1, $x2, $y2, $z2, $linienart, $linienstaerke, 14 $farbe, $parameter, $pfeilart ) 15 = @_; 16 settexthier(""); 17 18 if ( $linienart ne "" ) { 19 if ( ( istzahl($x1) == 1 ) 20 && ( istzahl($y1) == 1 ) 21 && ( istzahl($x2) == 1 ) 22 && ( istzahl($y2) == 1 ) ) 23 { 24 minmax( $x1 - 1, $y1 - 1, $x2 + 1, $y2 + 1 ); 25 } 26 } 27 28 my $pstricksersatz3d = get3dpstricks(); 29 my $pstricksersatz = getpstricks(); 30 31 setachsengraph( $x1, $y1, $x1, $y1 ); 32 setachsengraph( $x2, $y2, $x2, $y2 ); 33 34 if ( istzahl($linienstaerke) == 1 ) { 35 36 if ( $linienstaerke > 0 ) { 37 if ( ( $z1 eq "" ) || ( $z2 eq "" ) ) { 38 paar( $x1, $y1 ); 39 paar( $x2, $y2 ); 40 setpstricks(0); 41 set3dpstricks(0); 42 43 } 44 else { 45 tripel( $x1, $y1, $z1 ); 46 tripel( $x2, $y2, $z2 ); 47 setachsengraph3d( $x1, $y1, $z1, $x1, $y1, $z1 ); 48 setachsengraph3d( $x2, $y2, $z2, $x2, $y2, $z2 ); 49 50 } 51 52 liniekopf( $layer, $linienart, $linienstaerke, $farbe, $parameter, 53 $pfeilart, gettexthier() ); 54 55 settexthier(""); 56 } 57 } 58 else { 59 if ( ( $z1 eq "" ) || ( $z2 eq "" ) ) { 60 paar( $x1, $y1 ); 61 paar( $x2, $y2 ); 62 setpstricks(0); 63 set3dpstricks(0); 64 65 } 66 else { 67 tripel( $x1, $y1, $z1 ); 68 tripel( $x2, $y2, $z2 ); 69 setachsengraph3d( $x1, $y1, $z1, $x1, $y1, $z1 ); 70 setachsengraph3d( $x2, $y2, $z2, $x2, $y2, $z2 ); 71 72 } 73 74 liniekopf( $layer, $linienart, $linienstaerke, $farbe, $parameter, 75 $pfeilart, gettexthier() ); 76 77 settexthier(""); 78 } 79 setpstricks(0); 80 set3dpstricks($pstricksersatz3d); 81 setpstricks($pstricksersatz); 82 } 83 84 sub linietext { 85 my ( 86 $layer, $x1, $y1, $z1, 87 $x2, $y2, $z2, $abstandx, 88 $abstandy, $abstandz, $text, $winkel, 89 $ausrichtung, $linienart, $linienstaerke, $farbe, 90 $parameter, $pfeilart 91 ) = @_; 92 93 my ( $dx, $dy, $dz ); 94 95 if ( ( $z1 eq "" ) && ( $z2 eq "" ) ) { 96 if ( $x1 == $x2 ) { 97 if ( $abstandy == 0.2 ) { 98 $dy = ( ( $y2 - $y1 ) / 2 ); 99 } 100 else { 101 $dy = ( ( $y2 - $y1 ) / 2 ) + $abstandy; 102 } 103 } 104 else { 105 $dy = ( ( $y2 - $y1 ) / 2 ) + $abstandy; 106 } 107 if ( $y1 == $y2 ) { 108 if ( $abstandx == 0.2 ) { 109 $dx = ( ( $x2 - $x1 ) / 2 ); 110 } 111 else { 112 $dx = ( ( $x2 - $x1 ) / 2 ) + $abstandx; 113 } 114 115 } 116 else { 117 $dx = ( ( $x2 - $x1 ) / 2 ) + $abstandx; 118 } 119 } 120 else { 121 $dy = ( ( $y2 - $y1 ) / 2 ) + $abstandy; 122 $dx = ( ( $x2 - $x1 ) / 2 ) + $abstandx; 123 } 124 125 if ( ( $z1 ne "" ) && ( $z2 ne "" ) ) { 126 $dz = ( ( $z2 - $z1 ) / 2 ) + $abstandz; 127 beschriftung3d( $layer, $farbe, $x1 + $dx, $y1 + $dy, $z1 + $dz, 128 $winkel, $ausrichtung, $text ); 129 130 minmax3d( $x1 - $dx, $y1 - $dy, $z1 - $dz, $x1 + $dx, $y1 + $dy, 131 $z1 + $dz ); 132 133 minmax3d( $x1 + $dx, $y1 + $dy, $z1 + $dz, $x1 - $dx, $y1 - $dy, 134 $z1 - $dz ); 135 136 } 137 else { 138 beschriftung( $layer, $farbe, $x1 + $dx, $y1 + $dy, $winkel, 139 $ausrichtung, $text ); 140 } 141 142 linie( $layer, $x1, $y1, $z1, $x2, $y2, $z2, $linienart, $linienstaerke, 143 $farbe, $parameter, $pfeilart ); 144 145 } 146 147 sub linietextabstand { 148 my ( 149 $layer, $x1, $y1, $z1, 150 $x2, $y2, $z2, $abstand, 151 $abstandx, $abstandy, $abstandz, $text, 152 $winkel, $ausrichtung, $linienart, $linienstaerke, 153 $farbe, $parameter, $pfeilart 154 ) = @_; 155 156 my ( 157 $winkelneu, $dx, $dy, $dz, $laenge, $x1n, 158 $y1n, $x2n, $y2n, $x1neu, $y1neu 159 ); 160 161 if ( ( $z1 ne "" ) && ( $z2 ne "" ) ) { 162 kommentar( $layer, "hier" ); 163 $x1n = x3d( $x1, $y1, $z1 ); 164 $y1n = y3d( $x1, $y1, $z1 ); 165 166 $x2n = x3d( $x2, $y2, $z2 ); 167 $y2n = y3d( $x2, $y2, $z2 ); 168 169 $dx = $x2n - $x1n; 170 $dy = $y2n - $y1n; 171 } 172 else { 173 $x1n = $x1; 174 $y1n = $y1; 175 176 $x2n = $x2; 177 $y2n = $y2; 178 179 $dx = $x2 - $x1; 180 $dy = $y2 - $y1; 181 } 182 183 if ( $abstand == 0 ) { 184 linietext( 185 $layer, $x1, $y1, $z1, 186 $x2, $y2, $z2, $abstandx, 187 $abstandy, $abstandz, $text, $winkel, 188 $ausrichtung, $linienart, $linienstaerke, $farbe, 189 $parameter, $pfeilart 190 ); 191 192 } 193 else { 194 $winkelneu = radtodeg( atan2( $dy, $dx ) ); 195 $laenge = sqrt( $dx * $dx + $dy * $dy ); 196 197 $x1neu = calcendpunktx( $x1n, $abstand, $winkelneu + 90 ); 198 $y1neu = calcendpunkty( $y1n, $abstand, $winkelneu + 90 ); 199 200 linietextpolar( 201 $layer, $x1neu, $y1neu, "", 202 $laenge, $winkelneu, 0, $abstandx, 203 $abstandy, $abstandz, $text, $winkel, 204 $ausrichtung, $linienart, $linienstaerke, $farbe, 205 $parameter, $pfeilart 206 ); 207 } 208 209 } 210 211 sub liniepolartextabstand { 212 my ( 213 $layer, $x, $y, $z, 214 $laenge, $w1, $w2, $abstand, 215 $abstandx, $abstandy, $abstandz, $text, 216 $winkel, $ausrichtung, $linienart, $linienstaerke, 217 $farbe, $parameter, $pfeilart 218 ) = @_; 219 220 my ( $x2, $y2, $z2 ); 221 if ( ( $z eq "" ) || ( $w2 eq "" ) ) { 222 $x2 = calcendpunktx( $x, $laenge, $w1 ); 223 $y2 = calcendpunkty( $y, $laenge, $w1 ); 224 linietextabstand( 225 $layer, $x, $y, "", 226 $x2, $y2, "", $abstand, 227 $abstandx, $abstandy, $abstandz, $text, 228 $winkel, $ausrichtung, $linienart, $linienstaerke, 229 $farbe, $parameter, $pfeilart 230 ); 231 232 } 233 else { 234 $x2 = calcendpunktx3d( $x, $laenge, $w1, $w2 ); 235 $y2 = calcendpunkty3d( $y, $laenge, $w1, $w2 ); 236 $z2 = calcendpunktz3d( $z, $laenge, $w1, $w2 ); 237 linietextabstand( 238 $layer, $x, $y, $z, 239 $x2, $y2, $z2, $abstand, 240 $abstandx, $abstandy, $abstandz, $text, 241 $winkel, $ausrichtung, $linienart, $linienstaerke, 242 $farbe, $parameter, $pfeilart 243 ); 244 245 } 246 247 } 248 249 ################################################################## 250 # Linie mit Laenge und Winkel 251 ################################################################## 252 sub liniepolar { 253 my ( $layer, $x, $y, $z, $laenge, $w1, $w2, $linienart, $linienstaerke, 254 $farbe, $parameter, $pfeilart ) 255 = @_; 256 my ( $x2, $y2, $z2 ); 257 if ( ( $z eq "" ) || ( $w2 eq "" ) ) { 258 $x2 = calcendpunktx( $x, $laenge, $w1 ); 259 $y2 = calcendpunkty( $y, $laenge, $w1 ); 260 linie( $layer, $x, $y, "", $x2, $y2, "", $linienart, $linienstaerke, 261 $farbe, $parameter, $pfeilart ); 262 } 263 else { 264 $x2 = calcendpunktx3d( $x, $laenge, $w1, $w2 ); 265 $y2 = calcendpunkty3d( $y, $laenge, $w1, $w2 ); 266 $z2 = calcendpunktz3d( $z, $laenge, $w1, $w2 ); 267 linie( $layer, $x, $y, $z, $x2, $y2, $z2, $linienart, $linienstaerke, 268 $farbe, $parameter, $pfeilart ); 269 } 270 } 271 272 sub linietextpolar { 273 my ( 274 $layer, $x, $y, $z, 275 $laenge, $w1, $w2, $abstandx, 276 $abstandy, $abstandz, $text, $winkel, 277 $ausrichtung, $linienart, $linienstaerke, $farbe, 278 $parameter, $pfeilart 279 ) = @_; 280 281 my ( $x2, $y2, $z2, $x3, $y3 ); 282 if ( ( $z eq "" ) ) { 283 284 if ( $w2 == 0 ) { 285 286 $x2 = calcendpunktx( $x, $laenge, $w1 ); 287 $y2 = calcendpunkty( $y, $laenge, $w1 ); 288 linietext( 289 $layer, $x, $y, "", 290 $x2, $y2, "", $abstandx, 291 $abstandy, $abstandz, $text, $winkel, 292 $ausrichtung, $linienart, $linienstaerke, $farbe, 293 $parameter, $pfeilart 294 ); 295 296 } 297 else { 298 299 $x2 = calcendpunktx( $x, $w2, $w1 + 90 ); 300 $y2 = calcendpunkty( $y, $w2, $w1 + 90 ); 301 $x3 = calcendpunktx( $x2, $laenge, $w1 ); 302 $y3 = calcendpunkty( $y2, $laenge, $w1 ); 303 304 linietext( 305 $layer, $x2, $y2, "", 306 $x3, $y3, "", $abstandx, 307 $abstandy, $abstandz, $text, $winkel, 308 $ausrichtung, $linienart, $linienstaerke, $farbe, 309 $parameter, $pfeilart 310 ); 311 312 } 313 314 } 315 else { 316 $x2 = calcendpunktx3d( $x, $laenge, $w1, $w2 ); 317 $y2 = calcendpunkty3d( $y, $laenge, $w1, $w2 ); 318 $z2 = calcendpunktz3d( $z, $laenge, $w1, $w2 ); 319 linietext( 320 $layer, $x, $y, $z, 321 $x2, $y2, $z2, $abstandx, 322 $abstandy, $abstandz, $text, $winkel, 323 $ausrichtung, $linienart, $linienstaerke, $farbe, 324 $parameter, $pfeilart 325 ); 326 } 327 328 } 329 330 # Verschiedene Koepfe 331 332 sub liniekopf { 333 my ( $layer, $linienart, $linienstaerke, $farbe, $parameter, $pfeilart, 334 $anhang ) 335 = @_; 336 337 if ( $anhang ne "" ) { 338 339 if ( istzahl($linienstaerke) == 1 ) { 340 341 if ( $linienstaerke > 0 ) { 342 if ( get3dpstricks() == 1 ) { 343 set3dzeichnen(1); 344 befehlerzeugen( $layer, "pstThreeDLine", $farbe, $linienart, 345 $linienstaerke, $parameter, $pfeilart, $anhang ); 346 347 } 348 else { 349 befehlerzeugen( $layer, "psline", $farbe, $linienart, 350 $linienstaerke, $parameter, $pfeilart, $anhang ); 351 } 352 } 353 } 354 else { 355 if ( get3dpstricks() == 1 ) { 356 set3dzeichnen(1); 357 befehlerzeugen( $layer, "pstThreeDLine", $farbe, $linienart, 358 $linienstaerke, $parameter, $pfeilart, $anhang ); 359 360 } 361 else { 362 befehlerzeugen( $layer, "psline", $farbe, $linienart, 363 $linienstaerke, $parameter, $pfeilart, $anhang ); 364 } 365 366 } 367 } 368 } 369 370 sub polygon { 371 my ( $layer, $linienart, $linienstaerke, $farbe, $fuellart, $fuellfarbe, 372 $parameter, $anhang ) 373 = @_; 374 375 if ( $anhang ne "" ) { 376 377 if ( get3dpstricks() == 1 ) { 378 set3dzeichnen(1); 379 380 befehlfuellungerzeugen( 381 $layer, "pstThreeDLine", 382 $farbe, $fuellart, 383 $fuellfarbe, $linienart, 384 $linienstaerke, $parameter, 385 "", $anhang 386 ); 387 } 388 else { 389 befehlfuellungerzeugen( 390 $layer, "pspolygon", $farbe, $fuellart, 391 $fuellfarbe, $linienart, $linienstaerke, $parameter, 392 "", $anhang 393 ); 394 } 395 } 396 } 397 398 sub bezierkopf { 399 my ( $layer, $linienart, $linienstaerke, $farbe, $parameter, $pfeilart, 400 $anhang ) 401 = @_; 402 403 my $pstricksersatz3d = get3dpstricks(); 404 my $pstricksersatz = getpstricks(); 405 406 if ( $anhang ne "" ) { 407 setpstricks(0); 408 set3dpstricks(0); 409 410 411 befehlerzeugen( $layer, "psbezier", $farbe, $linienart, $linienstaerke, 412 $parameter, $pfeilart, $anhang ); 413 } 414 415 setpstricks($pstricksersatz); 416 set3dpstricks($pstricksersatz3d); 417 418 419 420 } 421 422 sub kurvekopf { 423 my ( $layer, $linienart, $linienstaerke, $farbe, $parameter, $pfeilart, 424 $anhang ) 425 = @_; 426 427 my $pstricksersatz3d = get3dpstricks(); 428 my $pstricksersatz = getpstricks(); 429 if ( $anhang ne "" ) { 430 setpstricks(0); 431 set3dpstricks(0); 432 befehlerzeugen( $layer, "pscurve", $farbe, $linienart, $linienstaerke, 433 $parameter, $pfeilart, $anhang ); 434 setpstricks(0); 435 set3dpstricks($pstricksersatz3d); 436 setpstricks($pstricksersatz); 437 438 setpstricks(0); 439 set3dpstricks($pstricksersatz3d); 440 setpstricks($pstricksersatz); 441 } 442 } 443 444 # Punkte und Kreuze 445 sub punktzeichnen { 446 my ( 447 $layer, $x, $y, $z, 448 $radius, $ausrichtung, $farbe, $fuellart, 449 $fuellfarbe, $linienart, $linienstaerke, $text, 450 $parameter 451 ) = @_; 452 my ( $parameterweiter, $xneu, $yneu, $x2, $y2, $radiusx, $radiusy, $coor ); 453 454 if ( $parameter =~ /drawCoor/ ) { 455 $parameter =~ s/drawCoor,//g; 456 $parameter =~ s/drawCoor//g; 457 $coor = 1; 458 } 459 else { 460 $coor = 0; 461 } 462 463 $radiusx = $radius / getskalierung("x"); 464 $radiusy = $radius / getskalierung("y"); 465 466 if ( $z eq "" ) { 467 $xneu = $x; 468 $yneu = $y; 469 470 } 471 else { 472 $xneu = x3d( $x, $y, $z ); 473 $yneu = y3d( $x, $y, $z ); 474 } 475 476 $x2 = 477 nachkommastellen( 478 calcendpunktx( $xneu, ( $radiusx + 0.1 ), $ausrichtung ), 4 ); 479 $y2 = 480 nachkommastellen( 481 calcendpunkty( $yneu, ( $radiusy + 0.1 ), $ausrichtung ), 4 ); 482 483 if ( get3dpstricks() == 2 ) { 484 $radius = 2 * $radius; 485 tripel( $x, $y, $z ); 486 $parameterweiter = $parameter . ", dotsize=" . $radius . "cm"; 487 befehlfuellungerzeugen( 488 $layer, "pstThreeDDot", 489 $farbe, $fuellart, 490 $fuellfarbe, $linienart, 491 $linienstaerke, $parameterweiter, 492 "", gettexthier() 493 ); 494 495 # befehlerzeugen( $layer, "pstThreeDDot", $farbe, $linienart, $linienstaerke, $parameterweiter, "", gettexthier() ); 496 settexthier(""); 497 if ( $coor == 1 ) { 498 linie( $layer, $x, $y, $z, $x, $y, 0, "dashed", $linienstaerke, 499 $farbe, "", "" ); 500 linie( $layer, $x, 0, 0, $x, $y, 0, "dashed", $linienstaerke, 501 $farbe, "", "" ); 502 linie( $layer, 0, $y, 0, $x, $y, 0, "dashed", $linienstaerke, 503 $farbe, "", "" ); 504 505 # linie( $layer, $x, $y, $z, 0, $y, $z, "dashed", $linienstaerke, $farbe, "", "" ); 506 # linie( $layer, 0, $y, 0, 0, $y, $z, "dashed", $linienstaerke, $farbe, "", "" ); 507 # linie( $layer, 0, 0, $z, 0, $y, $z, "dashed", $linienstaerke, $farbe, "", "" ); 508 509 # linie( $layer, $x, $y, $z, $x, 0, $z, "dashed", $linienstaerke, $farbe, "", "" ); 510 # linie( $layer, $x, 0, 0, $x, 0, $z, "dashed", $linienstaerke, $farbe, "", "" ); 511 # linie( $layer, 0, 0, $z, $x, 0, $z, "dashed", $linienstaerke, $farbe, "", "" ); 512 513 } 514 } 515 else { 516 ellipse( 517 $layer, $xneu, $yneu, $radiusx, 518 $radiusy, $farbe, $fuellart, $fuellfarbe, 519 $linienart, $linienstaerke, $parameter 520 ); 521 522 } 523 524 beschriftung( $layer, $farbe, $x2, $y2, 0, $ausrichtung, $text ); 525 526 } 527 528 sub kreuzzeichnen { 529 my ( 530 $layer, $x, $y, $z, 531 $groesse, $winkel, $farbe, $linienart, 532 $linienstaerke, $text, $ausrichtung, $parameter 533 ) = @_; 534 535 my ( $xabstand, $yabstand, $xneu, $yneu, $radius ); 536 $xabstand = 537 nachkommastellen( sin( degtorad($winkel) ) * ( $groesse / 2 ), 4 ); 538 $yabstand = 539 nachkommastellen( cos( degtorad($winkel) ) * ( $groesse / 2 ), 4 ); 540 $radius = sqrt( $xabstand * $xabstand + $yabstand * $yabstand ); 541 if ( $z eq "" ) { 542 543 #minmax( $x, $x, $y, $y ); 544 $xneu = $x; 545 $yneu = $y; 546 } 547 else { 548 549 # minmax3d( $x, $y, $z, $x, $y, $z ); 550 $xneu = x3d( $x, $y, $z ); 551 $yneu = y3d( $x, $y, $z ); 552 553 } 554 setlabelabstand( $radius + 0.1 ); 555 kreuz( 556 $layer, $xneu, $yneu, 557 $groesse, $winkel, $farbe, 558 $linienart, $linienstaerke, $parameter 559 ); 560 beschriftung( $layer, $farbe, $xneu, $yneu, 0, $ausrichtung, $text ); 561 setlabelabstand(0); 562 563 } 564 565 sub kreuz { 566 my ( 567 $layer, $x, $y, 568 $groesse, $winkel, $farbe, 569 $linienart, $linienstaerke, $parameter 570 ) = @_; 571 572 my $pstricksersatz3d = get3dpstricks(); 573 my $pstricksersatz = getpstricks(); 574 575 setpstricks(0); 576 set3dpstricks(0); 577 578 my ( $xabstand1, $yabstand1, $xabstand2, $yabstand2 ); 579 $xabstand1 = sin( degtorad($winkel) ) * $groesse / 2; 580 $yabstand1 = cos( degtorad($winkel) ) * $groesse / 2; 581 $xabstand2 = sin( degtorad( $winkel + 90 ) ) * $groesse / 2; 582 $yabstand2 = cos( degtorad( $winkel + 90 ) ) * $groesse / 2; 583 linie( 584 $layer, 585 nachkommastellen( $x - $xabstand1, 4 ), 586 nachkommastellen( $y - $yabstand1, 4 ), 587 "", 588 nachkommastellen( $x + $xabstand1, 4 ), 589 nachkommastellen( $y + $yabstand1, 4 ), 590 "", 591 $linienart, 592 $linienstaerke, 593 $farbe, 594 $parameter, 595 "-" 596 ); 597 598 linie( 599 $layer, 600 nachkommastellen( $x - $xabstand2, 4 ), 601 nachkommastellen( $y - $yabstand2, 4 ), 602 "", 603 nachkommastellen( $x + $xabstand2, 4 ), 604 nachkommastellen( $y + $yabstand2, 4 ), 605 "", 606 $linienart, 607 $linienstaerke, 608 $farbe, 609 $parameter, 610 "-" 611 ); 612 setpstricks(0); 613 set3dpstricks($pstricksersatz3d); 614 setpstricks($pstricksersatz); 615 616 } 617 618 # Runde Sachen 619 sub ellipse { 620 my ( 621 $layer, $x, $y, $radius1, 622 $radius2, $farbe, $fuellart, $fuellfarbe, 623 $linienart, $linienstaerke, $parameter 624 ) = @_; 625 my $text; 626 settexthier(""); 627 if ( $radius1 == $radius2 ) { 628 paar( $x, $y ); 629 klammer( $radius1 * getskalierung("x") ); 630 631 befehlfuellungerzeugen( 632 $layer, "pscircle", $farbe, $fuellart, 633 $fuellfarbe, $linienart, $linienstaerke, $parameter, 634 "", gettexthier() 635 ); 636 637 } 638 else { 639 640 paar( $x, $y ); 641 paar( $radius1, $radius2 ); 642 643 befehlfuellungerzeugen( 644 $layer, "psellipse", $farbe, $fuellart, 645 $fuellfarbe, $linienart, $linienstaerke, $parameter, 646 "", gettexthier() 647 ); 648 649 } 650 settexthier(""); 651 minmax( $x - $radius1, $y - $radius1, $x + $radius1, $y + $radius1 ); 652 minmax( $x - $radius2, $y - $radius2, $x + $radius2, $y + $radius2 ); 653 setachsengraph( $x - $radius1, $y - $radius1, $x + $radius1, 654 $y + $radius1 ); 655 setachsengraph( $x - $radius2, $y - $radius2, $x + $radius2, 656 $y + $radius2 ); 657 } 658 659 sub kreis { 660 my ( 661 $layer, $x, $y, $radius, 662 $farbe, $fuellart, $fuellfarbe, $linienart, 663 $linienstaerke, $parameter 664 ) = @_; 665 666 if ( ( $radius != 0 ) && ( $linienstaerke != 0 ) ) { 667 668 ellipse( 669 $layer, $x, $y, $radius, 670 $radius, $farbe, $fuellart, $fuellfarbe, 671 $linienart, $linienstaerke, $parameter 672 ); 673 } 674 } 675 676 sub kreisskala { 677 my ( 678 $layer, $x, $y, $radius, 679 $laenge, $winkel, $farbe, $linienart, 680 $linienstaerke, $parameter, $pfeilart 681 ) = @_; 682 683 my ( $xstart, $ystart ); 684 $xstart = calcendpunktx( $x, $radius, $winkel ); 685 $ystart = calcendpunkty( $y, $radius, $winkel ); 686 687 liniepolar( 688 $layer, $xstart, $ystart, "", 689 $laenge, $winkel, "", $linienart, 690 $linienstaerke, $farbe, $parameter, $pfeilart 691 ); 692 693 } 694 695 sub kreistext { 696 my ( 697 $layer, $x, $y, $radius, $winkel, 698 $farbe, $text, $winkeltext, $ausrichtung 699 ) = @_; 700 701 my ( $xstart, $ystart ); 702 $xstart = calcendpunktx( $x, $radius, $winkel ); 703 $ystart = calcendpunkty( $y, $radius, $winkel ); 704 705 beschriftung( $layer, $farbe, $xstart, $ystart, $winkeltext, $ausrichtung, 706 $text ); 707 708 } 709 710 sub kreisbogen { 711 my ( 712 $layer, $linienart, $linienstaerke, $x1, 713 $y1, $r, $w1, $w2, 714 $farbe, $fuellart, $fuellfarbe, $geschlossen, 715 $parameter, $pfeilart 716 ) = @_; 717 718 ellipsebogen( 719 $layer, $linienart, 720 $linienstaerke, $x1, 721 $y1, $r * getskalierung("x"), 722 $r * getskalierung("y"), $w1, 723 $w2, $farbe, 724 $fuellart, $fuellfarbe, 725 $geschlossen, $parameter, 726 $pfeilart 727 ) 728 729 } 730 731 sub ellipsebogen { 732 my ( 733 $layer, $linienart, $linienstaerke, $x1, 734 $y1, $r1, $r2, $w1, 735 $w2, $farbe, $fuellart, $fuellfarbe, 736 $geschlossen, $parameter, $pfeilart 737 ) = @_; 738 739 my ( $x2, $x3, $y2, $y3 ); 740 741 if ( $r1 == $r2 ) { 742 743 paar( $x1, $y1 ); 744 klammer($r1); 745 klammer($w1); 746 klammer($w2); 747 748 $x2 = sprintf( "%0.4f", calcendpunktx( $x1, $r1, $w1 ) ); 749 $y2 = sprintf( "%0.4f", calcendpunkty( $y1, $r2, $w1 ) ); 750 $x3 = sprintf( "%0.4f", calcendpunktx( $x1, $r1, $w2 ) ); 751 $y3 = sprintf( "%0.4f", calcendpunkty( $y1, $r2, $w2 ) ); 752 if ( $geschlossen eq "ja" ) { 753 754 befehlfuellungerzeugen( 755 $layer, "pswedge", $farbe, $fuellart, 756 $fuellfarbe, $linienart, $linienstaerke, $parameter, 757 "", gettexthier() 758 ); 759 760 befehlerzeugen( $layer, "psarc", $farbe, $linienart, $linienstaerke, 761 $parameter, $pfeilart, gettexthier() ); 762 763 } 764 else { 765 befehlerzeugen( $layer, "psarc", $farbe, $linienart, $linienstaerke, 766 $parameter, $pfeilart, gettexthier() ); 767 } 768 minmax( $x1 - $r1, $y1 - $r2, $x1 - $r1, $y1 - $r2 ); 769 minmax( $x1 + $r1, $y1 + $r2, $x1 + $r1, $y1 + $r2 ); 770 minmax( $x1 - $r1, $y1 + $r2, $x1 - $r1, $y1 + $r2 ); 771 minmax( $x1 + $r1, $y1 - $r2, $x1 + $r1, $y1 - $r2 ); 772 setachsengraph( $x1 - $r1, $x1 - $r1, $y1 - $r2, $y1 - $r2 ); 773 setachsengraph( $x1 + $r1, $x1 + $r1, $y1 + $r2, $y1 + $r2 ); 774 settexthier(""); 775 } 776 else { 777 778 minmax( $x1 - $r1, $y1 - $r1, $x1 + $r1, $y1 + $r1 ); 779 minmax( $x1 - $r2, $y1 - $r2, $x1 + $r2, $y1 + $r2 ); 780 setachsengraph( $x1 - $r1, $y1 - $r1, $x1 + $r1, $y1 + $r1 ); 781 setachsengraph( $x1 - $r2, $y1 - $r2, $x1 + $r2, $y1 + $r2 ); 782 783 my $x2 = $x1 + $r1 * cos( degtorad($w1) ); 784 my $y2 = $y1 + $r2 * sin( degtorad($w1) ); 785 786 my $x3 = $x1 + $r1 * cos( degtorad($w2) ); 787 my $y3 = $y1 + $r2 * sin( degtorad($w2) ); 788 789 if ( $geschlossen eq "ja" ) { 790 791 einschlussanfang( $layer, $farbe, $fuellart, $fuellfarbe, 792 $linienart, $linienstaerke, $parameter ); 793 linie( $layer, $x1, $y1, "", $x2, $y2, "", $linienart, 794 $linienstaerke, $farbe, $parameter, "" ); 795 settexthier(""); 796 797 paar( $x1, $y1 ); 798 paarohneminmax( $r1, $r2 ); 799 800 klammer($w1); 801 klammer($w2); 802 803 befehlfuellungerzeugen( $layer, "psellipticarc", "", "", "", "", "", 804 "", "", gettexthier() ); 805 linie( $layer, $x3, $y3, "", $x1, $y1, "", $linienart, 806 $linienstaerke, $farbe, $parameter, "" ); 807 808 einschlussende( $layer, $farbe, $fuellart, $fuellfarbe, $linienart, 809 $linienstaerke, $parameter ); 810 paar( $x1, $y1 ); 811 paarohneminmax( $r1, $r2 ); 812 813 klammer($w1); 814 klammer($w2); 815 befehlerzeugen( $layer, "psellipticarc", $farbe, $linienart, 816 $linienstaerke, $parameter, $pfeilart, gettexthier() ); 817 818 linie( $layer, $x3, $y3, "", $x1, $y1, "", $linienart, 819 $linienstaerke, $farbe, $parameter, "" ); 820 linie( $layer, $x1, $y1, "", $x2, $y2, "", $linienart, 821 $linienstaerke, $farbe, $parameter, "" ); 822 823 } 824 else { 825 settexthier(""); 826 paar( $x1, $y1 ); 827 paarohneminmax( $r1, $r2 ); 828 klammer($w1); 829 klammer($w2); 830 befehlerzeugen( $layer, "psellipticarc", $farbe, $linienart, 831 $linienstaerke, $parameter, $pfeilart, gettexthier() ); 832 } 833 } 834 } 835 836 sub ring { 837 my ( 838 $layer, $linienart, $linienstaerke, $xzentrum, 839 $yzentrum, $radius, $dicke, $winkel1, 840 $winkel2, $farbe, $fuellart, $fuellfarbe, 841 $parameter 842 ) = @_; 843 844 settexthier(""); 845 my $radiusinnen = $radius - $dicke; 846 my $winkeldifferenz = abs( $winkel1 - $winkel2 ); 847 my $x1 = 848 nachkommastellen( calcendpunktx( $xzentrum, $radius, $winkel1 ), 2 ); 849 my $y1 = 850 nachkommastellen( calcendpunkty( $yzentrum, $radius, $winkel1 ), 2 ); 851 my $x2 = 852 nachkommastellen( calcendpunktx( $xzentrum, $radius, $winkel2 ), 2 ); 853 my $y2 = 854 nachkommastellen( calcendpunkty( $yzentrum, $radius, $winkel2 ), 2 ); 855 my $x11 = 856 nachkommastellen( calcendpunktx( $xzentrum, $radiusinnen, $winkel1 ), 2 ); 857 my $y11 = 858 nachkommastellen( calcendpunkty( $yzentrum, $radiusinnen, $winkel1 ), 2 ); 859 my $x21 = 860 nachkommastellen( calcendpunktx( $xzentrum, $radiusinnen, $winkel2 ), 2 ); 861 my $y21 = 862 nachkommastellen( calcendpunkty( $yzentrum, $radiusinnen, $winkel2 ), 2 ); 863 864 my $hilfsfuellfarbe = getfuellfarbe(); 865 setfuellfarbe(""); 866 867 befehlfuellungerzeugen( 868 $layer, "pscustom", "", $fuellart, $farbe, "", 869 "", $parameter, "", "{\\gsave" 870 ); 871 872 paar( $xzentrum, $yzentrum ); 873 klammer($radius); 874 klammer($winkel1); 875 klammer($winkel2); 876 877 befehlerzeugen( $layer, "psarc", $farbe, $linienart, $linienstaerke, 878 $parameter, "", gettexthier() ); 879 880 settexthier(""); 881 882 paar( $xzentrum, $yzentrum ); 883 klammer($radiusinnen); 884 885 klammer($winkel2); 886 klammer($winkel1); 887 888 befehlerzeugen( $layer, "psarcn", $farbe, $linienart, $linienstaerke, 889 $parameter, "", gettexthier() ); 890 891 settexthier(""); 892 893 befehlfuellungerzeugen( 894 $layer, "fill", "", $fuellart, 895 $fuellfarbe, "", "", $parameter, 896 "", "\\grestore}" 897 ); 898 899 paar( $xzentrum, $yzentrum ); 900 klammer($radius); 901 klammer($winkel1); 902 klammer($winkel2); 903 904 befehlerzeugen( $layer, "psarc", $farbe, $linienart, $linienstaerke, 905 $parameter, "", gettexthier() ); 906 907 settexthier(""); 908 909 paar( $xzentrum, $yzentrum ); 910 klammer($radiusinnen); 911 912 klammer($winkel2); 913 klammer($winkel1); 914 915 befehlerzeugen( $layer, "psarcn", $farbe, $linienart, $linienstaerke, 916 $parameter, "", gettexthier() ); 917 918 if ( $winkeldifferenz < 360 ) { 919 linie( $layer, $x1, $y1, "", $x11, $y11, "", "solid", $linienstaerke, 920 $farbe, $parameter, "" ); 921 linie( $layer, $x2, $y2, "", $x21, $y21, "", "solid", $linienstaerke, 922 $farbe, $parameter, "" ); 923 } 924 minmax( 925 $xzentrum - $radius, 926 $xzentrum - $radius, 927 $yzentrum - $radius, 928 $yzentrum - $radius 929 ); 930 minmax( 931 $xzentrum + $radius, 932 $xzentrum + $radius, 933 $yzentrum + $radius, 934 $yzentrum + $radius 935 ); 936 setachsengraph( 937 $xzentrum - $radius, 938 $xzentrum - $radius, 939 $yzentrum - $radius, 940 $yzentrum - $radius 941 ); 942 setachsengraph( 943 $xzentrum + $radius, 944 $xzentrum + $radius, 945 $yzentrum + $radius, 946 $yzentrum + $radius 947 ); 948 949 settexthier(""); 950 setfuellfarbe($hilfsfuellfarbe); 951 } 952 953 # Eckige Dinge 954 sub rechteck { 955 my ( 956 $layer, $x, $y, $breite, 957 $hoehe, $winkel, $farbe, $fuellart, 958 $fuellfarbe, $linienart, $linienstaerke, $parameter 959 ) = @_; 960 961 my ( $x2, $y2, $x3, $x4, $y3, $y4 ); 962 963 $x2 = nachkommastellen( $x + cos( degtorad($winkel) ) * $breite, 4 ); 964 $y2 = nachkommastellen( $y + sin( degtorad($winkel) ) * $breite, 4 ); 965 $x3 = nachkommastellen( $x2 - sin( degtorad($winkel) ) * $hoehe, 4 ); 966 $y3 = nachkommastellen( $y2 + cos( degtorad($winkel) ) * $hoehe, 4 ); 967 $x4 = nachkommastellen( $x - sin( degtorad($winkel) ) * $hoehe, 4 ); 968 $y4 = nachkommastellen( $y + cos( degtorad($winkel) ) * $hoehe, 4 ); 969 970 achsengraph( $x, $y ); 971 achsengraph( $x2, $y2 ); 972 achsengraph( $x3, $y3 ); 973 achsengraph( $x4, $y4 ); 974 975 settexthier(""); 976 if ( $linienstaerke != 0 ) { 977 978 if ( $winkel == 0 ) { 979 paar( $x, $y ); 980 paar( $x + $breite, $y + $hoehe ); 981 982 befehlfuellungerzeugen( 983 $layer, "psframe", $farbe, $fuellart, 984 $fuellfarbe, $linienart, $linienstaerke, $parameter, 985 "", gettexthier() 986 ); 987 988 } 989 else { 990 paar( $x, $y ); 991 paar( $x2, $y2 ); 992 paar( $x3, $y3 ); 993 paar( $x4, $y4 ); 994 995 polygon( $layer, $linienart, $linienstaerke, $farbe, $fuellart, 996 $fuellfarbe, $parameter, gettexthier() ); 997 } 998 } 999 settexthier(""); 1000 1001 } 1002 1003 sub parallelogramm { 1004 my ( 1005 $layer, $x1, $y1, $breite, 1006 $hoehe, $w1, $w2, $farbe, 1007 $fuellart, $fuellfarbe, $linienart, $linienstaerke, 1008 $parameter 1009 ) = @_; 1010 1011 settexthier(""); 1012 my ( $x2, $y2, $x3, $x4, $y3, $y4 ); 1013 if ( $w2 == 90 ) { 1014 rechteck( 1015 $layer, $x1, $y1, $breite, 1016 $hoehe, $w1, $farbe, $fuellart, 1017 $fuellfarbe, $linienart, $linienstaerke, $parameter 1018 ); 1019 } 1020 else { 1021 $x2 = calcendpunktx( $x1, $breite, $w1 ); 1022 $y2 = calcendpunkty( $y1, $breite, $w1 ); 1023 $x3 = calcendpunktx( $x2, $hoehe, $w1 + $w2 ); 1024 $y3 = calcendpunkty( $y2, $hoehe, $w1 + $w2 ); 1025 $x4 = calcendpunktx( $x1, $hoehe, $w1 + $w2 ); 1026 $y4 = calcendpunkty( $y1, $hoehe, $w1 + $w2 ); 1027 1028 paar( $x1, $y1 ); 1029 paar( $x2, $y2 ); 1030 paar( $x3, $y3 ); 1031 paar( $x4, $y4 ); 1032 1033 polygon( $layer, $linienart, $linienstaerke, $farbe, $fuellart, 1034 $fuellfarbe, $parameter, gettexthier() ); 1035 1036 } 1037 settexthier(""); 1038 1039 } 1040 1041 sub dreieckbreitehoehe { 1042 my ( 1043 $layer, $x1, $y1, $breite, 1044 $hoehe, $winkel1, $winkel2, $farbe, 1045 $fuellart, $fuellfarbe, $linienart, $linienstaerke, 1046 $parameter 1047 ) = @_; 1048 1049 $x1 = nachkommastellen( $x1, 3 ); 1050 $y1 = nachkommastellen( $y1, 3 ); 1051 1052 my ( $x2, $y2, $x3, $y3 ); 1053 1054 if ( $winkel1 == 90 ) { 1055 1056 $x2 = nachkommastellen( $x1 + cos( degtorad($winkel2) ) * $breite, 3 ); 1057 $y2 = nachkommastellen( $y1 + sin( degtorad($winkel2) ) * $breite, 3 ); 1058 $x3 = nachkommastellen( $x2 - sin( degtorad($winkel2) ) * $hoehe, 3 ); 1059 $y3 = nachkommastellen( $y2 + cos( degtorad($winkel2) ) * $hoehe, 3 ); 1060 1061 } 1062 else { 1063 1064 $x2 = nachkommastellen( $x1 + cos( degtorad($winkel2) ) * $breite, 3 ); 1065 $y2 = nachkommastellen( $y1 + sin( degtorad($winkel2) ) * $breite, 3 ); 1066 $x3 = nachkommastellen( 1067 $x2 - sin( degtorad( $winkel1 + $winkel2 ) ) * $hoehe, 3 ); 1068 $y3 = nachkommastellen( 1069 $y2 + cos( degtorad( $winkel1 + $winkel2 ) ) * $hoehe, 3 ); 1070 } 1071 1072 dreieck( $layer, $x1, $y1, "", $x2, $y2, "", $x3, $y3, "", $farbe, 1073 $fuellart, $fuellfarbe, $linienart, $linienstaerke, $parameter ); 1074 1075 } 1076 1077 sub dreieckrechtwinklig { 1078 my ( 1079 $layer, $x1, $y1, $laenge, 1080 $winkelz, $winkel, $farbe, $fuellart, 1081 $fuellfarbe, $linienart, $linienstaerke, $parameter 1082 ) = @_; 1083 1084 $x1 = nachkommastellen( $x1, 3 ); 1085 $y1 = nachkommastellen( $y1, 3 ); 1086 1087 my ( $schritt, $winkelerg, $x2, $x3, $x4, $y2, $y3, $y4 ); 1088 1089 $winkelerg = 90 - $winkelz - $winkel; 1090 1091 $winkelerg = 90 - $winkelz - $winkel; 1092 1093 $x2 = nachkommastellen( $x1 + cos( degtorad($winkel) ) * $laenge, 3 ); 1094 $y2 = nachkommastellen( $y1 + sin( degtorad($winkel) ) * $laenge, 3 ); 1095 1096 # Neuer Punkt im Dreieck, 1097 # dazu werden die neuen Laengen 1098 # und die naechste Koordinate berechnet. 1099 my $laengede = nachkommastellen( cos( degtorad($winkelz) ) * $laenge, 3 ); 1100 my $laengeec = 1101 nachkommastellen( sqrt( $laenge * $laenge - $laengede * $laengede ), 3 ); 1102 my $laengedf = 1103 nachkommastellen( cos( degtorad($winkelerg) ) * $laengede, 3 ); 1104 my $laengefe = 1105 nachkommastellen( sin( degtorad($winkelerg) ) * $laengede, 3 ); 1106 $x3 = nachkommastellen( $x1 + $laengefe, 3 ); 1107 $y3 = nachkommastellen( $y1 + $laengedf, 3 ); 1108 1109 dreieck( $layer, $x1, $y1, "", $x2, $y2, "", $x3, $y3, "", $farbe, 1110 $fuellart, $fuellfarbe, $linienart, $linienstaerke, $parameter ); 1111 } 1112 1113 my ($hyp); 1114 $hyp = 0; 1115 1116 sub sethyp { $hyp = 1; } 1117 sub gethyp { return $hyp; } 1118 1119 sub dreieckrechtwinkligpunkte { 1120 my ( 1121 $layer, $x1, $y1, $x2, 1122 $y2, $winkel, $farbe, $fuellart, 1123 $fuellfarbe, $linienart, $linienstaerke, $parameter 1124 ) = @_; 1125 1126 my $dx = abs( $x2 - $x1 ); 1127 my $dy = abs( $y2 - $y1 ); 1128 my $laenge = sqrt( $dx * $dx + $dy * $dy ); 1129 my $winkeldrehung = radtodeg( atan2( $dy, $dx ) ); 1130 1131 dreieckrechtwinklig( 1132 $layer, $x1, $y1, $laenge, 1133 $winkel, $winkeldrehung, $farbe, $fuellart, 1134 $fuellfarbe, $linienart, $linienstaerke, $parameter 1135 ); 1136 1137 } 1138 1139 sub dreieckrechtwinkligpunktehoehe { 1140 my ( 1141 $layer, $x1, $y1, $x2, 1142 $y2, $hoehe, $farbe, $fuellart, 1143 $fuellfarbe, $linienart, $linienstaerke, $parameter 1144 ) = @_; 1145 1146 my ( $winkel, $dx, $dy, $winkelerg, $winkelb, $winkelergb, $x3, $y3 ); 1147 1148 $dx = $x2 - $x1; 1149 $dy = $y2 - $y1; 1150 1151 if ( $dy <= 0 ) { 1152 if ( $dx <= 0 ) { 1153 $winkel = radtodeg( atan( $dy / $dx ) ); 1154 $winkelerg = 90 - $winkel; 1155 $winkelb = degtorad($winkel); 1156 $winkelergb = degtorad($winkelerg); 1157 1158 $x3 = nachkommastellen( $x1 + sin($winkelb) * $hoehe, 3 ); 1159 $y3 = nachkommastellen( $y1 - cos($winkelb) * $hoehe, 3 ); 1160 1161 } 1162 else { 1163 $winkel = radtodeg( atan( $dy / $dx ) ); 1164 $winkelerg = 90 - $winkel; 1165 $winkelb = degtorad($winkel); 1166 $winkelergb = degtorad($winkelerg); 1167 1168 $x3 = nachkommastellen( $x1 - sin($winkelb) * $hoehe, 3 ); 1169 $y3 = nachkommastellen( $y1 + cos($winkelb) * $hoehe, 3 ); 1170 1171 } 1172 } 1173 else { 1174 if ( $dx <= 0 ) { 1175 $winkel = -radtodeg( atan( $dy / $dx ) ); 1176 $winkelerg = 90 - $winkel; 1177 $winkelb = degtorad($winkel); 1178 $winkelergb = degtorad($winkelerg); 1179 1180 $x3 = nachkommastellen( $x1 - sin($winkelb) * $hoehe, 3 ); 1181 $y3 = nachkommastellen( $y1 - cos($winkelb) * $hoehe, 3 ); 1182 1183 } 1184 else { 1185 $winkel = radtodeg( atan( $dy / $dx ) ); 1186 $winkelerg = 90 - $winkel; 1187 $winkelb = degtorad($winkel); 1188 $winkelergb = degtorad($winkelerg); 1189 1190 $x3 = nachkommastellen( $x1 - sin($winkelb) * $hoehe, 3 ); 1191 $y3 = nachkommastellen( $y1 + cos($winkelb) * $hoehe, 3 ); 1192 1193 } 1194 } 1195 1196 dreieck( $layer, $x1, $y1, "", $x2, $y2, "", $x3, $y3, "", $farbe, 1197 $fuellart, $fuellfarbe, $linienart, $linienstaerke, $parameter ); 1198 1199 } 1200 1201 sub pfeil { 1202 my ( 1203 $layer, $x, $y, $breite, 1204 $hoehe, $pfeil, $pfeillaenge, $farbe, 1205 $fuellart, $fuellfarbe, $linienart, $linienstaerke, 1206 $parameter 1207 ) = @_; 1208 1209 settexthier(""); 1210 1211 paar( $x, $y ); 1212 paar( $x + $breite, $y ); 1213 paar( $x + $breite, $y - $pfeil ); 1214 paar( $x + $breite + $pfeillaenge, $y + 1 / 2 * $hoehe ); 1215 paar( $x + $breite, $y + $pfeil + $hoehe ); 1216 paar( $x + $breite, $y + $hoehe ); 1217 paar( $x, $y + $hoehe ); 1218 1219 polygon( $layer, $linienart, $linienstaerke, $farbe, $fuellart, $fuellfarbe, 1220 $parameter, gettexthier() ); 1221 1222 settexthier(""); 1223 1224 } 1225 1226 sub pfeilknick { 1227 1228 my ( 1229 $layer, $x, $y, $breite, 1230 $breiteknick, $hoehe, $pfeil, $pfeillaenge, 1231 $farbe, $fuellart, $fuellfarbe, $linienart, 1232 $linienstaerke, $parameter 1233 ) = @_; 1234 1235 settexthier(""); 1236 1237 paar( $x, $y ); 1238 1239 paar( $x + $breiteknick, $y ); 1240 paar( $x + $breiteknick, $y - ( $breite - $breiteknick ) + $hoehe ); 1241 paar( $x + $breiteknick - $pfeil, 1242 $y - ( $breite - $breiteknick ) + $hoehe ); 1243 paar( $x + $breiteknick + 1 / 2 * $hoehe, 1244 $y - ( $breite - $breiteknick ) + $hoehe - $pfeillaenge / 2 ); 1245 paar( 1246 $x + $breiteknick + $pfeil + $hoehe, 1247 $y - ( $breite - $breiteknick ) + $hoehe 1248 ); 1249 paar( $x + $breiteknick + $hoehe, 1250 $y - ( $breite - $breiteknick ) + $hoehe ); 1251 1252 paar( $x + $breiteknick + $hoehe, $y + $hoehe ); 1253 1254 paar( $x, $y + $hoehe ); 1255 polygon( $layer, $linienart, $linienstaerke, $farbe, $fuellart, $fuellfarbe, 1256 $parameter, gettexthier() ); 1257 1258 settexthier(""); 1259 1260 } 1261 1262 sub rechtecktext { 1263 my ( 1264 $layer, $x1, $y1, $x2, 1265 $y2, $text, $farbe, $fuellart, 1266 $fuellfarbe, $linienart, $linienstaerke, $parameter 1267 ) = @_; 1268 1269 achsengraph( $x1, $y1 ); 1270 achsengraph( $x2, $y2 ); 1271 tupel( $x1, $y1, $x2, $y2 ); 1272 1273 if ( $farbe eq getfarbe() ) { 1274 textanhaengen("{"); 1275 textanhaengen($text); 1276 textanhaengen("}"); 1277 } 1278 else { 1279 textanhaengen("{\\color{"); 1280 textanhaengen($farbe); 1281 textanhaengen("}"); 1282 textanhaengen($text); 1283 textanhaengen("}"); 1284 } 1285 befehlfuellungerzeugen( 1286 $layer, "psTextFrame", $farbe, $fuellart, 1287 $fuellfarbe, $linienart, $linienstaerke, $parameter, 1288 "", gettexthier() 1289 ); 1290 1291 } 1292 1293 sub dreieck { 1294 my ( $layer, $x1, $y1, $z1, $x2, $y2, $z2, $x3, $y3, $z3, $farbe, $fuellart, 1295 $fuellfarbe, $linienart, $linienstaerke, $parameter ) 1296 = @_; 1297 1298 achsengraph( $x1, $y1 ); 1299 achsengraph( $x2, $y2 ); 1300 achsengraph( $x3, $y3 ); 1301 settexthier(""); 1302 if ( ( $z1 eq "" ) || ( $z2 eq "" ) || ( $z3 eq "" ) ) { 1303 1304 paar( $x1, $y1 ); 1305 paar( $x2, $y2 ); 1306 paar( $x3, $y3 ); 1307 1308 } 1309 else { 1310 setachsengraph3d( $x1, $y1, $z1, $x1, $y1, $z1 ); 1311 setachsengraph3d( $x2, $y2, $z2, $x2, $y2, $z2 ); 1312 setachsengraph3d( $x3, $y3, $z3, $x3, $y3, $z3 ); 1313 tripel( $x1, $y1, $z1 ); 1314 tripel( $x2, $y2, $z2 ); 1315 tripel( $x3, $y3, $z3 ); 1316 tripel( $x1, $y1, $z1 ); 1317 1318 } 1319 1320 polygon( $layer, $linienart, $linienstaerke, $farbe, $fuellart, $fuellfarbe, 1321 $parameter, gettexthier() ); 1322 settexthier(""); 1323 1324 } 1325 1326 sub viereck { 1327 my ( $layer, $x1, $y1, $z1, $x2, $y2, $z2, $x3, $y3, $z3, $x4, $y4, $z4, 1328 $farbe, $fuellart, $fuellfarbe, $linienart, $linienstaerke, $parameter ) 1329 = @_; 1330 settexthier(""); 1331 if ( ( $z1 eq "" ) || ( $z2 eq "" ) || ( $z3 eq "" ) ) { 1332 achsengraph( $x1, $y1 ); 1333 achsengraph( $x2, $y2 ); 1334 achsengraph( $x3, $y3 ); 1335 achsengraph( $x4, $y4 ); 1336 vier( $x1, $y1, $x2, $y2, $x3, $y3, $x4, $y4 ); 1337 1338 } 1339 else { 1340 setachsengraph3d( $x1, $y1, $z1, $x1, $y1, $z1 ); 1341 setachsengraph3d( $x2, $y2, $z2, $x2, $y2, $z2 ); 1342 setachsengraph3d( $x3, $y3, $z3, $x3, $y3, $z3 ); 1343 setachsengraph3d( $x4, $y4, $z4, $x4, $y4, $z4 ); 1344 tripel( $x1, $y1, $z1 ); 1345 tripel( $x2, $y2, $z2 ); 1346 tripel( $x3, $y3, $z3 ); 1347 tripel( $x4, $y4, $z4 ); 1348 tripel( $x1, $y1, $z1 ); 1349 1350 } 1351 1352 polygon( $layer, $linienart, $linienstaerke, $farbe, $fuellart, $fuellfarbe, 1353 $parameter, gettexthier() ); 1354 settexthier(""); 1355 1356 } 1357 1358 sub neck { 1359 my ( 1360 $layer, $x1, $y1, $anzahl, 1361 $laenge, $winkel, $farbe, $fuellart, 1362 $fuellfarbe, $linienart, $linienstaerke, $parameter 1363 ) = @_; 1364 settexthier(""); 1365 1366 my $innenwinkel = 360 / $anzahl; 1367 my $x; 1368 1369 my $i = 0; 1370 for ( $i = 0 ; $i <= $anzahl ; $i++ ) { 1371 paar( 1372 nachkommastellen( 1373 $x1 + $laenge * cos( degtorad( $winkel + $i * $innenwinkel ) ), 1374 4 1375 ), 1376 nachkommastellen( 1377 $y1 + $laenge * sin( degtorad( $winkel + $i * $innenwinkel ) ), 1378 4 1379 ) 1380 ); 1381 achsengraph( 1382 nachkommastellen( 1383 $x1 + $laenge * cos( degtorad( $winkel + $i * $innenwinkel ) ), 1384 4 1385 ), 1386 nachkommastellen( 1387 $y1 + $laenge * sin( degtorad( $winkel + $i * $innenwinkel ) ), 1388 4 1389 ) 1390 ); 1391 } 1392 1393 polygon( $layer, $linienart, $linienstaerke, $farbe, $fuellart, $fuellfarbe, 1394 $parameter, gettexthier() ); 1395 settexthier(""); 1396 1397 } 1398 1399 sub winkel { 1400 my ( 1401 $layer, $x1, $y1, $x2, 1402 $y2, $x3, $y3, $radius, 1403 $text, $winkelrichtung, $farbe, $fuellart, 1404 $fuellfarbe, $linienart, $linienstaerke, $parameter 1405 ) = @_; 1406 my ( $winkel, $winkel1, $winkel2, $xtext, $ytext ); 1407 my $zu; 1408 1409 if ( getfuellfarbe() eq $fuellfarbe ) { 1410 $zu = "nein"; 1411 } 1412 else { 1413 $zu = "ja"; 1414 } 1415 1416 $winkel = vektorwinkel( 1417 vektordifferenz( "x", $x2, $y2, 0, $x1, $y1, 0 ), 1418 vektordifferenz( "y", $x2, $y2, 0, $x1, $y1, 0 ), 1419 vektordifferenz( "z", $x2, $y2, 0, $x1, $y1, 0 ), 1420 vektordifferenz( "x", $x2, $y2, 0, $x3, $y3, 0 ), 1421 vektordifferenz( "y", $x2, $y2, 0, $x3, $y3, 0 ), 1422 vektordifferenz( "z", $x2, $y2, 0, $x3, $y3, 0 ) 1423 ); 1424 kommentar( $layer, "Der Winkel " . $winkel . " wird gezeichnet" ); 1425 $winkel1 = nachkommastellen( 1426 radtodeg( 1427 atan2( 1428 vektordifferenz( "y", $x2, $y2, 0, $x1, $y1, 0 ), 1429 vektordifferenz( "x", $x2, $y2, 0, $x1, $y1, 0 ) 1430 ) 1431 ), 1432 3 1433 ); 1434 $winkel2 = nachkommastellen( 1435 radtodeg( 1436 atan2( 1437 vektordifferenz( "y", $x2, $y2, 0, $x3, $y3, 0 ), 1438 vektordifferenz( "x", $x2, $y2, 0, $x3, $y3, 0 ) 1439 ) 1440 ), 1441 3 1442 ); 1443 if ( $winkelrichtung eq "i" ) { 1444 kreisbogen( 1445 $layer, $linienart, 1446 $linienstaerke, $x2, 1447 $y2, $radius * getskalierung("x"), 1448 $winkel1, $winkel2, 1449 $farbe, $fuellart, 1450 $fuellfarbe, $zu, 1451 $parameter, "" 1452 ); 1453 $xtext = $x2 + cos( degtorad( $winkel1 + $winkel / 2 ) ) * $radius / 2; 1454 $ytext = $y2 + sin( degtorad( $winkel1 + $winkel / 2 ) ) * $radius / 2; 1455 beschriftung( $layer, "black", $xtext, $ytext, 0, 90, $text ); 1456 if ( ( $winkel == 90 ) && ( $text eq " " ) ) { 1457 kreis( 1458 $layer, $xtext, $ytext, 0.06, "black", "solid", 1459 "black", "solid", 0.01 1460 ); 1461 } 1462 } 1463 elsif ( $winkelrichtung eq "a" ) { 1464 kreisbogen( 1465 $layer, $linienart, 1466 $linienstaerke, $x2, 1467 $y2, $radius * getskalierung("x"), 1468 $winkel2, $winkel1, 1469 $farbe, $fuellart, 1470 $fuellfarbe, $zu, 1471 $parameter, "" 1472 ); 1473 $xtext = $x2 - 1474 cos( degtorad( $winkel2 - ( 360 + $winkel ) / 2 ) ) * $radius / 2; 1475 $ytext = $y2 + 1476 sin( degtorad( $winkel2 + ( 360 - $winkel ) / 2 ) ) * $radius / 2; 1477 beschriftung( $layer, "black", $xtext, $ytext, 0, 90, $text ); 1478 if ( ( $winkel == 90 ) && ( $text eq " " ) ) { 1479 kreis( 1480 $layer, $xtext, $ytext, 0.06, "black", "solid", 1481 "black", "solid", 0.01 1482 ); 1483 } 1484 } 1485 else { 1486 kreisbogen( 1487 $layer, $linienart, 1488 $linienstaerke, $x2, 1489 $y2, $radius * getskalierung("x"), 1490 $winkel1, $winkel2, 1491 $farbe, $fuellart, 1492 $fuellfarbe, $zu, 1493 $parameter, "" 1494 ); 1495 $xtext = $x2 + cos( degtorad( $winkel1 + $winkel / 2 ) ) * $radius / 2; 1496 $ytext = $y2 + sin( degtorad( $winkel1 + $winkel / 2 ) ) * $radius / 2; 1497 beschriftung( $layer, "black", $xtext, $ytext, 0, 90, $text ); 1498 } 1499 1500 } 1501 1502 sub punktezeichnen { 1503 my ( $layer, $x1, $y1, $x2, $y2, $farbe, $verbunden ) = @_; 1504 if ( $verbunden eq "jamitk" ) { 1505 kreis( $layer, $x1, $y1, 0.15, $farbe, "solid", $farbe, "solid", 0.01 ); 1506 linie( 1507 $layer, $x1, $y1, "", $x2, $y2, 1508 "", "solid", 0.15, $farbe, "", "-" 1509 ); 1510 kreis( $layer, $x2, $y2, 0.15, $farbe, "solid", $farbe, "solid", 0.01 ); 1511 } 1512 if ( $verbunden eq "jaohnek" ) { 1513 linie( 1514 $layer, $x1, $y1, "", $x2, $y2, 1515 "", "solid", 0.15, $farbe, "", "-" 1516 ); 1517 } 1518 if ( $verbunden eq "nein" ) { 1519 kreis( $layer, $x1, $y1, 0.15, $farbe, "solid", $farbe, "solid", 0.01 ); 1520 kreis( $layer, $x2, $y2, 0.15, $farbe, "solid", $farbe, "solid", 0.01 ); 1521 } 1522 1523 } 1524 1525 # Tangenten, Steigungsdreiecke etc, werden gezeichnet 1526 sub tangente { 1527 my ( $layer, $func, $x, $breite, $farbe, $linienart, $linienstaerke, 1528 $parameter ) 1529 = @_; 1530 1531 linie( 1532 $layer, 1533 $x - $breite / 2, 1534 calctangente( $func, $x - $breite / 2, $x ), 1535 "", 1536 $x + $breite / 2, 1537 calctangente( $func, $x + $breite / 2, $x ), 1538 "", 1539 $linienart, 1540 $linienstaerke, 1541 $farbe, 1542 $parameter, 1543 "" 1544 ); 1545 1546 } 1547 1548 sub tangentendreieck { 1549 my ( $layer, $func, $x, $breite, $farbe, $linienart, $linienstaerke, 1550 $parameter ) 1551 = @_; 1552 my $y = calcfunk( $func, "x", $x ); 1553 1554 my ( $xmin, $xmax, $ymin, $ymax, $m, $dx, $dy ); 1555 $xmin = $x - $breite / 2; 1556 $xmax = $x + $breite / 2; 1557 $ymin = calctangente( $func, $xmin, $x ); 1558 $ymax = calctangente( $func, $xmax, $x ); 1559 $dy = $ymax - $ymin; 1560 $dx = $xmax - $xmin, 1561 1562 $m = $dy / $dx; 1563 1564 kommentar( $layer, "y/x = " . $dy . "/" . $dx . " = " . $m ); 1565 1566 if ( $m > 0 ) { 1567 1568 dreieck( $layer, $xmin, $ymin, "", $xmax, $ymax, "", $xmax, $ymin, "", 1569 $farbe, "", "", $linienart, $linienstaerke, $parameter ); 1570 1571 } 1572 else { 1573 dreieck( $layer, $xmin, $ymin, "", $xmax, $ymax, "", $xmin, $ymax, "", 1574 $farbe, "", "", $linienart, $linienstaerke, $parameter ); 1575 1576 } 1577 1578 } 1579 1580 sub sekante { 1581 my ( $layer, $func, $x, $breite, $farbe, $linienart, $linienstaerke, 1582 $parameter ) 1583 = @_; 1584 1585 linie( 1586 $layer, $x, 1587 calcfunk( $func, "x", $x ), "", 1588 $x + $breite, calcfunk( $func, "x", $x + $breite ), 1589 "", $linienart, 1590 $linienstaerke, $farbe, 1591 $parameter, "" 1592 ); 1593 1594 } 1595 1596 sub sekantendreieck { 1597 my ( $layer, $func, $x, $breite, $farbe, $linienart, $linienstaerke, 1598 $parameter ) 1599 = @_; 1600 my $y = calcfunk( $func, "x", $x ); 1601 my $xminwert = $x; 1602 my $xmaxwert = $x + $breite; 1603 my $yminwert = calcfunk( $func, "x", $xminwert ); 1604 my $ymaxwert = calcfunk( $func, "x", $xmaxwert ); 1605 my $yabl = ( $ymaxwert - $yminwert ) / ( $xmaxwert - $xminwert ); 1606 if ( $yminwert > $ymaxwert ) { 1607 dreieck( 1608 $layer, $xminwert, $yminwert, "", 1609 $xminwert, $ymaxwert, "", $xmaxwert, 1610 $ymaxwert, "", $farbe, "", 1611 "", $linienart, $linienstaerke, $parameter 1612 ); 1613 } 1614 else { 1615 dreieck( 1616 $layer, $xminwert, $yminwert, "", 1617 $xmaxwert, $yminwert, "", $xmaxwert, 1618 $ymaxwert, "", $farbe, "", 1619 "", $linienart, $linienstaerke, $parameter 1620 ); 1621 } 1622 } 1623 1624 my $labelabstand = 0; 1625 1626 sub setlabelabstand { 1627 my ($wert) = @_; 1628 $labelabstand = $wert; 1629 } 1630 1631 sub getlabelabstand { return $labelabstand; } 1632 1633 ### Text einfuegen 1634 sub beschriftung { 1635 my ( $layer, $farbe, $x, $y, $winkel, $ausrichtung, $text ) = @_; 1636 settexthier(""); 1637 if ( $text ne "" ) { 1638 if ( $ausrichtung eq "c" ) { 1639 klammer($winkel); 1640 paar( $x, $y ); 1641 klammer( 1642 textfarbe( 1643 beschriftunggroesse( $text, getbeschriftunggroesse() ), 1644 $farbe 1645 ) 1646 ); 1647 beschriftungkopf( $layer, $farbe, $winkel, $ausrichtung, 1648 gettexthier() ); 1649 } 1650 else { 1651 1652 klammer( getlabelabstand() ); 1653 textanhaengen("["); 1654 textanhaengen($ausrichtung); 1655 textanhaengen("]"); 1656 klammer($winkel); 1657 paar( $x, $y ); 1658 klammer( 1659 textfarbe( 1660 beschriftunggroesse( $text, getbeschriftunggroesse() ), 1661 $farbe 1662 ) 1663 ); 1664 beschriftungkopf( $layer, $farbe, $winkel, $ausrichtung, 1665 gettexthier() ); 1666 } 1667 } 1668 1669 settexthier(""); 1670 my $laenge = length($text); 1671 if ( ( istzahl($x) == 1 ) && ( istzahl($y) == 1 ) ) { 1672 minmax( 1673 $x - ($laenge) * 0.5 / getskalierung("x"), 1674 $y - ($laenge) * 0.5 / getskalierung("y"), 1675 $x - ($laenge) * 0.5 / getskalierung("x"), 1676 $y - ($laenge) * 0.5 / getskalierung("y") 1677 ); 1678 minmax( 1679 $x + ($laenge) * 0.5 / getskalierung("x"), 1680 $y + ($laenge) * 0.5 / getskalierung("y"), 1681 $x + ($laenge) * 0.5 / getskalierung("x"), 1682 $y + ($laenge) * 0.5 / getskalierung("y") 1683 ); 1684 } 1685 } 1686 1687 sub beschriftungkopf { 1688 my ( $layer, $farbe, $winkel, $ausrichtung, $anhang ) = @_; 1689 if ( $ausrichtung eq "c" ) { 1690 befehlerzeugen( $layer, "rput", "", "", "", "", "", $anhang ); 1691 } 1692 1693 else { 1694 befehlerzeugen( $layer, "uput", "", "", "", "", "", $anhang ); 1695 } 1696 } 1697 1698 sub einschlussanfang { 1699 my ( $layer, $farbe, $fuellart, $fuellfarbe, $linienart, $linienstaerke, 1700 $parameter ) 1701 = @_; 1702 1703 befehlfuellungerzeugen( 1704 $layer, "pscustom", $farbe, "", 1705 $fuellfarbe, "", "", $parameter, 1706 "", "{\\gsave" 1707 ); 1708 1709 } 1710 1711 sub einschlussende { 1712 my ( $layer, $farbe, $fuellart, $fuellfarbe, $linienart, $linienstaerke, 1713 $parameter ) 1714 = @_; 1715 1716 befehlfuellungerzeugen( 1717 $layer, "fill", $farbe, $fuellart, 1718 $fuellfarbe, "", "", $parameter, 1719 "", "\\grestore}" 1720 ); 1721 } 1722 1723 1; 1724 |
A.12 Das Modul für Grafiken
bildbearbeitung-pm.pm |
---|
1 ################################################################## 2 # Modul für Zeichenroutinen 3 # 4 # Letzte Aenderung: 06.01.2012 5 ################################################################## 6 use POSIX qw /floor ceil/; 7 use Math::Trig; 8 use strict; 9 use warnings; 10 11 ### Funktionen für die Bildbearbeitung 12 13 sub bildhoehe { 14 my ($bilddatei) = @_; 15 $bilddatei =~ s/eps/png/g; 16 my ( $dx, $dy ) = imgsize($bilddatei); 17 return $dy; 18 } 19 20 sub bildbreite { 21 my ($bilddatei) = @_; 22 $bilddatei =~ s/eps/png/g; 23 my ( $dx, $dy ) = imgsize($bilddatei); 24 return $dx; 25 } 26 27 sub bildhoeheberechnet { 28 my ( $bilddatei, $breite ) = @_; 29 return nachkommastellen( 30 bildhoehe($bilddatei) * $breite / bildbreite($bilddatei), 4 ); 31 } 32 33 # Ein Bild einfügen 34 35 my $graphicx = 0; 36 37 sub bild { 38 my ( $layer, $x1, $y1, $z1, $breite, $winkel, $bild ) = @_; 39 40 my $pstricksersatz3d = get3dpstricks(); 41 my $pstricksersatz = getpstricks(); 42 43 my ( $x, $y, $x2, $y2, $x3, $x4, $y3, $y4 ); 44 45 setpstricks(0); 46 set3dpstricks(0); 47 48 if ( $z1 eq "" ) { 49 $x = $x1; 50 $y = $y1; 51 } 52 else { 53 if ( ( istzahl($x1) == 1 ) 54 && ( istzahl($y1) == 1 ) 55 && ( istzahl($z1) == 1 ) ) 56 { 57 $x = x3d( $x1, $y1, $z1 ); 58 $y = y3d( $x1, $y1, $z1 ); 59 } 60 61 } 62 63 if ( ( istzahl($x) == 1 ) && ( istzahl($y) == 1 ) ) { 64 65 if ( $winkel == 0 ) { 66 minmax( 67 $x, $y, 68 $x + $breite, 69 $y + bildhoeheberechnet( $bild, $breite ) 70 ); 71 } 72 else { 73 $x2 = 74 nachkommastellen( $x + cos( degtorad($winkel) ) * $breite, 4 ); 75 $y2 = 76 nachkommastellen( $y + sin( degtorad($winkel) ) * $breite, 4 ); 77 $x3 = nachkommastellen( 78 $x2 - 79 sin( degtorad($winkel) ) * 80 bildhoeheberechnet( $bild, $breite ), 81 4 82 ); 83 $y3 = nachkommastellen( 84 $y2 + 85 cos( degtorad($winkel) ) * 86 bildhoeheberechnet( $bild, $breite ), 87 4 88 ); 89 $x4 = nachkommastellen( 90 $x - 91 sin( degtorad($winkel) ) * 92 bildhoeheberechnet( $bild, $breite ), 93 4 94 ); 95 $y4 = nachkommastellen( 96 $y + 97 cos( degtorad($winkel) ) * 98 bildhoeheberechnet( $bild, $breite ), 99 4 100 ); 101 minmax( $x, $y, $x, $y ); 102 minmax( $x2, $y2, $x2, $y2 ); 103 minmax( $x3, $y3, $x3, $y3 ); 104 minmax( $x4, $y4, $x4, $y4 ); 105 } 106 } 107 108 if ( $graphicx == 0 ) { 109 usepackage( "", "graphicx" ); 110 $graphicx = 1; 111 } 112 schreibeinarray( 113 $layer, 114 sprintf( 115 "\\psrotate(%s,%s){%g}{\\rput[lb](%s,%s){\\includegraphics[width=%gcm]{%s}}}%%", 116 $x, $y, $winkel, $x, $y, $breite, $bild 117 ) 118 ); 119 setpstricks(0); 120 set3dpstricks($pstricksersatz3d); 121 setpstricks($pstricksersatz); 122 123 } 124 125 1; 126 |
A.13 Die Spielfeld-Module
uhr-pm.pm |
---|
1 ################################################################## 2 # Modul für Uhren 3 # 4 # Letzte Aenderung: 05.01.2012 5 ################################################################## 6 use POSIX qw /floor ceil/; 7 use Math::Trig; 8 use strict; 9 use warnings; 10 11 sub uhr { 12 my ( $layer, $x, $y, $radius, $laenge, $farbe, $fuellart, $fuellfarbe, $linienart, $linienstaerke, $parameter ) = @_; 13 14 kreis( $layer, $x, $y, $radius, $farbe, $fuellart, $fuellfarbe, $linienart, $linienstaerke, $parameter ); 15 kreis( $layer, $x, $y, $laenge / 8, $farbe, $fuellart, $fuellfarbe, $linienart, $linienstaerke, $parameter ); 16 17 my $i = 0; 18 19 for ( $i = 0 ; $i < 360 ; $i = $i + 90 ) { 20 kreisskala( $layer, $x, $y, $radius - $laenge, $laenge, $i, $farbe, $linienart, $linienstaerke, $parameter, "-" ); 21 } 22 23 for ( $i = 0 ; $i < 360 ; $i = $i + 30 ) { 24 kreisskala( $layer, $x, $y, $radius - $laenge / 2, $laenge / 2, $i, $farbe, $linienart, $linienstaerke, $parameter, "-" ); 25 } 26 27 for ( $i = 00 ; $i < 360 ; $i = $i + 10 ) { 28 kreisskala( $layer, $x, $y, $radius - $laenge / 4, $laenge / 4, $i, $farbe, $linienart, $linienstaerke, $parameter, "-" ); 29 } 30 31 kreistext( $layer, $x, $y, $radius - $laenge, 90, $farbe, 12, 0, 270 ); 32 kreistext( $layer, $x, $y, $radius - $laenge, 0, $farbe, 3, 0, 180 ); 33 kreistext( $layer, $x, $y, $radius - $laenge, 180, $farbe, 9, 0, 0 ); 34 kreistext( $layer, $x, $y, $radius - $laenge, 270, $farbe, 6, 0, 90 ); 35 } 36 37 sub uhrzeit { 38 my ( $layer, $x, $y, $radius, $stunde, $minute, $sekunde, $farbe, $linienart, $linienstaerke, $parameter ) = @_; 39 40 my $winkelstunde = 0; 41 my $winkelminute = 0; 42 my $winkelsekunde = 0; 43 44 if ( $sekunde ne "" ) { 45 $winkelsekunde = 90 - 360 / 60 * $sekunde; 46 liniepolar( $layer, $x, $y, "", $radius, $winkelsekunde, "", $linienart, $linienstaerke / 2, $farbe, $parameter, "" ); 47 48 } 49 if ( $minute ne "" ) { 50 $winkelminute = 90 - 360 / 60 * $minute; 51 if ( $sekunde ne "" ) { $winkelminute = 90 - ( 360 / 60 * $minute + 10 / 60 * $sekunde ); } 52 liniepolar( $layer, $x, $y, "", $radius, $winkelminute, "", $linienart, $linienstaerke, $farbe, $parameter, "->" ); 53 } 54 55 if ( $stunde ne "" ) { 56 57 if ( $stunde > 12 ) {$stunde = $stunde - 12;} 58 $winkelstunde = 90 - 360 / 12 * $stunde; 59 if ( $minute ne "" ) {$winkelstunde = 90 - ( 360 / 12 * $stunde + 10 / 60 * $minute );} 60 61 liniepolar( $layer, $x, $y, "", $radius * 3 / 4, $winkelstunde, "", $linienart, $linienstaerke, $farbe, $parameter, "->" ); 62 } 63 64 } 65 66 1; 67 |
knoten-pm.pm |
---|
1 ################################################################## 2 # Modul für Uhren 3 # 4 # Letzte Aenderung: 06.01.2012 5 ################################################################## 6 use POSIX qw /floor ceil/; 7 use Math::Trig; 8 use strict; 9 use warnings; 10 11 my $knoten = 0; 12 13 sub getknoten { return $knoten; } 14 15 sub setknoten { 16 my ($wert) = @_; 17 $knoten = $wert; 18 } 19 20 my $knotenzaehler = 0; 21 22 my @knoteninhaltx = (); 23 my @knoteninhalty = (); 24 my $i = 0; 25 for ( $i = 0 ; $i <= 10000 ; $i++ ) { 26 $knoteninhaltx[$i] = 1234.4321; 27 $knoteninhalty[$i] = 1234.4321; 28 } 29 30 sub knotensetzen { 31 my ( $knotenart, $x, $y, $z ) = @_; 32 33 if ( $z eq "" ) { 34 my $text = "(" 35 . nachkommastellen( $x, 2 ) . "," 36 . nachkommastellen( $y, 2 ) . ")"; 37 my $text2 = "\$(" 38 . nachkommastellen( $x, 2 ) . "|" 39 . nachkommastellen( $y, 2 ) . ")\$"; 40 41 $text2 =~ s/\./,/g; 42 my $textknoten = 43 $knotenart 44 . $text . "{A" 45 . $knotenzaehler . "}" 46 . "\\rput" 47 . $text . "{" 48 . $text2 . "}"; 49 my $i = 0; 50 my $j = 0; 51 $knotenzaehler++; 52 53 pstricks( 10, $textknoten ); 54 my $laenge = length($text); 55 minmax( 56 $x - ( 0.5 * $laenge ) / getskalierung("x"), 57 $y - ( 0.5 * $laenge ) / getskalierung("y"), 58 $x - ( 0.5 * $laenge ) / getskalierung("x"), 59 $y - ( 0.5 * $laenge ) / getskalierung("y") 60 ); 61 62 minmax( 63 $x + ( 0.5 * $laenge ) / getskalierung("x"), 64 $y + ( 0.5 * $laenge ) / getskalierung("y"), 65 $x + ( 0.5 * $laenge ) / getskalierung("x"), 66 $y + ( 0.5 * $laenge ) / getskalierung("y") 67 ); 68 } 69 else { 70 my $text = "(" . x3d( $x, $y, $z ) . "," . y3d( $x, $y, $z ) . ")"; 71 my $text2 = "\$(" 72 . nachkommastellen( $x, 2 ) . "|" 73 . nachkommastellen( $y, 2 ) . "|" 74 . nachkommastellen( $z, 2 ) . ")\$"; 75 76 $text2 =~ s/\./,/g; 77 my $textknoten = 78 $knotenart 79 . $text . "{A" 80 . $knotenzaehler . "}" 81 . "\\rput" 82 . $text . "{" 83 . $text2 . "}"; 84 my $i = 0; 85 my $j = 0; 86 $knotenzaehler++; 87 88 pstricks( 10, $textknoten ); 89 90 } 91 92 } 93 94 sub knoten { 95 my ( 96 $layer, $farbe, $x, $y, $z, 97 $name, $bezeichnung, $knotenart, $parameter 98 ) = @_; 99 100 settexthier(""); 101 102 if ( $knotenart eq "rnode" ) { 103 if ( $z eq "" ) { 104 paar( $x, $y ); 105 minmax( $x - 0.5, $y - 0.5, $x + 0.5, $y + 0.5 ); 106 } 107 else { 108 paar( x3d( $x, $y, $z ), y3d( $x, $y, $z ) ); 109 minmax( 110 x3d( $x, $y, $z ) - 0.5, 111 y3d( $x, $y, $z ) - 0.5, 112 x3d( $x, $y, $z ) + 0.5, 113 y3d( $x, $y, $z ) + 0.5 114 ); 115 } 116 klammer( "\\" . $knotenart . "{" . $bezeichnung . "}{" . $name . "}" ); 117 beschriftungkopf( $layer, $farbe, 0, "c", gettexthier() ); 118 } 119 else { 120 if ( $z eq "" ) { 121 paar( $x, $y ); 122 } 123 else { 124 paar( x3d( $x, $y, $z ), y3d( $x, $y, $z ) ); 125 } 126 if ( $knotenart eq "cnodeput" ) { 127 minmax( $x - 1, $y - 1, $x + 1, $y + 1 ); 128 } 129 klammer($bezeichnung); 130 klammer($name); 131 befehlerzeugen( $layer, $knotenart, $farbe, "", "", $parameter, "", 132 gettexthier() ); 133 134 } 135 } 136 137 sub knotenverbindung { 138 my ( 139 $layer, $name1, $name2, $text, 140 $linienart, $linienstaerke, $farbe, $parameter1, 141 $parameter2, $pfeilart 142 ) = @_; 143 144 settexthier(""); 145 146 klammer($name1); 147 klammer($name2); 148 149 befehlerzeugen( $layer, "ncline", $farbe, $linienart, $linienstaerke, 150 $parameter1, $pfeilart, gettexthier() ); 151 settexthier(""); 152 if ( $text ne "" ) { 153 klammer($text); 154 befehlerzeugen( $layer, "naput", $farbe, $linienart, $linienstaerke, 155 $parameter1, "", gettexthier() ); 156 settexthier(""); 157 } 158 159 } 160 161 sub knotenkreis { 162 my ( 163 $layer, $name1, $text, $winkel, 164 $radius, $farbe, $fuellart, $fuellfarbe, 165 $linienart, $linienstaerke, $pfeilart, $parameter 166 ) = @_; 167 168 minmax( 169 getminmax( "x", "min" ) - 2 * $radius, 170 getminmax( "y", "min" ) - 2 * $radius, 171 getminmax( "x", "max" ) + 2 * $radius, 172 getminmax( "y", "max" ) + 2 * $radius 173 ); 174 175 settexthier(""); 176 klammer($name1); 177 klammer($radius); 178 179 my $parameterweiter = $parameter . ", angle=" . $winkel; 180 befehlerzeugen( $layer, "nccircle", $farbe, $linienart, $linienstaerke, 181 $parameterweiter, $pfeilart, gettexthier() ); 182 settexthier(""); 183 if ( $text ne "" ) { 184 klammer($text); 185 186 befehlerzeugen( $layer, "nbput", $farbe, $linienart, $linienstaerke, "", 187 "", gettexthier() ); 188 settexthier(""); 189 } 190 191 #\nccircle[angle=-180]{->}{E}{0.5}\nbput{$0,2$} 192 193 } 194 195 1; 196 |
regression-pm.pm |
---|
1 ################################################################## 2 # Modul fuer die Regressionsanalyse 3 # Letzte Aenderung: 06.01.2012 4 ################################################################## 5 use POSIX qw /floor ceil/; 6 use Math::Trig; 7 use strict; 8 use warnings; 9 10 my $anzahlpunkte = 0; 11 my @regressionx = (); 12 my @regressiony = (); 13 my @regressionz = (); 14 my ( $xmax, $ymax, $zmax ); 15 16 $xmax = $ymax = $zmax = 0; 17 18 sub oeffneregression { 19 my $i = 0; 20 for ( $i = 0 ; $i <= 150 ; $i++ ) { 21 $regressionx[$i] = 0; 22 $regressiony[$i] = 0; 23 $regressionz[$i] = 0; 24 } 25 } 26 27 sub schreiberegression { 28 my ( $x, $y, $z, $n ) = @_; 29 $regressionx[$n] = $x; 30 $regressiony[$n] = $y; 31 $regressionz[$n] = $z; 32 $xmax = max( $xmax, $x ); 33 $ymax = max( $ymax, $y ); 34 if ( istzahl($z) == 1 ) { 35 $zmax = max( $zmax, $z ); 36 } 37 } 38 39 sub leseregression { 40 my ( $stelle, $n ) = @_; 41 if ( $stelle eq "x" ) { return $regressionx[$n]; } 42 elsif ( $stelle eq "y" ) { return $regressiony[$n]; } 43 elsif ( $stelle eq "z" ) { return $regressionz[$n]; } 44 else { return "ERROR"; } 45 } 46 47 sub schliesseregression { 48 my ($wert) = @_; 49 $anzahlpunkte = $wert; 50 } 51 52 sub regression { 53 my ( $layer, $grad, $linienart, $linienstaerke, $farbe, $parameter ) = @_; 54 55 my ( $xsum, $ysum, $i, $xavg, $yavg, $dx, $dy, $a, $b, $factor, $offset ); 56 57 $xsum = $ysum = $xavg = $yavg = $a = $b = 0; 58 59 for ( $i = 1 ; $i <= $anzahlpunkte ; $i++ ) { 60 $xsum = $xsum + $regressionx[$i]; 61 $ysum = $ysum + $regressiony[$i]; 62 } 63 64 $xavg = $xsum / $anzahlpunkte; 65 $yavg = $ysum / $anzahlpunkte; 66 67 for ( $i = 1 ; $i <= $anzahlpunkte ; $i++ ) { 68 $dx = $regressionx[$i] - $xavg; 69 $dy = $regressiony[$i] - $yavg; 70 $a = $a + ( $dx * $dy ); 71 $b = $b + ( $dx * $dx ); 72 } 73 74 $factor = $a / $b; 75 76 $offset = $yavg - $factor * $xavg; 77 78 my $func = ""; 79 80 if ( $offset < 0 ) { 81 $func = $factor . "*x-" . abs($offset); 82 } 83 else { 84 $func = $factor . "*x+" . $offset; 85 } 86 87 graph( $layer, $func, 0, 0, "", $xmax, $ymax, "", $linienart, 88 $linienstaerke, $farbe, $parameter . ",algebraic" ); 89 90 } 91 92 1; 93 |