Kuinka kääntää jotakin kohti?

Tässä esimerkki:
On kaksi ukkelia. Molemmat katsoo satunnaisiin suuntiin, ja toisen täytyisi saada katsomaan toista suoraan kohti.

Eli mitenkä tälle ukkelille voisi laskea sen kulman, missä sen pitää olla ollaakseen toista ukkelia kohti? Kulma asteissa siis...
3237
Äänestä

Muut lukivat myös

Vastaukset 3

Vanhimmat

Etten osaa ihan suoraan sanoa, mutta eiköhän tuo riipu aika paljon niiden sijainnista toisiinsa nähden. Eli toisin sanoen muodostat niiden äijien välille suorakulmaisen kolmion (kateetit ja hypotenuusa). Niiden välinen kulmahan tulee hypotenuusan ja toisen kateetin välisestä kulmasta eli linja on hypotenuusa. Näin ollen toisen kulmaks tulee esim 30astetta ja toisen 210.. tai sit tossa ei oo mitään järkee

Äänestä

Kannattaa katsastaa trigonometrian perusteet vaikkapa yläasteen matikan kirjasta. Muodosta ruudulle kuvitteellinen suorakulmainen kolmio, jossa kateetit ovat ukkelien sijaintien erotukset pysty- ja vaakasuunnassa. Tällöin metsästämäsi kulman tangentti on kulman vastakkaisen kateetin pituus jaettuna viereisen kateetin pituudella, josta saat edelleen kulman sujauttamalla edellisen arctanin läpi. Suosittelen lämpimästi kertaamista. Kaikki käy helpommin, kun ymmärtää, mitä tekee, eikä vaan ota kaavaa valmiiksi annettuna.

Äänestä

Matemaattisesti tämä olisi helppo laskea, kunhan vaan käyttää arkustangettia, mutta kun itse aikanaan koodasin yhtä peliä, en löytänyt hakemiani matikka funktioita (silloisista DOS kirjastoista) enkä muutenkaan tarvinnut tarkkaa kulmaa, vaan pelin käyttöön sinne-päin kulman. Tässä idea speudo-koodina, josta voinet tehdä tarvittavan toteutuksen haluamallesi kielelle.

Luultavasti liikutat äijiä ruudulla jokseenkin seuraavalla tavalla:

x(uusi) = x(vanha) cos(suunta) * vauhti

Ja äijien välisen etäisyyden saat neliöjuurella:

x_erotus = abs(x1 - x2)
x_nelio = x_erotus * x_erotus
y_erotus = abs(y1 - y2)
y_nelio = y_erotus * y_erotus
etaisyys = sqrt( x_nelio y_nelio )

Ja voit hakea suunnan laskemalla kuinka kaukana äijät olisivat toisistaan jos liikuttaisit 1. äijää niiden välisen etäisyyden verran eteenpäin. Ja käyt vaikka kaikki kulmat läpi (haluamallasi tarkkuudella ~5*) ja etsin pienimmän erotuksen eli parhaimman suunnan. Tässä tosin tarkkuus huononee mitä kauempana äijät toisistaan ovat. Ja vastaavasti nopeus huononee mitä pienemmällä kulman muutoksella kokeilua toistaa.

Haku tarkentuu ja nopeutuu kun etsit kulmaa kokeilemalla ensin isoilla käännöksillä kumpaan suuntaa äijän pitää kääntyä ja kun kulma kääntyy taas kauemmaksi, niin puolitat kulman ja lähdet kääntymään takaisin päin. Toistat tämä silmukalla muutamia kertoja niin saat jo peliä varten tarpeeksi tarkan kulman.

Toivottavasti sait tästä jotain irti.

Äänestä

Kommentoi aloitusta


CMan kirjoitti:

Tässä esimerkki:
On kaksi ukkelia. Molemmat katsoo satunnaisiin suuntiin, ja toisen täytyisi saada katsomaan toista suoraan kohti.

Eli mitenkä tälle ukkelille voisi laskea sen kulman, missä sen pitää olla ollaakseen toista ukkelia kohti? Kulma asteissa siis...

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu