Ensiksi täytyy todeta etten ole mikään matematiikan ihmelapsi.
Eli jos tiedossa on ympyrän säde (r) ja kulma(a), jossa kehää kohti siirrytään.. Toisin sanoin näillä tiedoilla pitäisi laskea piste ympyrän kehältä.
Ymmärtääkseni tämä on mahdollista seuraavasti:
siirtymä y -suunnassa = cos(a)*säde
siirtymä x -suunnassa = sin(a)*säde
Tiedän, tavalliseen tapaani selitän ehkä huonosti asiani... Mutta jos tämä selventäisi:
https://www.ohjelmointiputka.net/oppaat/opas.
(Yksikkö ympyrä -kohta)
Olenko ymmärtänyt... tai tehnyt jotain väärin seuraavassa koodin pätkässä.. (pitäisi piirtää viivan määritettyyn asteeseen.. Mutta jos annan asteen arvoksi($i) 1, niin tuo piirtää viivan 60 asteen kulmaan...
eli missä kohtaa en ymmärtänyt asiaa trikonometriasta, vai onko virhe koodissa?
$image = imagecreatetruecolor($x, $y); $black = imagecolorallocate($image, 0, 0, 0); //musta $green = imagecolorallocate($image, 25, 255, 25); //Vihreä imagefill($image, 0, 0, $black); imageellipse($image, $center_x, $center_y, $x, $y, $green); $i = 1; $x_siirtyy = $center_x + (cos($i)*100); $y_siirtyy = $center_y +(sin($i)*100); imageline($image, $center_x, $center_y, $x_siirtyy, $y_siirtyy, $green); // Tulostetaan kuva. header("Content-type: image/png"); imagepng($image);
1 = 57,295779513082320876798154814105°
Pentu kirjoitti:
Olenko ymmärtänyt... tai tehnyt jotain väärin seuraavassa koodin pätkässä.. (pitäisi piirtää viivan määritettyyn asteeseen.. Mutta jos annan asteen arvoksi($i) 1, niin tuo piirtää viivan 60 asteen kulmaan...
Kulma pitää antaa radiaaneina eikä asteina.
Johtuu siitä, että PHP, kuten muutkin ohjelmointikielet, käyttää trigonometrisissä funktioissa radiaaneja, ei asteita.
Edit. Moniko kerkesi ennen?
Hennkka kirjoitti:
Johtuu siitä, että PHP, kuten muutkin ohjelmointikielet, käyttää trigonometrisissä funktioissa radiaaneja, ei asteita.
Tein pienen tutkimus matkan... PHP:n maailmaan: "deg2rad: Muuttaa asteet radiaaneiksi"
eli pystyisin korjaamaan asian seuraavasti?:
Tuon saan viel nopeen testin jälkeen pelittämään... mutta for -silmukan kanssa ei onnistukkaan...
for($i = 0; $i < 360; $i+60){ $x_siirtyy = $center_x + (cos(deg2rad($i))*100); $y_siirtyy = $center_y +(sin(deg2rad($i))*100); imageline($image, $center_x, $center_y, $x_siirtyy, $y_siirtyy, $green); }
Ilmoittaa vain: "Fatal error: Maximum execution time of 30 seconds exceeded in..."
Johtuu siitä että looppisi on ikuinen. $i+60 ei muuta $i:n arvoa. Kokeile laittaa vaikka $i+=60 siihen tilalle.
Aihe on jo aika vanha, joten et voi enää vastata siihen.