Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Lisää etäisyys pulmaa...

Pentu [10.03.2011 17:30:25]

#

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?

Metabolix [10.03.2011 17:39:02]

#

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;

Vastaus

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

Tietoa sivustosta