Utilizzo di cookies
Script GD libray con PHP Modelli Creare immagine Colore e trasparenza Disegnare Pennelli Misurare Filtri Testo Copy Salvare Miscellanea
GD library con PHP
Atomo con orbite
Atomo con orbite disegnate usando ellissi inclinate


e-book
cartaceo
Numero atomico:
Cambiare i valori e premere
atomo con orbite
Utilizzando ellissi ruotate rispetto al piano cartesiano è possibile disegnare atomi con orbite.
Nello script, una volta creata l'immagine e dichiarato il numero atomico, i valori delle variabili necessarie si adeguano di conseguenza.
In particolare il valore theta, dell'inclinazione orbitale,  cambia in funzione delle orbite da disegnare.


<?php 
$NumeroAtomico = isset($_POST['NumeroAtomico']) ? $_POST['NumeroAtomico'] : 4;


function OrbiteConElettroni($Immagine,$AsseMAX,$AsseMIN,$Cx,$Cy,$theta,$Colore,$Qe){
$theta = deg2rad($theta); // converte gradi in radianti
for($Z = 0; $Z < M_PI * 2; $Z += 0.01){ // orbita di inclinazione theta
$x = $Cx - $AsseMAX * cos($Z)* cos($theta) - $AsseMIN * sin($Z)* sin($theta);// x cartesiano
$y = $Cy + $AsseMAX * cos($Z)* sin($theta) - $AsseMIN * sin($Z)* cos($theta);// y cartesiano
imagesetpixel ($Immagine , $x , $y , $Colore ); //punti ellisse, orbita elettroni
}


if($Qe & 1)// disegna elettroni su orbite posizione diversa se $Qe è pari o dispari
{imagefilledellipse($Immagine,$Cx-$AsseMAX*cos($theta),$Cy+$AsseMAX*sin($theta),15,15,$Colore>>2);}
else
{imagefilledellipse($Immagine,$Cx+$AsseMAX*cos($theta),$Cy-$AsseMAX*sin($theta),15,15,$Colore>>2);}
}


$Larghezza = 300; $Altezza = $Larghezza; // dimensioni immagine
$Immagine = imagecreatetruecolor($Altezza,$Larghezza); // crea immagine
$CanaleALPHA = imagecolorallocatealpha($Immagine,204,204,204,127 );//colore per la trasparenza
imagefill($Immagine, 0, 0, $CanaleALPHA);//rende trasparente l'immagine
imagealphablending($Immagine, false);
imagesavealpha($Immagine, true); // immagine salvata con trasparenza
$Cx = $Larghezza *.5; $Cy = $Cx; // centro immagine
$Rosso = imagecolorallocate($Immagine,255,0,0);


// numero atomico, inclinazione orbite, quantità orbite disegnate
$Inclinazione = 180/ $NumeroAtomico;$Qe = 0; 
$AsseMAX = $Larghezza * .45; $AsseMIN = $AsseMAX *.3; // assi dell'orbita
for($theta = $Inclinazione;$theta <=180; $theta+=$Inclinazione) // disegna ellissi
{OrbiteConElettroni($Immagine,$AsseMAX,$AsseMIN,$Cx,$Cy,$theta,$Rosso,$Qe++);}


// NUCLEO, loop in radianti per NumeroAtomico punti equidistanti sulla circonferenza
for($i = 0; $i < 2* M_PI; $i+= 2*M_PI /$NumeroAtomico) {
$x = $Cx + 16 * cos($i);  $y = $Cy + 16 * sin($i);   // x y cartesiano
imagefilledellipse($Immagine,$x,$y,29,29, $Rosso);// interno
imageellipse($Immagine,$x,$y,30,30, $Rosso>>17);// circonferenza
}


imagepng($Immagine,"NomeFile.png");// salva
imagedestroy($Immagine);// libera memoria
?