Viewing file: fieldscatterex1.html (13.75 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php include ("../jpgraph.php"); include ("../jpgraph_scatter.php");
$polex = 6; $poley = 40;
function FldCallback($x,$y,$a) { GLOBAL $polex, $poley; $maxr = 3000;
// Size and arrow size is constant $size=""; $arrowsize="";
// Since we have different scales we need the data points // to be of the same magnitude to give it a distance // interpretation. $x *= 10;
// Colors gets colder the further out we go from the center $r = ($x-$polex*10)*($x-$polex*10)+($y-$poley)*($y-$poley); $f = $r/$maxr; if( $f > 1 ) $f=1; $red = floor((1-$f)*255); $blue = floor($f*255); $color = array($red,0,$blue); //echo "x=$x, y=$y, blue=$blue, red=$red<br>"; return array($color,$size,$arrowsize); }
// Create data for a simulated pseudo-magnetic radient field $datax = array(); $datay = array(); $angle = array(); for($x=1; $x < 10; ++$x ) { for($y=10; $y<100; $y += 10) { $a = -1; if( $x==$polex && $y==$poley ) continue; if( $x==$polex ) { if( $y > $poley ) $a=90; else $a = 270; } if( $y==$poley ) { if( $x > $polex ) $a=0; else $a=180; } if( $a == -1 ) { $d1 = $y-$poley; $d2 = ($polex-$x)*20; if( $y < $poley ) $d2 *= -1; $h = sqrt($d1*$d1+$d2*$d2); $t = -$d2/$h; $ac = acos($t); if( $y < $poley ) $ac += M_PI; $a = $ac * 180/M_PI; } $datax[] = $x; $datay[] = $y; $angle[] = $a; } }
// Setup the graph $graph = new Graph(300,200); $graph->SetScale("intlin",0,100,0,10); $graph->SetMarginColor('lightblue');
// ..and titles $graph->title->Set("Field plot");
// Setup the field plot $fp = new FieldPlot($datay,$datax,$angle);
// Setup formatting callback $fp->SetCallback('FldCallback');
// First size argument is length (in pixels of arrow) // Second size argument is roughly size of arrow. Arrow size is specified as // an integer in the range [0,9] $fp->arrow->SetSize(20,2); $fp->arrow->SetColor('navy');
$graph->Add($fp);
// .. and output $graph->Stroke();
?>
|