Ohjelmointipulma matematiikan kanssa.

Heippa!

Viimeisistä matematiikantunnistani on jo yli 6v ja nyt ei meinaa taas lanttu leikata ohjelmoinnin parissa. En millään hoksaa mitä keinoa tässä pitäisi soveltaa

Hakussa olisi siis täydennystä if lausekkeeseen, mutta satunnaisen kokeilun sijaan olisi mukava oppia miten tällaiset tilanteet voisi tulevaisuudessa ratkaista esim Wolframalphan avulla, kun muutamia numeroita tunnetaan.

Gif demonstraatio halutusta tuloksesta:
https://dl.dropboxusercontent.com/u/25020981/Postatut kuvat/blokkianimaatio.gif

Mustaharmaa kuutio on tässä ns pelaaja ja ympärillä palikoista koostuva maa tulisi saada reagoimaan animaation tavoin useilla eri muuttujien arvoilla.

Muutama muuttuja:
minY = -3; maapalikan minimikorkeus
maxY = 0; maapalikan maksimikorkeus

distanceClose = 2;
distanceFar = 5; pelaajan etäisyys maapalikkaan näiden 2 arvon välillä tulisi liikuttaa palikkojen korkeutta lineaarisesti.

distance; yksittäisen palikan etäisyys pelaajaan vaaka-akselilla, korkeutta ei siis huomioida.

Maapalikoiden korkeus vaihtelee siis -3 ja 0 yksikön välillä. Pelaajan ollessa lähempänä kuin 5 yksikön päässä maapalikasta, palikan tulisi nousta lineaarisesti ylöspäin, kunnes etäisyys on 2, jolloin saavutettaisiin korkeus 0. Palikat ovat 2 yksikön etäisyyden sisällä korkeudessa 0, eli pelaajan juuri pelaajan alapuolella

Elikkä:
if (distance < distanceFar && distance > distanceClose)
maapalikan korkeus = ???

Osaisitteko neuvoa, vai tarvitseeko tapaus lisää selvennystä? :)
384
Äänestä

Muut lukivat myös

Vastaukset 3

Vanhimmat

Yleinen tapa lienee käyttää kaavaa f(x)=ax. Eli nyt ääriarvot ovat f(0)=0 ja f(1)=a. Siten esim puolessa välissä f(1/2)=a/2. Jos taas haluat kuvata välin [0,1] välille [a,b] lineaarisesti, niin kokeilepa kaavaa f(x)=(b-a)x a.

Äänestä

Ei tainnut ihan vielä tällä selvitä.

Jos nyt koodin kannalta miettii niin a ja b olisivat tässä tapauksessa ilmeisesti distanceFar ja distanceClose, mutta jos haettava x olisi etäisyys, ei sitä voi ainakaan ilman yhtälön pyörittelyä tuonne väliin lisätä. Ja tästä varmaankin jäi huomioimatta muuttuva minimikorkeus, minY = -3. Se tulisi myös huomioida kaavassa.

Kokeilin kuitenkin kaavaa niin että x olisi distance elikkä:
korkeus = (((distanceClose-distanceFar))*(distance distanceFar))
Kuva tuloksesta: https://dl.dropboxusercontent.com/u/25020981/Postatut kuvat/korkeus.PNG

Mutta palikan muuttuva korkeus heittää pahasti halutusta 0 | -3 väliltä ja liikkuminen tapahtuu muutenkin korkeuksien -30 | -21 välillä.

Äänestä

Päätä hakkaamalla seinään kaava selvisi kun paperilla vähän töhersi, mutta eipä tästä oikein mitään kätevää oppinut, esim Wolframalphan käyttöä.

Jos jotakuta kiinnosta niin kaava oli lopulta:
(((distance-distanceClose)/(distanceClose-distanceFar))*(maxY-minY))

Eli ensin lasketaan mitenkä lähellä ollaan pistettä, jolloin korkeus on maksimissaan eli (distance-distanceClose).

Tulos jaetaan etäisyydellä, jonka aikana korkeus on muuttuva eli (distanceClose-distanceFar)

Näin saadaan prosenttiosuus kuljetusta matkasta jolloin korkeuden pitää muuttua ja lopulta tulos kerrotaan mahdollisen korkeuden muutoksen määrällä eli (maxY-minY)

Äänestä

Kommentoi aloitusta


Mutjake kirjoitti:

Heippa!

Viimeisistä matematiikantunnistani on jo yli 6v ja nyt ei meinaa taas lanttu leikata ohjelmoinnin parissa. En millään hoksaa mitä keinoa tässä pitäisi soveltaa

Hakussa olisi siis täydennystä if lausekkeeseen, mutta satunnaisen kokeilun sijaan olisi mukava oppia miten tällaiset tilanteet voisi tulevaisuudessa ratkaista esim Wolframalphan avulla, kun muutamia numeroita tunnetaan.

Gif demonstraatio halutusta tuloksesta:
https://dl.dropboxusercontent.com/u/25020981/Postatut kuvat/blokkianimaatio.gif

Mustaharmaa kuutio on tässä ns pelaaja ja ympärillä palikoista koostuva maa tulisi saada reagoimaan animaation tavoin useilla eri muuttujien arvoilla.

Muutama muuttuja:
minY = -3; maapalikan minimikorkeus
maxY = 0; maapalikan maksimikorkeus

distanceClose = 2;
distanceFar = 5; pelaajan etäisyys maapalikkaan näiden 2 arvon välillä tulisi liikuttaa palikkojen korkeutta lineaarisesti.

distance; yksittäisen palikan etäisyys pelaajaan vaaka-akselilla, korkeutta ei siis huomioida.

Maapalikoiden korkeus vaihtelee siis -3 ja 0 yksikön välillä. Pelaajan ollessa lähempänä kuin 5 yksikön päässä maapalikasta, palikan tulisi nousta lineaarisesti ylöspäin, kunnes etäisyys on 2, jolloin saavutettaisiin korkeus 0. Palikat ovat 2 yksikön etäisyyden sisällä korkeudessa 0, eli pelaajan juuri pelaajan alapuolella

Elikkä:
if (distance < distanceFar && distance > distanceClose)
maapalikan korkeus = ???

Osaisitteko neuvoa, vai tarvitseeko tapaus lisää selvennystä? :)

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