W wolnych chwilach bawię się nadal skryptem do widm. Nieco go zmodyfikowałem. Zwiększyłem rozmiar rysunku oraz popiołem bazę danych NIST. Wygląda to nieźle :) Pozostaje do zrobienia formularz do generowania zapytań do baz danych i myślę, że będzie gotowe. BTW, dawno nie zajmowałem się PHP i wykorzystanie biblioteki PDO znakomicie ułatwia podpięcie bazy do skryptu. Wygenerowałem też taki oto rysunek.
Widma gazów szlachetnych oraz dwóch metali. |
function adjust($color,$factor,$max){ $intensity_max=$max; $gamma=0.6; if ($color==0) return 0; else return round($intensity_max*pow($color*$factor,$gamma)); } function lambda2RGB($lambda,$int_max){ if (($lambda>=380)&&($lambda<=439)) {$R=-($lambda-440)/60;$G=0;$B=1.0;} else if (($lambda>=440)&&($lambda<=489)) {$R=0;$G=($lambda-440)/50;$B=1.0;} else if (($lambda>=490)&&($lambda<=509)) {$R=0;$G=1;$B=-($lambda-510)/20;} else if (($lambda>=510)&&($lambda<=579)) {$R=($lambda-510)/70;$G=1;$B=0;} else if (($lambda>=580)&&($lambda<=644)) {$R=1;$G=-($lambda-645)/65;$B=0;} else if (($lambda>=645)&&($lambda<=780)) {$R=1;$G=0;$B=0;} else {$R=0;$G=0;$B=0;} if (($lambda>=380)&&($lambda<=419)) {$intensity=0.3+0.7*($lambda-380)/40;} if (($lambda>=420)&&($lambda<=700)) {$intensity=1;} if (($lambda>=701)&&($lambda<=780)) {$intensity=0.3+0.7*(780-$lambda)/80;} $R=adjust($R,$intensity,$int_max); $G=adjust($G,$intensity,$int_max); $B=adjust($B,$intensity,$int_max); return array ($R,$G,$B); } header("Content-type: image/png"); $width=1000; $height=80; $img = imagecreatetruecolor($width, $height); try { $pdo = new PDO('mysql:host=localhost;dbname=spectra', 'root', ''); $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $query = $pdo -> query('SELECT Truncate((linia/10),0) as linia,intensity from nist where (linia<=7800) and (linia>=3800) and (symbol="Na") and (ion=1) order by linia;'); foreach($query as $row){$lines[]=$row['linia'];$lintensity[]=$row['intensity'];} $query -> closeCursor(); } catch(PDOException $e) { echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage(); } $max=max($lintensity); $min=min($lintensity); $k=0; foreach($lines as $i){ $relative_intensity=230/($max-$min)*$lintensity[$k]+(25-230*$min/($max-$min)); $x=(-$width/400)*$i+(780/400)*$width; list($a,$b,$c)=lambda2RGB($i,$relative_intensity); $color = imagecolorallocate($img, $a, $b, $c); imageline($img,$x,0,$x,$height,$color); $k++; } imagepng($img); imagedestroy($img) ?>
Brak komentarzy:
Prześlij komentarz