$xb) { $i1=$i1-$xb+$xv; } for ($j = $yv; $j <=$yb; $j++) { $j1=$j+1; $j2=$j-1; if ($j2 < $yv) { $j2=$j2+$yb-$yv; } if ($j1 > $yb) { $j1=$j1-$yb+$yv; } # Potential glätten if ($i%2==0) { $dummy=$selbst*$a[$i][$j]+$a[$i][$j1]+$a[$i][$j2]+$a[$i2][$j2]+$a[$i2][$j]+$a[$i1][$j2]+$a[$i1][$j]; } else { $dummy=$selbst*$a[$i][$j]+$a[$i][$j1]+$a[$i][$j2]+$a[$i2][$j]+$a[$i2][$j1]+$a[$i1][$j]+$a[$i1][$j1]; } $b[$i][$j]=$k*$dummy; } } $a=$b; } $amax=-10000; $amin=10000; $k=0; for ($i = $xv; $i <=$xb; $i++) { for ($j = $yv; $j <=$yb; $j++) { $k=$k+1; $amax=max($amax,$a[$i][$j]); $amin=min($amin,$a[$i][$j]); } } $panz=$k; $danz=$k; $k=0; $ateil=1/($amax-$amin); for ($i = $xv; $i <=$xb; $i++) { $i1=$i+1; $i2=$i-1; if ($i2 < $xv) { $i2=$i2+$xb-$xv; } if ($i1 > $xb) { $i1=$i1-$xb+$xv; } for ($j = $yv; $j <=$yb; $j++) { $j1=$j+1; $j2=$j-1; if ($j2 < $yv) { $j2=$j2+$yb-$yv; } if ($j1 > $yb) { $j1=$j1-$yb+$yv; } # Gradient bestimmen if ($i%2==0) { $d1=$a[$i][$j2]-$a[$i][$j]; $d2=$a[$i][$j1]-$a[$i][$j]; $d3=$a[$i2][$j2]-$a[$i][$j]; $d4=$a[$i2][$j]-$a[$i][$j]; $d5=$a[$i1][$j2]-$a[$i][$j]; $d6=$a[$i1][$j]-$a[$i][$j]; } else { $d1=$a[$i][$j2]-$a[$i][$j]; $d2=$a[$i][$j1]-$a[$i][$j]; $d3=$a[$i2][$j]-$a[$i][$j]; $d4=$a[$i2][$j1]-$a[$i][$j]; $d5=$a[$i1][$j]-$a[$i][$j]; $d6=$a[$i1][$j1]-$a[$i][$j]; } $dadi=$ky*(-$d3-$d4+$d5+$d6); $dadj=-$d1+$d2+0.5*(-$d3-$d5+$d4+$d6); if ($dadi==0 AND $dadj==0) { $win='no'; } else { $win=rad2deg(atan2($dadj,$dadi)); } if ($i%2==0) { $y=$j; } else { $y=$j+0.5; } $x=round($i*$ky,2); $vert=round(($a[$i][$j]-$amin)*$ateil,5); $k=$k+1; # für die Ausgabe $pot[$k][0]=$x*$kr*2; $pot[$k][1]=$y*$kr*2; $pot[$k][2]=$vert; $pot[$k][3]=$win+$dw; } } $pot[$k+1][0]=$pot[$k][0]+10000; # Farben laden $farben = file($fname); $fzeilen = count($farben); for ($j = 0; $j <$fzeilen; $j++) { $foo = preg_replace("/\s{2,}/", " ", $farben[$j]); $c = explode(" ", trim($foo)); if ($ftyp <0 ) { $jj=$fzeilen-$j-1; } else { $jj=$j; } $fr=$c[0]; $fg=$c[1]; $fb=$c[2]; #$fc[$j]="rgb($fr,$fg,$fb)"; $fc[$jj]=hex($fr,$fg,$fb); } unset($farben); # Größe der viewBox bestimmen $vbx=round(($xv-2)*$kr*$ky*2); $vby=round(($yv-2)*$kr*2); $vbw=round(($xb-$xv+4)*$kr*$ky*2); $vbh=round(($yb-$yv+4)*$kr*2); $viewBox="$vbx $vby $vbw $vbh"; # Gradientdarstellung $dipd=''; if ($qtyp !=-1) { # Pfeil mit Drehpunkt 0,0 am Ende if ($qtyp == 0) { $dipd=' '; # Pfeil mit Drehpunkt 0,0 in der Mitte } elseif ($qtyp == 1) { $dipd=' '; # spitzes Dreieck, Drehpunkt 0,0 am dicken Ende } elseif ($qtyp == 2) { $dipd=' '; # spitze Kurve, Drehpunkt 0,0 am dicken Ende } elseif ($qtyp == 3) { $dipd=' '; # Balken } elseif ($qtyp == 4) { $dipd=''; # Drei Kreise } else { $dipd=' '; } # Kreis für Gradient 0 $dc=10*$ds; $dipd.=" "; } # Hexagon $hg=1.05; $hf=sqrt(3.0/2.0); $lx=$kr/2*$hf*$hg; $ly=$kr*$hf*$hg; $lz=$kr*$hg; $hex=" "; if ($gauss != 0) { $raus=' '; } else { $raus=''; } # Potential raushauen $raus.=' '; $x=$pot[1][0]; $raus.=" "; for ($j = 1; $j <=$panz; $j++) { $w=round($pot[$j][2]*($fzeilen-1)); $y=$pot[$j][1]; $raus.=" = $fzeilen) { $raus.="fill='$fmax'"; } else { $raus.="fill='$fc[$w]'"; } if ($title==1) { $t=$pot[$j][2]; $raus.=">$t "; } else { $raus.="/> "; } if ($pot[$j+1][0] != $pot[$j][0]) { $raus.=' '; if ($j != $panz) { $x=$pot[$j+1][0]; $raus.=" "; } } } $raus.=' '; # spiegeln ... if ($as == 1) { $raus.=' '; } # Gaussfilter zu if ($gauss != 0) { $raus.=' '; } if ($qtyp !=-1) { # Gradient rüber $raus.=' '; $x=$pot[1][0]; $raus.=" "; for ($j = 1; $j <=$danz; $j++) { $x=$pot[$j][0]; $y=$pot[$j][1]; if ($pot[$j][3] !='no') { $win=round($pot[$j][3]); if ($title==1) { $raus.="$win "; } else { $raus.=" "; } } else { $raus.="Gradient 0 "; } if ($pot[$j+1][0] != $pot[$j][0]) { $raus.=' '; if ($j != $panz) { $x=$pot[$j+1][0]; $raus.=" "; } } } $raus.=' '; # spiegeln ... if ($as == 1) { $raus.=' '; } } # Bild in Speicher schreiben ob_start(); echo ' '; ?> Farbfeld: Potential und Gradient Zufälliges Farbfeld mit Gradienten Parameter: title: Titelinformation pro Kachel anzeigen? (0: nein, sonst ja) qtyp: Typ Gradientendarstellung (0-5 oder -1: ohne) kr: Kachelradius (nicht so relevant, weil sich die Größe des Bildes ohnehin an den verfügbaren Darstellungsbereich anpaßt), typisch 10 ds: Skalierungsfaktor Gradientensymbol, typisch kr/30 dw: Zusätzlicher Drehwinkel in Grad für das Gradientensymbol gauss: Standardabweichung Gaußfilter, typisch kr, bei 0 abgeschaltet ftyp: Typ der Farbskala (1 bis 715 oder -15 bis -1 für umgedrehte Skala) fmin, fmax: Farbwert für Potential kleiner als das Minimum, beziehungsweise Maximum (bei diesem Zufallsfeld sollte dies nicht auftreten, weil es auf den zulässigen Bereich skaliert ist) iter: Anzahl der Iterationen der Zufallslandschaft. typisch 20 (nicht mehr als 200) selbst: Gewichtung gegenüber den sechs Nachbarn, die jeweils mit 1 berücksichtigt werden, Voreinstellung ist 1 xv,xb,yv,yb: Bereich von bis für x, beziehungsweise y, ganze Zahlen, aus dem Kachelradius ergibt sich der Abstand der Punkte. Die Werte sind nach oben und unten vom Betrag her auf maximal 200 begrenzt