Eli jälleen matemaattisia propleemia.. Tälläkertaa seuraavanlainen:
-Tiedossa on kahden pisteen välinen etäisyys, joka on enemmän kuin ympyrän säde.
-> pisteen kordinaatteja pitäisi muuttaa siten, että piste sijoittuisi ympyrän(x) kehälle.
Vastaus on varmasti melko yksin kertainen, mutta osaisiko joku valaista myös minulle.
Etäysyyden laskeva PHP funktio on seuraavanlainen:
... //etäisyyttä käsittelevä funktio function matka($x2, $y2){ global $image; //kuva global $color; //väri global $settings; //asetusket global $matkat; //annetaan arvot x1 ja y1 $x1 = 0; $y1 = 0; $dx = abs($x1 - $x2); $dy = abs($y1 - $y2); $matka = round(sqrt($dx * $dx + $dy * $dy),2); $matkat[$x2.'|'.$y2] = $matka; //lisätään etäisyys arrayhyn. return $matka; } //Käsitellään sijainnit -array. foreach ($sijainnit as $key => $value){ $t = explode("|", $key, 2); $si_x = $center_x+$t[0]; $si_y = $center_y+$t[1]; //Onko etäisyys pidempi kuin säde (190) if(matka($t[0], $t[1]) > 190){ //jos on echo = 'kaukna'; } else{ // Jos etäisyys on lyhempi kuin säde //Piirretään piste ...
Esim. Säde on 190px ja etäisyydet:
a = 50
b = 160.5
c = 226.72
d = 311.45
näistä c ja d ovat säteen ulkopuolella, ei hyvä. Nyt ne pitäisi saada siis sijoitettua ympyrän kehälle, mutta miten?
Ota abs-funktiot pois, niistä on vain haittaa.
Jos etäisyys on liian suuri, tee laskut kuten tuossa funktiossa (mutta ilman absia) ja laske sitten pisteen uusi sijainti näin:
$x2 = $x1 - 190 * $dx / $matka; $y2 = $y1 - 190 * $dy / $matka;
Aihe on jo aika vanha, joten et voi enää vastata siihen.