10000) ){ $bereich=1000; } } else { $bereich=1000; } # Integral berechnen - man beachte, wenn # x0 und y0 auf 0 gesetzt werden, kann auch # ein Integral fuer relative Kommandos q bestimmt werden. function integral ($f,$x0,$y0,$x1,$y1,$x2,$y2) { if ($f>1) { $f=1; } if ($f<=0) { return 0; } else { $sx=2*($x0-2*$x1+$x2); $sy=2*($y0-2*$y1+$y2); $tx=2*(-$x0+$x1); $ty=2*(-$y0+$y1); $a=$sx*$sx+$sy*$sy; $b=2*($sx*$tx+$sy*$ty); $c=$tx*$tx+$ty*$ty; if ($a ==0) { if ($b==0) { echo 'doof'; return $f*sqrt($c); } else { echo 'doof'; $wu0=2/3/$b*sqrt($c); $dummy=$b*$f+$c; $dummy=$dummy*$dummy*$dummy; $wuf=2/3/$b*sqrt($dummy); return $wuf - $wu0; } } else { $u=0; $dummy=sqrt($a*$u*$u+$b*$u+$c); $wu0=0.25*(2*$a*$u+$b)/$a*$dummy + (4*$a*$c - $b*$b)/8/$a/sqrt($a)*log(2*sqrt($a)*$dummy+2*$a*$u+$b); $u=$f; $dummy=sqrt($a*$u*$u+$b*$u+$c); $wuf=0.25*(2*$a*$u+$b)/$a*$dummy + (4*$a*$c - $b*$b)/8/$a/sqrt($a)*log(2*sqrt($a)*$dummy+2*$a*$u+$b); return ($wuf - $wu0); } } } # quadratischen Pfad zufaellig waehlen $x0=mt_rand(-$bereich,$bereich); $y0=mt_rand(-$bereich,$bereich); $x1=mt_rand(-$bereich,$bereich); $y1=mt_rand(-$bereich,$bereich); $x2=mt_rand(-$bereich,$bereich); $y2=mt_rand(-$bereich,$bereich); # grosse viewBox automatisch bestimmen $maxx=max($x0,$x1,$x2); $minx=min($x0,$x1,$x2); $maxy=max($y0,$y1,$y2); $miny=min($y0,$y1,$y2); $vbx=$minx-15; $vby=$miny-15; $vbw=$maxx-$minx+30; $vbh=$maxy-$miny+30; # Integral ueber gesamte Weglaenge: $int= integral (1,$x0,$y0,$x1,$y1,$x2,$y2); # Bis wohin Teilintegral? $u=mt_rand(100,900)/1000; # Teilintegral ausrechnen $intf= integral ($u,$x0,$y0,$x1,$y1,$x2,$y2); # Anteil an der gesamten Weglaenge bestimmen $frac=$intf/$int; # einige Hilfsgroessen $intr=$int-$intf; $ints=$intf-13; $intc=$intf-0.00005; # So sieht der Pfad aus $pfad="M$x0,$y0 Q$x1,$y1,$x2,$y2"; # cx(u) und cy(u) fuer den Punkt u berechnen $u1=1-$u; $u2=$u1*$u1; $u3=$u*$u; $cx=$u2*$x0+2*$u*$u1*$x1+$u3*$x2; $cy=$u2*$y0+2*$u*$u1*$y1+$u3*$y2; # kleine viewBox bestimmen $svx=$cx-14; $svy=$cy-14; $vb="$svx $svy 28 28"; # statische viewBox bestimmen $stvx=$cx-100; $stvy=$cy-100; $stvb="$stvx $stvy 200 200"; # und nun geht es los... # header senden: $content="Content-type: image/svg+xml"; header($content); echo ''; ?> " xmlns="http://www.w3.org/2000/svg" version="1.1" baseProfile="tiny" xmlns:xlink="http://www.w3.org/1999/xlink" xml:lang="de"> Kurvenlänge quadratische Kurve Testen, wie genau Darstellungsprogramme Kurven, die Kurvenlänge und Verwandte berechnen. Der GET-Parameter 'bereich' bestimmt den Bereich, in dem die Kurve zufällig gewählt wird. Ein korrektes Ergebnis besteht aus einer dunkelblauen Kurve, die teilweise von einer magenta Kurve verdeckt wird. Wo die magenta Kurve endet, ist ein gelber Kreis. Über diesem befinden sich sieben schwarze Kreise (nach einer kurzen Animation). Kreise und Pfade haben an der Stelle gleiche Abstände voneinander, die Kreise sind konzentrisch. Drübergelegt ist ein dunkelblau-gelber Maßstab, bei welchem das Muster in der Mitte des Maßstabes genau passen muß (Ausnahme starke Krümmung der Kurve an dieser Stelle)- gelb auf gelb, dunkelblau auf dunkelblau in der Mitte, außen einmal dunkelblau auf magenta und ein Abschluß in gelb. Nach 5s wird der gelbe Kreis mit den konzentrischen Ringen im Bild vergrößert und zentriert. "/> " to="" fill="freeze" calcMode="spline" keySplines="0 0 0 1" /> Die zu untersuchende Kurve. Kurvenlänge: Gemalter Kurventeil: Anteil: Kontrollpunkt 1 Kontrollpunkt 2 Gemalter Kurventeil Kurvenanfangspunkt Kurvenendpunkt Endpunkt des gemalten Kurventeils Testpunkt 'repeatCount' Testpunkt 'repeatDur' Testpunkt 'end' Testpunkt 'max' Testpunkt 'min' Testpunkt 'discrete, keyPoints' Testpunkt 'linear, keyPoints' " d=""> Testpunkt stroke-dasharray " stroke-dashoffset="-" d="" > stroke-dasharray, stroke-dashoffset " d=""> Testmaßstab