Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java : kulma laskuissani ongelmia...

kpzpt [30.03.2010 16:00:54]

#

Hello!

Minulla on seuraava funktio palauttamassa kahden pisteen välistä kulmaa,
koen kuitenkin että funktioni on aivan liian monimutkainen tälläisenä, kuinka sitä voi yksinkertaistaa, edes hieman ??

Toimiva mutta liian monimutkainen Java Koodini :

public float palautaKulma ( Point p1 , Point p2 )
    {
    	float fx = (float)(p2.getX()-p1.getX());
    	float fy = (float)(p2.getY()-p1.getY());
    	float f1 = 0f;

    	if ( fx >= 0 ) if ( fy <= 0 ) f1 = (float)-Math.toDegrees(Math.atan(fx/fy));
        if ( fx >= 0 ) if ( fy >= 0 ) f1 = 90-(float)Math.toDegrees(Math.atan(fx/fy))+90;
        if ( fx <= 0 ) if ( fy <= 0 ) f1 = 90-(float)Math.toDegrees(Math.atan(fx/fy))+270;
        if ( fx <= 0 ) if ( fy >= 0 ) f1 = 90-(float)Math.toDegrees(Math.atan(fx/fy))+90;

    	return f1;
    }

Tämä on ihan perus matikkaa ja ohjelmointi putkassakin on varmaankin puitu asiaa ennenkin, mutta Javalle siirtäminen on minulla hieman ongelmana !!

-----

Kiitos..

Metabolix [30.03.2010 16:12:33]

#

Nykyisessä koodissasi on ainakin yksi virhe: jos fy on nolla, ohjelma kaatuu.

Käytä funktiota Math.atan2, joka ottaa suoraan arvot fx ja fy. Tällöin on myös turha käyttää apumuuttujia; voit kirjoittaa vähennyslaskut suoraan funktion argumenteiksi.

kpzpt [30.03.2010 16:39:37]

#

Metabolix kirjoitti:

Nykyisessä koodissasi on ainakin yksi virhe: jos fy on nolla, ohjelma kaatuu.

Käytä funktiota Math.atan2, joka ottaa suoraan arvot fx ja fy. Tällöin on myös turha käyttää apumuuttujia; voit kirjoittaa vähennyslaskut suoraan funktion argumenteiksi.

Kulma!

Tarkoitatko näin ->

public float palautaKulma ( Point p1 , Point p2 )
{
    return (float)( Math.toDegrees ( Math.atan2 ( p2.getX()-p1.getX(), p2.getY()-p1.getY() ) ) ) ;
}

Minulla tämä tapa ei palauta oikeita kulma arvoja, olin sen jo aiemmin kokeillut ja hylännyt ei toimivana ??

Ovatko nuo x ja y oikeilla puolilla, entä onko niitten vähännys laskut oikein "päin" ??

-----

Kiitos..

vehkis91 [30.03.2010 16:45:33]

#

Ootko varma, että on oikeat arvot, ettet vaan olisi sekoittanut asteita ja radiaaneja?

Metabolix [30.03.2010 16:57:27]

#

Mitä jos opettelisit lukemaan itse dokumentaatiota? Lisäksi systemaattisella testauksella eli parilla järkevällä kokeilulla saisit helposti itsekin selville, mikä on mennyt pieleen.

kpzpt kirjoitti:

Ovatko nuo x ja y oikeilla puolilla, entä onko niitten vähännys laskut oikein "päin" ??

Montakohan minuuttia olisi kestänyt itse kokeilla kummatkin vaihtoehdot?

kpzpt [31.03.2010 12:53:47]

#

KulmaLaskuja!

Tässä olisi minun rakentamani hieman tiiviimpi ja tehokkaampi funktio, mitä tuo ensimmäisen viestini funktio sitten oli !!

public float palautaKulma (Point p1, Point p2 )
{
    float f1 = (float)Math.toDegrees( Math.atan2( p1.getY()-p2.getY(), p1.getX()-p2.getX() ) );
    f1+=270;
    while ( f1 > 360 ) f1-=360;
    while ( f1 <   0 ) f1+=360;
    return f1;
}

-----

Kiitos..

Vastaus

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

Tietoa sivustosta