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.