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..
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.
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..
Ootko varma, että on oikeat arvot, ettet vaan olisi sekoittanut asteita ja radiaaneja?
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?
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..
Aihe on jo aika vanha, joten et voi enää vastata siihen.