Banaani lähestyy, tunnen sen.
Oho, banaania tuli jo :D
Oho, banaania tuli jo :D
Jokainen saa uskoa mihin haluaa, mutta todellisuudessa painovoima on tätä:masteri wrote:voin opettaa ihan ilmatteekskin.
Painovoima on sellanen jumalan luoma juttu ettei ihmiset pääsis taivaaseen niin helposti.
jumala ei nääs tykkää että sitä häiritään.
ilman painovoimaa ihmiset lentäis avaruuteen.
massa on olemassa.
palvokaa mua.
Jos saisin kerran luvan oikeasti modettaa nii, sanoisin vaan että tääl ei puhuta ny uskosta, vaan fysiikasta, gravitaatiosta! Laskennasta! Jos yrität CB:tä saada toimimaan uskon voimalla passittaisin mielisairaalaan, tuntuisi pikkaisen toivottomalta! En siis tarkoita millään pahalla. mutta uskon asiat ja fysiikka on ihan eri asia! (Toivottavasti oikeat modet ei ota nokkiinsa...) Ja jos yrittää olla hauska nii menkööt jollekkin vitsien vääntö sivulle... Jos kellään ei ole mitään asiasta mainintaa niin voitaisiinko me ystävällisesti jatkaa aihetta? (Otin ohjat käsiin pahemman kerran, mutta toivon, että jotkut ymmärtäisivät, kuinka paljon tämä aihe voi kiinnostaa muita... Anteeksi nyt vielä kerran. )elmo123 wrote:Jokainen saa uskoa mihin haluaa, mutta todellisuudessa painovoima on tätä:masteri wrote:voin opettaa ihan ilmatteekskin.
Painovoima on sellanen jumalan luoma juttu ettei ihmiset pääsis taivaaseen niin helposti.
jumala ei nääs tykkää että sitä häiritään.
ilman painovoimaa ihmiset lentäis avaruuteen.
massa on olemassa.
palvokaa mua.
Avaruudessa on jatkuvasti kasvavaa painotonta tilaa. Kappaleet, joilla on iso massa, vetävät kevyempiä kappaleita puoleensa. Koska olemme maapalloon massassa verrattuna yhtä kuin muurahainen kuutiodesimetrin kokoisen neutronitähden rinnalla, menemme jatkuvasti kohti maapallon keskipistettä.
Emme vajoa sulaan laavaan, koska kova maa tulee vastaan. Sama kuin petaisit petisi, ottaisit peiton pois, pistäisit lakanalle metallikuulan ja pistäisit vierelle eripainoisen metallikuulan. Kevyempi menee lakanalla aina kohti painavampaa, kuten avaruudessa(Tämä kokeilu ei toimi, jos sinulla ei ole sängyssäsi patjaa lainkaan).
Miksi meidän pitäisi palvoa sinua, kun kerran luotat enemmän uskontoon kuin tieteeseen?
Ei voi, vielä. Eikä varmaan hetkeen aikaan. Mutta kyllä tämä tästä..Milloin tämän kirjaston voisi ladata, vai voiko sitä jo?
Näyttää niiin siistiltä
Tarkoitus olisi. Sen verran pitää itse osata, että kertoo kappaleiden jotain ominaisuuksia, kuten tiheyden, kitka- ja kimmoisuuskertoimet kahden kappaleen välille jne. Myös (alkuvaiheessa ainakin) pitää myös polygonien kärkipisteet määritellä kuvan keskipisteen suhteen.Kai tästä tulee sentään semmoinen, että perus CB:läinenkin osaa käyttää? Noi termit kuulostivat nimittäin melko hurjilta O_o
Sly_Jack0: LOL
eli saadaan että I = ∆p = m∆v
Code: Select all
//Polygonidemo by SPuntte
//©2008
//Tyyppikokoelma monikulmion kärkipisteille
Type VERTEX
//paikka painopisteen suhteen
Field cX#
Field cY#
//osoitin seuraavaan
Field nextID%
//järjestysluku
Field n%
EndType
Global nGon As Integer
Global cntrX#, cntrY#, orient# As Float
//Montako kulmaa
nGon = 8
//Keskimääräinen "säde"
nGonRadius = 100
//Väliaikaisdataa varten
Dim IDtmp(nGon) As Integer
Dim rTmp(1,nGon) As Float
//Luodaan monikulmio
initGon(nGonRadius)
cntrX = 0
cntrY = 0
SCREEN 800, 600, 0, 1
Repeat
Color 255, 255, 255
Text 5, 5, "Painopisteen X-koordinaatti = " + cntrX
Text 5, 18, "Painopisteen Y-koordinaatti = " + cntrY
Text 5, 31, "Kierokulma = " + orient
Text 5, 44, "Monikulmion ala = " + nGonArea() + " pikseliä"
Text 5, 580, "FPS: " + FPS()
cntrX = cntrX + KeyDown(cbKeyD) - KeyDown(cbKeyA)
cntrY = cntrY + KeyDown(cbKeyW) - KeyDown(cbKeyS)
orient = WrapAngle(orient + LeftKey() - RightKey())
If KeyHit(201) And nGon < 15 Then
nGon = nGon + 1
resetGon(nGonRadius)
ElseIf KeyHit(209) and nGon > 3 Then
nGon = nGon - 1
resetGon(nGonRadius)
ElseIf KeyHit(cbKeySpace) Then
resetGon(nGonRadius)
EndIf
drawGon()
DrawScreen
Forever
//Pyyhkii vanhan monikulmion ja luo uuden
Function resetGon(r#)
ClearArray ON
ReDim IDtmp(nGon) As Integer
ReDim rTmp(1,nGon) As Float
For vx.VERTEX = Each VERTEX
Delete vx
Next vx
//vanha sijainti talteen
tmpX# = cntrX
tmpY# = cntrY
initGon(r#)
cntrX = tmpX
cntrY = tmpY
EndFunction
//Alustaa monikulmion
Function initGon(r#)
//Luodaan satunnaisesti pyydetty mkäärä kärkipisteitä
For i = 1 To nGon
vx.VERTEX = New(VERTEX)
vx\N% = i
aTmp# = Float(i * 360.0/nGon) + Rnd(-15, 15)
rTmp# = r# + Rnd(-0.5*r#, 0.5*r#)
vx\cX# = Cos(aTmp#) * rTmp#
vx\cY# = Sin(aTmp#) * rTmp#
IDtmp(i) = ConvertToInteger(vx)
Next i
//sisällytetään jokaiseen osoitin seuraavaan kärkipisteeseen
For vx.VERTEX = Each VERTEX
tmpNext% = vx\n% + 1
If tmpNext% > nGon Then tmpNext% = 1
vx\nextID% = IDtmp(tmpNext%)
Next vx
//Lasketaan painopiste
area# = nGonArea()
cntrX = nGonCentroidX(area#)
cntrY = nGonCentroidY(area#)
//Korjataan kärkipisteiden koordinaatit, kun painopiste on tiedossa
For vx.VERTEX = Each VERTEX
vx\cX# = vx\cX# - cntrX
vx\cY# = vx\cY# - cntrY
Next vx
EndFunction
//Piirtää monikulmion
Function drawGon()
//Painopiste
Color 0, 255, 0
Dot WXtoSX(cntrX), WYtoSY(cntrY)
Circle WXtoSX(cntrX - 3), WYtoSY(cntrY + 3), 7, 0
For vx.VERTEX = Each VERTEX
vNext.VERTEX = ConvertToType(vx\nextID%)
//särmä
Color 128, 128, 128
Line WXtoSX(cntrX + RotatedX(vx\cX#, vx\cY#, orient)), WYtoSY(cntrY + RotatedY(vx\cX#, vx\cY#, orient)), WXtoSX(cntrX + RotatedX(vNext\cX#, vNext\cY#, orient)), WYtoSY(cntrY + RotatedY(vNext\cX#, vNext\cY#, orient))
//kärkipiste
Color 0, 255, 255
Dot WXtoSX(cntrX + RotatedX(vx\cX#, vx\cY#, orient)), WYtoSY(cntrY + RotatedY(vx\cX#, vx\cY#, orient))
Dot WXtoSX(cntrX + RotatedX(vNext\cX#, vNext\cY#, orient)), WYtoSY(cntrY + RotatedY(vNext\cX#, vNext\cY#, orient))
Next vx
EndFunction
//Laskee itseään leikkaamattoman n-kulmion pinta-alan
Function nGonArea()
result# = 0
//Taulukoidaan vektorit, jotta niihin päästään helposti käsiksi for-silmukasta
For vx.VERTEX = Each VERTEX
rTmp(0, vx\n%) = vx\cX#
rTmp(1, vx\n%) = vx\cY#
Next vx
//A = 1/2 i=1|Summa|n {x[i]y[i+1] - x[i+1]y[i]}
//missä
//x(n+1) = x(1), y(n+1) = y(1)
For i = 1 To nGon
tmpNext% = i + 1
If tmpNext% > nGon Then tmpNext% = 1
result# = result# + (rTmp(0, i) * rTmp(1, tmpNext) - rTmp(0, tmpNext) * rTmp(1, i))
Next i
Return Abs(0.5 * result#)
EndFunction
//Laskee itseään leikkaamattoman n-kulmion painopisteen x-koordinaatin, kun kyseisen monikulmion ala tunnetaan
Function nGonCentroidX(area#)
result# = 0
//Taulukoidaan vektorit, jotta niihin päästään helposti käsiksi for-silmukasta
For vx.VERTEX = Each VERTEX
rTmp(0, vx\n%) = vx\cX#
rTmp(1, vx\n%) = vx\cY#
Next vx
//x' = 1/6A i=1|Summa|n {(x[i] + x[i+1])(x[i]y[i+1] - x[i+1]y[i])}
//missä
//x(n+1) = x(1), y(n+1) = y(1)
For i = 1 To nGon
tmpNext% = i + 1
If tmpNext% > nGon Then tmpNext% = 1
result# = result# + (rTmp(0, i) + rTmp(0, tmpNext))*(rTmp(0, i) * rTmp(1, tmpNext) - rTmp(0, tmpNext) * rTmp(1, i))
Next i
If area# <> 0 Then
Return result#/(6.0*area#)
EndIf
EndFunction
Function nGonCentroidY(area#)
result# = 0
//Taulukoidaan vektorit, jotta niihin päästään helposti käsiksi for-silmukasta
For vx.VERTEX = Each VERTEX
rTmp(0, vx\n%) = vx\cX#
rTmp(1, vx\n%) = vx\cY#
Next vx
//y' = 1/6A i=1|Summa|n {(y[i] + y[i+1])(x[i]y[i+1] - x[i+1]y[i])}
//missä
//x(n+1) = x(1), y(n+1) = y(1)
For i = 1 To nGon
tmpNext% = i + 1
If tmpNext% > nGon Then tmpNext% = 1
result# = result# + (rTmp(1, i) + rTmp(1, tmpNext))*(rTmp(0, i) * rTmp(1, tmpNext) - rTmp(0, tmpNext) * rTmp(1, i))
Next i
If area# <> 0 Then
Return result#/(6.0*area#)
EndIf
EndFunction
//Palauttaa vektorin x#i + y#j uuden x-komponentin, kun vektoria kierretään phi# astetta
Function rotatedX(x#, y#, phi#)
Return x# * Cos(phi#) - y# * Sin(phi#)
EndFunction
//Palauttaa vektorin x#i + y#j uuden Y-komponentin, kun vektoria kierretään phi# astetta
Function rotatedY(x#, y#, phi#)
Return x# * Sin(phi#) + y# * Cos(phi#)
EndFunction
//Muunnos karteesisesta koordinaatistosta ikkunan koordinaatistoon
Function WXtoSX(objX)
Return objX+ScreenWidth()/2.0-CameraX()
EndFunction
Function WYtoSY(objY)
Return -objY+ScreenHeight()/2.0+CameraY()
EndFunction
Tänks. Siinä yritin kommentteihin laittaa sitä kaavaa muttei ole mikään ihme, jos sitä ei tajua, kun ilmaisumuoto on niin epäselvä. Wikipediasta löytyy lisätietoa aiheesta.Grandi wrote:Hienoa settiä taas kerran. En kyllä ymmärtänyt noista laskuista mitään, mutta hyvin näyttää systeemi toimivan, vaikka joudut ilmeisesti koodaamaan osin purkkaa.
Duh, tuo ala on vain laskennallinen arvo. Todellinen pinta-ala vaihtelee monikulmion asennon mukaan. Kun laskuissa ja muutenkin koodissa yksikkönä on pikseli, päätin sitten lätkäistä sen tohonkin.Grandi wrote:Sellanen kyllä pisti silmään, että miten kummassa tuolla voi olla kuvio, jonka ala on 20630.9 pikseliä? Kun ei ainakaan minun näytössäni ole kuin kokonaisia pikseleitä
Toinen mahdollinen toteutustapa olisi muistipalat (itse olen todennut toimiviksi), mutta niiden kanssa koodista tulee lähes väkisin melko vaikeaselkoista.SPuntte wrote:ainoa toteutustapa sille ovat Tyyppi-instanssit, jotka minun kokemukseni mukaan ovat herkkiä mysteerisille MAVeille.
Code: Select all
//Jos kappale on ruudun ulkopuolella, poistetaan nykyinen ja luodaan uusi
Function outOfWindowCheck(rBodyID%)
rB.RIGID_BODY = ConvertToType(rBodyID%)
tmpX# = getCompX(rB\posID%)
tmpY# = getCompY(rB\posID%)
bX# = SCRW/2 + 100
bY# = SCRH/2 + 100
If (tmpX# > bX#) Or (tmpX# < -bX#) Or (tmpY# > bY#) Or (tmpY# < -bY#) Then
deleteBody(rB\ID%)
rB.RIGID_BODY = ConvertToType(initBody(Rand(MINV,MAXV), Rnd(MINR, MAXR)))
EndIf
Return rB\ID%
EndFunction
Code: Select all
//Jos kappale on ruudun ulkopuolella, poistetaan nykyinen ja luodaan uusi
Function outOfWindowCheck(rBodyID%)
rB.RIGID_BODY = ConvertToType(rBodyID%)
tmpX# = getCompX(rB\posID%)
tmpY# = getCompY(rB\posID%)
bX# = SCRW/2 + 100
bY# = SCRH/2 + 100
If (tmpX# > bX#) Or (tmpX# < -bX#) Or (tmpY# > bY#) Or (tmpY# < -bY#) Then
setCompX(rB\posID%, 0)
setCompY(rB\posID%, 0)
EndIf
Return rB\ID%
EndFunction