LaskuKaavoja

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
SPuntte
Tech Developer
Tech Developer
Posts: 650
Joined: Mon Aug 27, 2007 9:51 pm
Location: Helsinki, Finland
Contact:

Re: LaskuKaavoja

Post by SPuntte »

Pate5 wrote:Minkä kaavan avulla voitaisiin laskea kappaleen nopeus sen vaaka- ja pystyliikkeen avulla?
Nopeus on komponenttiensa vektorisumma, eli kun komponentit ovat kohtisuorassa toisiaan vastaan, summavektorin pituus saadaan hypotenuusan pituutena suorakulmaisesta kolmiosta kun komponentit ovat kateetteja, siis pythagoraan lauseella:

Code: Select all

Vsum = Sqrt(Vxcomp * Vxcomp + Vycomp * Vycomp)
Valzu: kertolasku on nopeampi kuin potenssiin korotus
CoolBasic henkilökuntaa
Tech-kehittäjä
CoolBasic Classic, Cool VES

CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX
Valtzu
Active Member
Posts: 115
Joined: Sun Aug 26, 2007 2:40 pm
Location: Sauvo
Contact:

Re: LaskuKaavoja

Post by Valtzu »

SPuntte wrote:Valtzu: kertolasku on nopeampi kuin potenssiin korotus
No jos nopeutta halutaan, käytetään tietysti sisäänrakennettua funktiota, joka on tuotakin nopeampi.

Code: Select all

nopeus# = Distance(0, 0, nopeus_x#, nopeus_y#)
Pate5
Artist
Artist
Posts: 551
Joined: Tue Aug 28, 2007 4:53 pm
Location: Vantaa

Re: LaskuKaavoja

Post by Pate5 »

Kiitos! Entä miten laskettaisiin kappaleen liikkumissuunta(kulma) sen vaaka- ja pystyliikkeen avulla?
CoolBasic henkilökuntaa
Graafikko
Aavesoturi
Active Member
Posts: 163
Joined: Fri Aug 31, 2007 7:07 pm
Location: Helsinki
Contact:

Re: LaskuKaavoja

Post by Aavesoturi »

Pate5 wrote:Kiitos! Entä miten laskettaisiin kappaleen liikkumissuunta(kulma) sen vaaka- ja pystyliikkeen avulla?
Esim. GetAngle(0,0,xcomp,ycomp)
SPuntte
Tech Developer
Tech Developer
Posts: 650
Joined: Mon Aug 27, 2007 9:51 pm
Location: Helsinki, Finland
Contact:

Re: LaskuKaavoja

Post by SPuntte »

Aavesoturi wrote:
Pate5 wrote:Kiitos! Entä miten laskettaisiin kappaleen liikkumissuunta(kulma) sen vaaka- ja pystyliikkeen avulla?
Esim. GetAngle(0,0,xcomp,ycomp)
Ruudun koordinaateissa kyllä. Maailmakoordinaateissa eli perinteisessä karteesisessa koordinaatistossa pitää kääntää y-komponentti negatiiviseksi, koska ruudulla y-koordinaatit kasvavat alaspäin. Siis:

GetAngle(0,0,xcomp,-ycomp)
CoolBasic henkilökuntaa
Tech-kehittäjä
CoolBasic Classic, Cool VES

CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX
User avatar
Dibalo
Advanced Member
Posts: 298
Joined: Mon Aug 27, 2007 8:12 pm
Location: Espoo, Finland
Contact:

Re: LaskuKaavoja

Post by Dibalo »

Tai vaikkapa kaavana:

Code: Select all

ange# = ATan( yVel# / xVel# )
The darkest spells can be found from
http://tunkkaus.blogspot.fi
zedo

Re: LaskuKaavoja

Post by zedo »

Pelin tekoa ala amaster:

Kahden objektin välimatka
Mietin pari tuntia, lopulta voiton tunne ja keksin, että saan laskettua pythagoraan lauseella.
Sit toteuttaessa hoksasin, et on sisään rakennettu funktio distance2 :D
Tää kaava kaiketi toiminee sovellettuna muissaki kielissä, mutta laitan cb:nä, nii on mulle helpompaa.
Muistaakseni jotenki näin:

Code: Select all

xVali=ObjectX(ukko)-ObjectX(vihu)
yVali=ObjectY(ukko)-ObjectY(vihu)

xVali2=xVali*xVali
yVali2=yVali*yVali

vali2=yVali2+xVali2
vali=Sqrt(vali2) //vali2:sta otetaan neliöjuuri

text 10,10,"Ukkojen välimatka: "+vali
Eli siis hyvin yksinkertaisesti Pythagoran lauseella a²+b²=c²
Eli jos tiedetään suorakulmaisen kolmion kateetit (x & y), saadaan hypotenuusa, eli välimatka.
Olin ylpeä, vaikka jälkikäteen tuntuu aika yksinkertaiselta.
Ehkä siitä vielä joku muakin naskimpi hyötyy ;)
SPuntte
Tech Developer
Tech Developer
Posts: 650
Joined: Mon Aug 27, 2007 9:51 pm
Location: Helsinki, Finland
Contact:

Re: LaskuKaavoja

Post by SPuntte »

Minulta pukkaa taasen yksi (turha) kaava lisää: Trigonometrinen interpolaatio

peruskaava (interpoloiva funktio):
kulmasuureena asteet:
f(x) = y1 + 1/2 {(y1 - y2) cos[(x - x1)/(x2 - x1) * 180°] - (y1 - y2)}

kulmasuureena radiaanit:
f(x) = y1 + 1/2 {(y1 - y2) cos[(x - x1)/(x2 - x1) * π] - (y1 - y2)}

Interpoloitaessa arvoja funktio rajataan suljetulle välille [x1, x2]
Palauttaa y-koordinaatin annetulle x-koordinaatille trigonometriseltä interpolaatiokäyrältä. Jos edellinen lause oli pelkkää sanahelinää, aja koodi ja katso niin ymmärrät. DrawTrigCurve() piirtää annetun käyränpätkän halutulla tarkkuudella.

Code: Select all

//Trigonometric interpolation/Trigonometrinen interpolaatio
//©2008 by Pontus "SPuntte" Lundström

SCREEN 800, 600
SetWindow "l33t.h4><.lullorz"

px# = -350
py# = 230
pallot = True
tarkkuus% = 15

Repeat
    Color 255, 255, 255
    Text 5, 5, "Hiiren ykkösnappi alustaa käyrän alkupisteen hiiren koordinaatteihin"
    Text 5, 20, "Kakkosnappi kytkee pallot päälle/pois          Tila: " + pallot
    Text 5, 35, "Rulla muuttaa käyrän piirtotarkkuutta          Arvo: " + tarkkuus%
    
    If MouseHit(1) Then
        px# = MouseWX()
        py# = MouseWY()
    EndIf
    
    If MouseHit(2) Then pallot = Not pallot
    
    tarkkuus% = tarkkuus% + MouseMoveZ()
    If tarkkuus% < 1 Then tarkkuus% = 1
        
    DrawToWorld ON
        //Käyrä
        Color 0, 0, 255:DrawTrigCurve(px#, py#, MouseWX(), MouseWY(), tarkkuus%)
        
        //Pisteet
        If pallot Then
            If MouseWX() > px#
                For i = px# To MouseWX() Step 10
                    Color 255, 0, 0:Circle i, TrigCurve(px#, py#, MouseWX(), MouseWY(), i), 2
                Next i
            Else
                For i = px# To MouseWX() Step -10
                    Color 255, 0, 0:Circle i, TrigCurve(px#, py#, MouseWX(), MouseWY(), i), 2
                Next i
            EndIf
        EndIf
    DrawToWorld OFF
            
    DrawScreen
Forever

Function TrigCurve(x1#, y1#, x2#, y2#, p#)
    Return y1# + 0.5 * ((y1# - y2#) * Cos((p# - x1#)/(x2# - x1#)*180.0) - (y1# - y2#))
EndFunction

Function DrawTrigCurve(x1#, y1#, x2#, y2#, div%=20)
    ox# = x1#
    oy# = y1#
    For i = 1 To div%
        x# = x1# + i * (x2# - x1#)/div%
        y# = y1# + 0.5 * ((y1# - y2#) * Cos(Float(i)/Float(div%)*180.0) - (y1# - y2#))
        Line ox#, oy#, x#, y#
        ox# = x#
        oy# = y#
    Next i
EndFunction
Syntaksi wrote:TrigCurve(x1#, y1#, x2#, y2#, p#)
Palauttaa pisteiden (x1#, y1#) ja (x2#, y2#) väliseltä interpolaatiokäyrältä x-koordinaattia p# vastaavan y-koordinaatin.

DrawTrigCurve(x1#, y1#, x2#, y2#, div%=20)
Piirtää pisteiden (x1#, y1#) ja (x2#, y2#) välisen interpolaatiokäyrän jakamalla sen div% osaan, eli piirtämällä peräkkäin div% kpl janoja. Käyttää maailmakoordinaatteja ja nykyistä piirtoväriä.
Tämä siis perustuu siihen, että märitetään trigonometrinen funktio, jonka vierekkäiset huiput (aallon pohja ja harja) ovat kahdessa halutussa mielivaltaisessa pisteessä. Vetäsin tän ihan empiirisesti (=kokeellisesti) päästäni, kun oli tarvetta (pehmeän maaston luomiseen matemaattisesti, kokeilkaa vaikka, sopii erinomaisesti!), etten tiedä löytyykö yksinkertaisempaa tapaa. Matemaattisesti en jaksanut tätä todistaa paikkansapitäväksi, mutta graafisella laskimella kyllä katselin, että pitäis päteä suurinpiirtein kaikille arvoille. Ja voihan tätä ihan puhtaasti matikassakin hyödyntää. En kyllä usko, että edes lukion ysikurssin kokeessa kysyttäisiin :P
CoolBasic henkilökuntaa
Tech-kehittäjä
CoolBasic Classic, Cool VES

CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: LaskuKaavoja

Post by MaGetzUb »

Nyt kun on tätä omaa topickia tullut vahtailtua, niin tuli vain miäleen, että miillä kaavalla voitaisiin saada esim kumminauhan liikkee improvisoitua?
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
SPuntte
Tech Developer
Tech Developer
Posts: 650
Joined: Mon Aug 27, 2007 9:51 pm
Location: Helsinki, Finland
Contact:

Re: LaskuKaavoja

Post by SPuntte »

programmer of DSG wrote:Nyt kun on tätä omaa topickia tullut vahtailtua, niin tuli vain miäleen, että miillä kaavalla voitaisiin saada esim kumminauhan liikkee improvisoitua?
Yksittäistä kaavaa ei ole. Tai oikeastaan ainoa on harmonisen voiman laki:
F = -kx
Eli jousen (tai kuminauhan) aiheuttama voima (vektori F) on suoraan verrannollinen poikkeamaan tasapainoasemasta (vektori x) ja jousen jousivakioon (k). Mitä suurempi jousivakio, sitä jäykempi jousi.

Siis fysiikalla pääset kikkailemaan :P

Vanhoilta foorumeilta löytyy joku Marcoderin hassu vektoriviritys: http://www.coolbasic.com/oldforums/inde ... =kuminauha
CoolBasic henkilökuntaa
Tech-kehittäjä
CoolBasic Classic, Cool VES

CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: LaskuKaavoja

Post by axu »

vaihtaminen ykkösen ja nollan välillä ilman ehtolausetta:

Code: Select all

Luku=(Luku+1) Mod 2
en oo testannu mutta luultavasti siihen saa isomman alueen muuttamalla jakajaa?
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: LaskuKaavoja

Post by Koodiapina »

Eikös sama hoidu Not operaattorilla ilman kikkailua tyyliin:

Code: Select all

luku = not luku
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: LaskuKaavoja

Post by axu »

Grandi wrote:Eikös sama hoidu Not operaattorilla ilman kikkailua tyyliin:

Code: Select all

luku = not luku
Ahh... todistin oman väitteni todeksi joka kumoaa not-teorian :D

Code: Select all

Repeat
    Luku=(Luku+1) Mod 5
    Text 1,1, luku
    DrawScreen
    WaitKey
Forever
näin voidaan vaihtaa ison alueen sisällä lukuja ilman ehtolauseita
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
Alligaattori
Active Member
Posts: 135
Joined: Fri Mar 07, 2008 8:49 pm

Re: LaskuKaavoja

Post by Alligaattori »

Kahden muuttujan arvojen vaihtaminen käyttämättä kolmatta muuttujaa:

Code: Select all

x = x + y
y = x - y
x = x - y
Ja esimerkkiohjelma:

Code: Select all

Dim x As Integer, y As Integer

x = Rand(0,25)
y = Rand(0,25)

Print x+" "+y

x = x + y
y = x - y
x = x - y

Print x+" "+y
WaitKey
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: LaskuKaavoja

Post by Koodiapina »

Kahden tekijän kertolaskussa laskemaan eri arvoiset kertojat / kerrottavat:

Code: Select all

k1 * k2 = k1/x + k1*x
On hyvin harvinaista, että tälläistä tarvitsee, mutta itselläni tuli juuri sellainen tilanne vastaan esoteeristen kielten kuninkaan kanssa. Kaavassa k1 ja k2 ovat tekijät ja x on mikä tahansa luku, joka on arvoltaan alinta tekijää pienempi.

Ja tärkeämpi kaava olisi:

Code: Select all

k1 = k1/x
k2 = k2*x
nevssons
Devoted Member
Posts: 503
Joined: Sun Jan 13, 2008 5:02 pm

Re: LaskuKaavoja

Post by nevssons »

Kuinka saada selville, kuinka paljon on tietty prosenttimäärä tietystä luvusta:

Code: Select all

SeLuku*(Prosenttimäärä/100)
Tämä tuli keksittyä matikan kokeessa. (Valtakunnallisessa!)
EDIT:

Kolmas sadas viesti

Koodarina kohtalainen, henkilönä vittumainen
Image
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: LaskuKaavoja

Post by axu »

nevssons wrote:Kuinka saada selville, kuinka paljon on tietty prosenttimäärä tietystä luvusta:

Code: Select all

SeLuku*(Prosenttimäärä/100)
Tämä tuli keksittyä matikan kokeessa. (Valtakunnallisessa!)
Ala-asteellahan tämä taisi tulla vastaan :D Itsekin tykkään keksiä kovasti kokeissa noita aikaisemmin opittuja kaavoja, kun pää on kovin seula :)
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: LaskuKaavoja

Post by Koodiapina »

nevssons wrote:Kuinka saada selville, kuinka paljon on tietty prosenttimäärä tietystä luvusta:
Meillä opetettiin tuo seiskaluokalla ;) Varmaan tämäkin on peruskoulussa, mutta laitetaan silti:

Code: Select all

  Function Prosentit(Eka As Float,Toka As Float)
    Return Eka/(Eka+Toka)*100
  EndFunction 
Kertoo siis, monta prosenttia ensimmäinen parametri on kummankin parametrin summasta. CoolBasicissa ei ikävä kyllä voi laittaa kokonaisia taulukoita parametriksi, joten tämä versio toimii kahdella parametrilla. Toki voitaisiin käyttää ulkoista taulukkoa, mutta tuntuu melkoiselta purkalta :/

Käyttöesimerkki:

Code: Select all

  Dim Lehmät As Float
  Dim Kanat As Float
  Dim Osumat As Float
  Dim Laukaukset As Float

  Lehmät = 1597
  Kanat = 3849
  Osumat = 48
  Laukaukset = 57

  Print "Lehmiä on n. "+Int(Prosentit(Lehmät,Kanat))+"%"
  Print "Osumatarkkuus n. "+Int(Prosentit(Osumat,Laukaukset-Osumat))+"%"
  WaitKey 
  
  Function Prosentit(Eka As Float,Toka As Float)
    Return (Eka/(Eka+Toka))*100
  EndFunction 
nevssons
Devoted Member
Posts: 503
Joined: Sun Jan 13, 2008 5:02 pm

Re: LaskuKaavoja

Post by nevssons »

axu wrote:
nevssons wrote:Kuinka saada selville, kuinka paljon on tietty prosenttimäärä tietystä luvusta:

Code: Select all

SeLuku*(Prosenttimäärä/100)
Tämä tuli keksittyä matikan kokeessa. (Valtakunnallisessa!)
Ala-asteellahan tämä taisi tulla vastaan :D Itsekin tykkään keksiä kovasti kokeissa noita aikaisemmin opittuja kaavoja, kun pää on kovin seula :)
Meille tuota ei ole opetettu. :S Jouduin keksimään ite.
Meille on opetettu samalla perjaatteella mutta vaikeammin.
Koodarina kohtalainen, henkilönä vittumainen
Image
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: LaskuKaavoja

Post by axu »

Tyyliin prosentti on sadasosa? Tällä tiedolla pärjäsin ysin prosentti kokeesta ja arvosanaksi tuli 10++ :D <-- omahyväinen hymy!
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
Post Reply