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 | |
---|