Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: ympyrän koko

pistemies [29.12.2005 00:06:57]

#

Mikähän tässä on vikana, kun pienentää tuota ympyrää. Jos tuosta poistaa pari lohkoa while-silmukasta, se tulostaa oikean kokoisena (100px).

<?php
$file = "grafik12.jpg";
$width = 200;
$height = 200;

$x1=100;
$y1=100;
  $image = ImageCreate($width, $height);

 $arr1=array();
 $lohkot = array_pad($arr1, 101, 1); // luodaan arrayhyn 100 arvoa

       $i =1;
 while($lohkot[$i])
 {
     $color = ImageColorAllocate($image,255,255,230);  // Taustaväri
      ImageArc($image, $x1,$y1,0,0,0,360,$color);  //

      // Tehdään ympyrälohkot
        $color = ImageColorAllocate($image,0,0,200);
         ImageArc($image,$x1,$y1,$i,$i,270,360,$color);  // oikea yla
      	   $color = ImageColorAllocate($image,190,40,20);
           ImageArc($image,$x1,$y1,$i,$i,0,90,$color);  // oikea ala
        $color = ImageColorAllocate($image,190,240,220);
        ImageArc($image,$x1,$y1,$i,$i,90,180,$color); // vasen ala
	$color = ImageColorAllocate($image,255,255,255);
        ImageArc($image,$x1,$y1,$i,$i,180,270,$color);   // vasen yla
$i++;
 }
ImageJpeg($image, $file);
ImageDestroy($image);

echo "<img src=\"grafik12.jpg\">";
?>

LazyJones [29.12.2005 00:43:28]

#

Aika jännä ympyrä. Ei ole nuo GD funktiot kovin tuttuja mutta tähän piti oikein syventyä.
Mitä ihmettä tuolla lohkotaulukolla teet? Muuta kuin käytät omituisena while-rakenteen ehtona? Sama homma kävisi

while($i<101)

Kikkailin tuolla hieman, eikä oikein selvinnyt että mikä tuota ympyrän kokoa rajoittaa. Vaikka laittaisi while($i<1000) niin ympyrästä tulee saman kokoinen. Paitsi jos $i:tä lisää esimerkiksi kahdella tai kolmella. Loppuuko piirtotehon muisti tms? Osaisiko joku selventää?

Metabolix [29.12.2005 07:06:18]

#

<?php
$file = "grafik12.jpg";
$width = 200;
$height = 200;

$x1 = $width / 2;
$y1 = $height / 2;
$image = ImageCreate($width, $height);

$c1 = ImageColorAllocate($image,255,0,0);
$c2 = ImageColorAllocate($image,0,255,0);
$c3 = ImageColorAllocate($image,0,0,255);
$c4 = ImageColorAllocate($image,0,0,0);
for ($i = 1; $i <= $width; $i++)
{
  // Tehdään ympyrälohkot
  ImageArc($image, $x1, $y1, $i, $i, 270, 360, $c1);
  ImageArc($image, $x1, $y1, $i, $i, 0,   90,  $c2);
  ImageArc($image, $x1, $y1, $i, $i, 90,  180, $c3);
  ImageArc($image, $x1, $y1, $i, $i, 180, 270, $c4);
}
ImageJpeg($image, $file);
ImageDestroy($image);
echo "<img src=\"$file\" alt=\"Pallero\" />";
?>

Siinä teille. Ainakin toimii nopeammin, kun ottaa värin luomisen pois silmukasta, ja mahtaako siinä olla vielä jokin muistivuotokin, tiedä häntä... Siinä vaiheessa alkoi kuitenkin toimia. Ja $i on koko ellipsin leveys, ei pelkästään näkyvän kaaren. Hieman alkaa ulko-osissa mennä räikäiseksi tuokin ympyrä, joten pitää varmaan pienemmillä väleillä $i:tä nostaa.

Kaiken kukkuraksi koodin voi sisentää ymmärrettävästikin.

pistemies [29.12.2005 11:00:50]

#

Kiitos!.
Pikkuisen muutin tuota:

 for ($i = 1; $i <= $x1; $i++)

niin tulee kooksi tuo 100.

Tuosta suuremmasta koosta, miten voi "nostaa $i:tä pienemmillä väleillä"? Eikö se tuossa jo pitäisi olla 1px, vai suureeneeko tuo $i:n mukana?

LazyJones [29.12.2005 16:15:32]

#

Metabolix ilmeisesti tarkoitti, ettei ympyrän keskellä tarvitse yhden pikselin piirtotarkkuutta. Voit esimerkiksi kokeilla kasvattaa $i:tä kahdella kunnes $i on esim 20 (silmukat voit rakennella itse)

pistemies [30.12.2005 11:04:13]

#

siirsin tämän...

Vastaus

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

Tietoa sivustosta