curveangle

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
Guest

curveangle

Post by Guest »

ei tää oo oikeestaan ongelma, mutta miten toi curveangle laskee sen arvon?
ois hyötyy toisissa ohjelmointikielissä
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: curveangle

Post by koodaaja »

Guest wrote:ei tää oo oikeestaan ongelma, mutta miten toi curveangle laskee sen arvon?
ois hyötyy toisissa ohjelmointikielissä
Se todennäköisesti laskee kulmien eron, jakaa sen tuolla smooth-arvolla ja palauttaa tämän arvon. Suunnilleen ainakin.
Marcoder
Active Member
Posts: 120
Joined: Tue Aug 28, 2007 8:21 am

Re: curveangle

Post by Marcoder »

Tässä olisi CurveValue:a vastaa funktio esimerkkikoodeineen josta selviää laskukaava. Samaa voit soveltaa CurveAngleen mutta siinä pitää vähän kikkailla kääntösuunnan kanssa.

Code: Select all

SCREEN 800, 600

cow = LoadImage("media/cow.bmp")
x1# = 0
x2# = 0

Repeat
    DrawImage cow, x1, 100
    DrawImage cow, x2, 200
    x1 = CurveValue(770, x1, 80)
    x2 = CurveValue2(770, x2, 80)
    
    If KeyHit(cbKeyReturn) Then
        x1 = 0
        x2 = 0
    EndIf
    DrawScreen
Forever

Function CurveValue2#(_new#, _old#, _smooth#)
    Return _old + (_new - _old) * (1.0 / _smooth)
EndFunction

Guest

Re: curveangle

Post by Guest »

HOX! kyse oli curveANGLEsta ei VALUEsta, curvevaluehan on selvää pässinlihaa mutta pitäminen 360 asteen sisällä on vähä hankalempaa
TheFish
Developer
Developer
Posts: 477
Joined: Mon Aug 27, 2007 9:28 pm
Location: Joensuu

Re: curveangle

Post by TheFish »

Vieras wrote:HOX! kyse oli curveANGLEsta ei VALUEsta, curvevaluehan on selvää pässinlihaa mutta pitäminen 360 asteen sisällä on vähä hankalempaa
Et tainnut lukea tuota Marcoderin viestiä?
Matcoder wrote:Samaa voit soveltaa CurveAngleen mutta siinä pitää vähän kikkailla kääntösuunnan kanssa
CoolBasic henkilökuntaa
Kehittäjä
Marcoder
Active Member
Posts: 120
Joined: Tue Aug 28, 2007 8:21 am

Re: curveangle

Post by Marcoder »

Vieras wrote:HOX! kyse oli curveANGLEsta ei VALUEsta, curvevaluehan on selvää pässinlihaa mutta pitäminen 360 asteen sisällä on vähä hankalempaa
Voi hyvänen aika sentään!
En laittanut valmista koodia vaan pelkän laskukaavan siksi että saat itse ratkaista ongelman. Tiedäthän että ohjelmoijan yksi tärkeimmistä ominaisuuksista on hyvä ongelmanratkaisukyky.

Mutta jos ei vaan onnistu niin tässä tulee.

Code: Select all

Function CurveAngle2(_new#, _old#, _smooth#)
    diff# = WrapAngle(_new) - WrapAngle(_old)
    If diff > 180 Then diff = diff - 360
    If diff < -180 Then diff = diff + 360
    Return _old + (diff) * (1.0 / _smooth)
EndFunction
Eihän ollut kovin vaikeaa?
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: curveangle

Post by valscion »

Siinä on vain se, että se asteluku pitäisi saada pysymään lukujen 0 ja 360 välissä, ei lukujen -180 ja 180. En väitä, etten tuota silti osaisi helposti korjata itsekin, pilkunviilaus vain on välillä hauskaa :P
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
TheFish
Developer
Developer
Posts: 477
Joined: Mon Aug 27, 2007 9:28 pm
Location: Joensuu

Re: curveangle

Post by TheFish »

OonSuomesta wrote:Siinä on vain se, että se asteluku pitäisi saada pysymään lukujen 0 ja 360 välissä, ei lukujen -180 ja 180. En väitä, etten tuota silti osaisi helposti korjata itsekin, pilkunviilaus vain on välillä hauskaa :P
En testannut koodia itse, mutta väittäisin, että sen kuuluu olla juuri nimen omaan väliltä -180 ja 180, koska tuon tarkoitushan on kääntää objektia pehmeästi lyhimpään suuntaan. Tietäne varmaan, että jos käännyt esim. oikealle, et voi kääntyä enempää kuin 180 astetta, koska jos joutuisit kääntymään esim 190 astetta, olisi nopeampaa kääntyä vasemmalle (vain 170 astetta).
CoolBasic henkilökuntaa
Kehittäjä
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: curveangle

Post by valscion »

TheFish wrote:
OonSuomesta wrote:Siinä on vain se, että se asteluku pitäisi saada pysymään lukujen 0 ja 360 välissä, ei lukujen -180 ja 180. En väitä, etten tuota silti osaisi helposti korjata itsekin, pilkunviilaus vain on välillä hauskaa :P
En testannut koodia itse, mutta väittäisin, että sen kuuluu olla juuri nimen omaan väliltä -180 ja 180, koska tuon tarkoitushan on kääntää objektia pehmeästi lyhimpään suuntaan. Tietäne varmaan, että jos käännyt esim. oikealle, et voi kääntyä enempää kuin 180 astetta, koska jos joutuisit kääntymään esim 190 astetta, olisi nopeampaa kääntyä vasemmalle (vain 170 astetta).
No näinhän se on. Silti sen numeroarvon tulisi olla väliltä 0-360, eikä negatiivinen. Tarkoitus on kumminkin saada se "oikea" asteluku välillä 0-360. Katso vaikka mitä CoolBasicin manuaali sanoo:
CURVEANGLE


KUVAUS
Sama kuin CurveValue, mutta pitää kulman välillä 0-360. Funktion toinen ihanuus on se, että CoolBasic valitsee automaattisesti sen lyhimmän polun, eli käännytään siihen suuntaan kun se olisi loogisinta.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Marcoder
Active Member
Posts: 120
Joined: Tue Aug 28, 2007 8:21 am

Re: curveangle

Post by Marcoder »

OonSuomesta wrote:Tarkoitus on kumminkin saada se "oikea" asteluku välillä 0-360.
Voi mahoton sentään että yksinkertaisimmatkin asiat pitää saada valmiina käteen.

Code: Select all

Function CurveAngle2(_new#, _old#, _smooth#)
    diff# = WrapAngle(_new) - WrapAngle(_old)
    If diff > 180 Then diff = diff - 360
    If diff < -180 Then diff = diff + 360
    Return WrapAngle(_old + (diff) * (1.0 / _smooth))
EndFunction
Eron edelliseen huomaat tuolla Return-rivillä. Vielä jotain muuta?

No jos seuraavaksi ihmettelet kuinka tuo WrapAngle toimii niin tässä vastaava koodi

Code: Select all

Function WrapAngle2(_angle#)
    ret# = _angle
    While ret < 0 : ret + 360 : Wend
    While ret >= 360 : ret - 360 : Wend
    Return ret
EndFunction
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: curveangle

Post by valscion »

Marcoder wrote:Voi mahoton sentään että yksinkertaisimmatkin asiat pitää saada valmiina käteen.
Minä en ole missään vaiheessa pyytänyt että kirjoitat näitä koodeja, ilmoitin vain asian niin kuin sen kuuluisi olla.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Post Reply