[42] | 1 | <?php // content="text/plain; charset=utf-8"
|
---|
| 2 | require_once ('jpgraph/jpgraph.php');
|
---|
| 3 | require_once ('jpgraph/jpgraph_scatter.php');
|
---|
| 4 |
|
---|
| 5 | $polex = 6;
|
---|
| 6 | $poley = 40;
|
---|
| 7 |
|
---|
| 8 | function FldCallback($x,$y,$a) {
|
---|
| 9 | GLOBAL $polex, $poley;
|
---|
| 10 | $maxr = 3000;
|
---|
| 11 |
|
---|
| 12 | // Size and arrow size is constant
|
---|
| 13 | $size="";
|
---|
| 14 | $arrowsize="";
|
---|
| 15 |
|
---|
| 16 | // Since we have different scales we need the data points
|
---|
| 17 | // to be of the same magnitude to give it a distance
|
---|
| 18 | // interpretation.
|
---|
| 19 | $x *= 10;
|
---|
| 20 |
|
---|
| 21 | // Colors gets colder the further out we go from the center
|
---|
| 22 | $r = ($x-$polex*10)*($x-$polex*10)+($y-$poley)*($y-$poley);
|
---|
| 23 | $f = $r/$maxr;
|
---|
| 24 | if( $f > 1 ) $f=1;
|
---|
| 25 | $red = floor((1-$f)*255);
|
---|
| 26 | $blue = floor($f*255);
|
---|
| 27 | $color = array($red,0,$blue);
|
---|
| 28 | //echo "x=$x, y=$y, blue=$blue, red=$red<br>";
|
---|
| 29 | return array($color,$size,$arrowsize);
|
---|
| 30 | }
|
---|
| 31 |
|
---|
| 32 | // Create data for a simulated pseudo-magnetic radient field
|
---|
| 33 | $datax = array();
|
---|
| 34 | $datay = array();
|
---|
| 35 | $angle = array();
|
---|
| 36 | for($x=1; $x < 10; ++$x ) {
|
---|
| 37 | for($y=10; $y<100; $y += 10) {
|
---|
| 38 | $a = -1;
|
---|
| 39 | if( $x==$polex && $y==$poley ) continue;
|
---|
| 40 | if( $x==$polex ) {
|
---|
| 41 | if( $y > $poley ) $a=90;
|
---|
| 42 | else $a = 270;
|
---|
| 43 | }
|
---|
| 44 | if( $y==$poley ) {
|
---|
| 45 | if( $x > $polex ) $a=0;
|
---|
| 46 | else $a=180;
|
---|
| 47 | }
|
---|
| 48 | if( $a == -1 ) {
|
---|
| 49 | $d1 = $y-$poley;
|
---|
| 50 | $d2 = ($polex-$x)*20;
|
---|
| 51 | if( $y < $poley ) $d2 *= -1;
|
---|
| 52 | $h = sqrt($d1*$d1+$d2*$d2);
|
---|
| 53 | $t = -$d2/$h;
|
---|
| 54 | $ac = acos($t);
|
---|
| 55 | if( $y < $poley ) $ac += M_PI;
|
---|
| 56 | $a = $ac * 180/M_PI;
|
---|
| 57 | }
|
---|
| 58 | $datax[] = $x;
|
---|
| 59 | $datay[] = $y;
|
---|
| 60 | $angle[] = $a;
|
---|
| 61 | }
|
---|
| 62 | }
|
---|
| 63 |
|
---|
| 64 | // Setup the graph
|
---|
| 65 | $graph = new Graph(300,200);
|
---|
| 66 | $graph->SetScale("intlin",0,100,0,10);
|
---|
| 67 | $graph->SetMarginColor('lightblue');
|
---|
| 68 |
|
---|
| 69 |
|
---|
| 70 | // ..and titles
|
---|
| 71 | $graph->title->Set("Field plot");
|
---|
| 72 |
|
---|
| 73 | // Setup the field plot
|
---|
| 74 | $fp = new FieldPlot($datay,$datax,$angle);
|
---|
| 75 |
|
---|
| 76 | // Setup formatting callback
|
---|
| 77 | $fp->SetCallback('FldCallback');
|
---|
| 78 |
|
---|
| 79 | // First size argument is length (in pixels of arrow)
|
---|
| 80 | // Second size argument is roughly size of arrow. Arrow size is specified as
|
---|
| 81 | // an integer in the range [0,9]
|
---|
| 82 | $fp->arrow->SetSize(20,2);
|
---|
| 83 | $fp->arrow->SetColor('navy');
|
---|
| 84 |
|
---|
| 85 | $graph->Add($fp);
|
---|
| 86 |
|
---|
| 87 | // .. and output
|
---|
| 88 | $graph->Stroke();
|
---|
| 89 |
|
---|
| 90 | ?>
|
---|
| 91 |
|
---|
| 92 |
|
---|