Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP ja piste(et) ympyrän kehällä

nixu89 [12.06.2006 20:33:29]

#

Olen piirtänyt käytäen PHP:n GD-kirjastoa ympyrän, joka pitäisi viivoja käyttäen jakaa 24 osaan. Osat on jo tehty noina pylväinä (kts. kuva), ne pitäisi vielä saada kehystettyä

En vain keksi yksinkertaista (minkäänlaista oikeastaan) tapaa toteuttaa tätä. Paperilla on ties mitä hienoja kaavoja ja ajatuksen virtaa, mutta ei. Voisin toki selvittää kuvankäsittelyohjelmassa pisteet mistä minne ja pirtää jokaisen viivan käyttäen näitä koordinaatteja, mutta varmasti(ko?) on joku helpompi tapa

EDIT: Eipä enää mitään, löysin PHP:n manuaalista esimerkin jossa oli käytetty tällaista koodia

Lebe80 [13.06.2006 10:29:09]

#

Voisitko pistää ratkaisun myös tänne, jos jollain muulla sattuu olemaan sama ongelma... kiits

nixu89 [13.06.2006 13:12:34]

#

No siis joo, oli minulla alunperin linkkikin sinne, mutta sen takia viesti sekoili ja poistin linkin. Mutta koodi on siis seuraavanlainen:

PHP:n manuaali kirjoitti:

foripepe at yahoo dot com
02-Sep-2001 04:56
To fill an arc (DiameterX != DiameterY):

<?
function imagefilledarc($Image, $CenterX, $CenterY, $DiameterX, $DiameterY, $Start, $End, $Color) {
   // To draw the arc
   imagearc($Image, $CenterX, $CenterY, $DiameterX, $DiameterY, $Start, $End, $Color);
   // To close the arc with 2 lines between the center and the 2 limits of the arc
   $x = $CenterX + (cos(deg2rad($Start))*($DiameterX/2));
   $y = $CenterY + (sin(deg2rad($Start))*($DiameterY/2));
   imageline($Image, $x, $y, $CenterX, $CenterY, $Color);
   $x = $CenterX + (cos(deg2rad($End))*($DiameterX/2));
   $y = $CenterY + (sin(deg2rad($End))*($DiameterY/2));
   imageline($Image, $x, $y, $CenterX, $CenterY, $Color);
   // To fill the arc, the starting point is a point in the middle of the closed space
   $x = $CenterX + (cos(deg2rad(($Start+$End)/2))*($DiameterX/4));
   $y = $CenterY + (sin(deg2rad(($Start+$End)/2))*($DiameterY/4));
   imagefilltoborder($Image, $x, $y, $Color, $Color);
}
?>

To close the arc with 2 lines (DiameterX != DiameterY):

<?
function imagenofilledarc($Image, $CenterX, $CenterY, $DiameterX, $DiameterY, $Start, $End, $Color) { /* NÄMÄ TÄSSÄ */
   // To draw the arc
   imagearc($Image, $CenterX, $CenterY, $DiameterX, $DiameterY, $Start, $End, $Color);
   // To close the arc with 2 lines between the center and the 2 limits of the arc
   $x = $CenterX + (cos(deg2rad($Start))*($DiameterX/2));
   $y = $CenterY + (sin(deg2rad($Start))*($DiameterY/2));
   imageline($Image, $x, $y, $CenterX, $CenterY, $Color);
   $x = $CenterX + (cos(deg2rad($End))*($DiameterX/2));
   $y = $CenterY + (sin(deg2rad($End))*($DiameterY/2));
   imageline($Image, $x, $y, $CenterX, $CenterY, $Color);
}
?>

An example:

<?
   $destImage = imagecreate( 216, 152 );
   $c0 = imagecolorallocate( $destImage, 0, 255, 255 );
   $c1 = imagecolorallocate( $destImage, 0, 0, 0 );
   $c2 = imagecolorallocate( $destImage, 255, 0, 0 );
   ImageFilledRectangle ( $destImage, 0, 0, 216, 152, $c0 );
   imagefilledarc( $destImage, 108, 76, 180, 80, 0, 130, $c1 );
   imagenofilledarc( $destImage, 108, 76, 180, 80, 0, 130, $c2 );
   header("content-type: image/PNG");
   ImagePNG( $destImage );
   ImageDestroy( $destImage );
?>

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta