Lo script calcola:
per un poligono su piano cartesiano
Lunghezza dei lati
Punti medi di questi
Perimetro
Area con la formula di Gauss.
La formula dell'area di Gauss è un algoritmo matematico utilizzato per determinare l'area di un poligono i cui vertici siano descritti in coordinate cartesiane.
Il risultato si ottiene moltiplicando in croce le coordinate corrispondenti seguendo uno schema simile a quello dei lacci della scarpa.La formula dell'area area è valida per qualsiasi figurta poiligonale.Si può verificare dividendo il poligono in triangoli.
Per un cerchio calcola: Perimetro e Area
<?php
// vertici default del poligono
$AX = isset($_POST['AX']) ? $_POST['AX'] : 100; $AY = isset($_POST['AY']) ? $_POST['AY'] : 200;
$BX = isset($_POST['BX']) ? $_POST['BX'] : 400; $BY = isset($_POST['BY']) ? $_POST['BY'] : 200;
$CX = isset($_POST['CX']) ? $_POST['CX'] : 200; $CY = isset($_POST['CY']) ? $_POST['CY'] : 300;
$DX = isset($_POST['DX']) ? $_POST['DX'] : 250; $DY = isset($_POST['DY']) ? $_POST['DY'] : 300;
$EX = isset($_POST['EX']) ? $_POST['EX'] : 50; $EY = isset($_POST['EY']) ? $_POST['EY'] : 500;
$Raggio = isset($_POST['Raggio']) ? $_POST['Raggio'] : 100; //echo"<br>Raggio = $Raggio";
$Immagine =
imagecreatetruecolor(700,600);
$Colore = array();
$Colore[0] =
imagecolorallocate($Immagine,255,255,255);
$Colore[1] =
imagecolorallocate($Immagine,255,0,0);
$Colore[2] =
imagecolorallocate($Immagine,0,255,0);
$Colore[3] =
imagecolorallocate($Immagine,255,255,0);
$Colore[4] =
imagecolorallocate($Immagine,0,255,255);
$Colore[5] =
imagecolorallocate($Immagine,255,0,255);
$Poligono = array($AX, $AY, $BX, $BY, $CX, $CY, $DX, $DY, $EX, $EY ); // vertici poligono
imagepolygon($Immagine, $Poligono, count($Poligono)/2, $Colore[0]); // disegna poligono
$C=0; // segmenti colorati sul poligono
for($i= 0; $i < count($Poligono)-2 ; $i+=2){
imageline ($Immagine , $Poligono[$i] , $Poligono[$i+1] , $Poligono[$i+2] , $Poligono[$i+3] , $Colore[$C] );
imagefilledellipse ($Immagine , $Poligono[$i], $Poligono[$i+1], 10 , 10 , $Colore[$C] ); // 5 vertici
$C++;}
imageline ($Immagine , $Poligono[$i] , $Poligono[$i+1] , $Poligono[0] , $Poligono[1] , $Colore[$C] ); // chiude il poligono
imagefilledellipse ($Immagine , $Poligono[$i], $Poligono[$i+1], 10 , 10 , $Colore[$C] ); // vertice 5
function DisegnaPuntiMediConEtichette($Immagine,$X,$Y,$EichSegm,$LunghSegm,$py,$Colore)
{
$Blu =
imagecolorallocate($Immagine,0,0,255);// blu
imagefilledellipse ($Immagine , $X , $Y ,7 , 7 , $Blu );
imagestring ($Immagine , 5 , 10 , $py , "LunghSegm$EichSegm = $LunghSegm : punto medio X=$X , Y=$Y" , $Colore );
}
// punti medi dei segmenti del poligono
$LunghSegmA = sqrt(bcpow($AX-$BX,2) + bcpow($AY-$BY,2));
$PuntoMedioX = ($AX+$BX)/2; $PuntoMedioY = ($AY+$BY)/2;
$X= $PuntoMedioX; $Y = $PuntoMedioY;
$EichSegm = "A"; $LunghSegm = $LunghSegmA;
DisegnaPuntiMediConEtichette($Immagine,$X,$Y,$EichSegm,$LunghSegm,5,$Colore[0]);
$LunghSegmB = sqrt(bcpow($BX-$CX,2) + bcpow($BY-$CY,2));
$PuntoMedioX = ($BX+$CX)/2; $PuntoMedioY = ($BY+$CY)/2;
$EichSegm = "B"; $LunghSegm = $LunghSegmB;
DisegnaPuntiMediConEtichette($Immagine,$PuntoMedioX,$PuntoMedioY,$EichSegm,$LunghSegm,20,$Colore[1]);
$LunghSegmC = sqrt(bcpow($CX-$DX,2) + bcpow($CY-$DY,2));
$PuntoMedioX = ($CX+$DX)/2; $PuntoMedioY = ($CY+$DY)/2;
$EichSegm = "C"; $LunghSegm = $LunghSegmC;
DisegnaPuntiMediConEtichette($Immagine,$PuntoMedioX,$PuntoMedioY,$EichSegm,$LunghSegm,35,$Colore[2]);
$LunghSegmD = sqrt(bcpow($DX-$EX,2) + bcpow($DY-$EY,2));
$PuntoMedioX = ($DX+$EX)/2; $PuntoMedioY = ($DY+$EY)/2;
$EichSegm = "D"; $LunghSegm = $LunghSegmD;
DisegnaPuntiMediConEtichette($Immagine,$PuntoMedioX,$PuntoMedioY,$EichSegm,$LunghSegm,50,$Colore[3]);
$LunghSegmE = sqrt(bcpow($EX-$AX,2) + bcpow($EY-$AY,2));
$PuntoMedioX = ($EX+$AX)/2; $PuntoMedioY = ($EY+$AY)/2;
$EichSegm = "E"; $LunghSegm = $LunghSegmE;
DisegnaPuntiMediConEtichette($Immagine,$PuntoMedioX,$PuntoMedioY,$EichSegm,$LunghSegm,65,$Colore[4]);
// perimetro del poligono
$Perimetro = $LunghSegmA + $LunghSegmB + $LunghSegmC + $LunghSegmD + $LunghSegmE;
imagestring ($Immagine , 5 , 10 , 80 , "Perimetro = $Perimetro" , $Colore[0] );
// Area del poligono - l'ultima coppia xy va collegata con la prima
$L1 = ($AX * $BY) + ($BX * $CY) + ($CX * $DY + $DX * $AY);
$L2 = ($AY * $BX) + ($BY * $CX) + ($CY * $DX + $DY * $AX);
$Area = abs($L1 - $L2) / 2;
imagestring ($Immagine , 5 , 10 , 95 , "Area = $Area" , $Colore[0] );
// loop in radianti
$Cx = 500; $Cy = 400; // centro della circonferenza
for($i = 0; $i < 2* M_PI; $i+=.01)
{
$x = $Cx + $Raggio * cos($i); // releva punto x coordinate cartesiane
$y = $Cy + $Raggio * sin($i); // releva punto y coordinate cartesiane
imagesetpixel($Immagine, $x, $y, $Colore[1]); // disegna la circonferenza con
imagesetpixel()
imageline ($Immagine , $Cx , $Cy, $Cx + $Raggio , $Cy , $Colore[0] ); // disegna il raggio
}
$area = M_PI * $Raggio *$Raggio;
$perimetro = 2* M_PI * $Raggio;
imagestring ($Immagine , 5 , 10 , 120 , "CIRCONFERENZA: area = $area : perimetro = $perimetro" , $Colore[1] );
imagepng($Immagine, PATHPUBLIC."NomeFile.png" ); // salva
imagedestroy($Immagine); // libera memoria
?>