Tällainen ongelma... Täytyisi saada kuva liikkumaan puoli ympyrän muotoisesti kaaressa, mutta en muista että miten se taas tehtiinkään...se oli joku ihan yksinkertainen juttu, mutta muistikatkos iski jälleen..
Määritä kaaren keskipiste (X0, Y0) ja säde R, alkukulma a1 ja kulman muutos da.
a = a1 Do until a > a1 + 4 * Atn(1) X = X0 + R * Cos(a) Y = Y0 - R * Sin(a) 'laita hahmo paikkaan X, Y a = a + da doevents ' + mahdollinen viive Loop
Y:n lausekkeessa on - koska Y kasvaa oletuksena alaspäin. Do-loopin sijaan voi käyttää Timeriä nopeuden säätöön.
Ympyrässä saat sen liikkumaan sini- ja kosiniaalloilla:
x = paikka + säde * cos(alfa)
y = paikka + säde * sin(alfa)
alfanhan pitää olla jotain väliltä 0-2*pii
rajoitat vain alfaa 0-pii.
kasvatat alfaa piiksi ja sitten ruvet laskemaan sitä kun se saavuttaa piin. Piin saavuttamisen jälkeen lasket sen taas pikkuhiljaa nollaan.
Jos haluat sen liikkumaan eri kohdissa ympyrän kaarta, niin riittää kun muutat noita alfan rajoituksia.
Edit: Äh, setä oli nopeampi.
Nyt en tainnut oikeen tajuta sillä kuva ei liiku mihinkään.
Muistaisin että tolle olisi helpompikin koodi, mutta en muista mikä.. siinä oli ainakin For i=600 to 1000 step 0.2
Liike riippuu alustan scalemodesta ja arvoista X0, Y0, R, a1 ja da.
Ympyrän kehällä liikuttamiseen ei taida olla mitään siniä ja kosinia yksinkertaisempaa tapaa (ja ne on todella yksinkertaisia viimeistään lukion trigonometrian kurssin jälkeen)
Sitten vielä pekille: kyllähän se alfa voi olla mitä tahansa muutakin kuin 0-2*pii
Todellakin, kun tota on vähän aikaa käyttänyt niin se on selvempää ku pässinliha. Toi pekin selitys
x = paikka + säde * cos(alfa)
y = paikka + säde * sin(alfa)
on tosi hyvä. Hyvä kanssa muistaa että noi funkkarit käsittelee arvoja radiaaneina, asteet saa radeiksi näin: esim jos kulma on 123, niin käytä cosia näin: cos(123*pi/180) jossa pi on piin arvo.
Oon nyt aika pihalla taas näistä jutuista. En nyt oikeen tajua, että mikä näistä koodeista määrittää sen kuvan liikeradan. Eli laitanko näin
x=picture1.left+säde(esim 25)*cos(alfa)
y=picture1.top+25*sin(alfa)
??
Oon nyt ihan pihalla taas. :/
Jos joku vois vaikka näyttää sellasen koodin mihin on jo valmiiks sijoitettu arvot niin voisin tajuta, että mistä on kysymys...
Onko Picture1 kuva, jota liikutat ja liikutatko formilla vai jollain kuvakehyksellä? kerro myös mistä kohtaa haluat sen lähtevän ja minne tulevan ja kuinka päin ympyrää kierretään.
joo sen kuvan nimi on picture1 ja liikutan sitä formilla. se voi lähteä vaikka pisteestä (100,100) ja mennä pisteeseen (150,150) ja se liikkuu puoliympyrän muotoisesti. alhaalta ylös niinku tykkipelis...
Minä löysin ainakin koodivinkeista juuri tuollaisia vinkkejä.
tykkipelis.., en oo nähny mutta taitaakin mennä parabelin muotoista rataa. Silloin ei sinit ja kosinit käy.
Siis tarkoitan että muuten "samaan suuntaan" mutta vain puoliympyrän muotoisesti...
käyhän siihen sini ja kosini. Muutat vain molempien säteitä siten, että muodostuu ellipsi.
Sitten puolitat sen, noilla jo edellä esitetyillä keinoilla.
Jos tykkipeliä teet, niin suosittelisin soveltamaan fysiikan lakeja.
yritin jo... mutta kuva liikkuu vain yläviistoon.. :(
voisitko näyttää jonkun esimerkin, kun en oikeen muuten tajuu tätä juttuu.. Onko mitään keinoa jolloin ei tarvitsisi laitella noita alkukulmia ja kulmamuutoksia, meinaan menee jo vähän yli.
'nämä ihan alkuun(globaaleiksi) dim x as integer dim y as integer dim kulma as double Const kaaren_leveys as integer = 200 Const kaaren_korkeus as integer = 100 ' Tämä timeriin alkukulma += 0.1 if kulma > 2*pi then kulma = 0 x = cos(kulma) * kaaren_leveys y = sin(kulma) * kaaren_korkeus
Nyt sinun täytyy vain laittaa x ja y arvot pictureboxin leftiksi ja rightiksi.
Jos haluat valita vain osan tuosta kaaresta:
'tämä form_loadiin kulma = pi ' 180 asteissa ' Tämä timeriin kulma += 0.1 if kulma > 2*pi then kulma = pi ' nyt saat aikaan puoliellipsin x = cos(kulma) * kaaren_leveys y = sin(kulma) * kaaren_korkeus
Edit: ajatteluvirhe
Nyt sinun täytyy vain laittaa x ja y arvot pictureboxin leftiksi ja rightiksi.
siis tarkoitatko leftiksi ja topiksi?
Joo, sori typoa
mihin kohtaan koodia määrittelen sen että picture1 likkuu?
ja laitanko noihin cos(kulma) ja sin(kulma) jonkun aste luvun?
ps.onko toi kulma+=0.1 sama kun kulma=kulma+0.1 , kun vb ei hyväksy tollasta kun kulma+=0.1
edit:älä välitä tosta cos(kulma) jutusta jota kysyin huomasin just et siel lukeekin kulma=pi
Siis tossa ei kannata käyttää mitään sinejä ja kosineja, koska ammus lentää parabelin muotoista rataa. Jos ilman vastusta ei oteta huomioon, vaakanopeus on vakio ja pystynopeus muuttuu tasaisesti kiihtyen alaspäin painovoiman johdosta. Koodi on silloin todella yksinkertainen.
X = X + vx Y = Y + vy vy = vy + g
Tämä koodi toimii, kunhan formin ScaleMode on 3 eli Pixel ja formilla on Picture1-niminen kuvakehys. Koodi liikuttaa kuvaa puoliympyrän muotoisessa radassa, kuten alkuperäinen kysymys oli.
Const PII = 3.14159 Const KESKIX = 150 Const KESKIY = 100 Const LEVEYS = 100 Const KORKEUS = 100 Private Sub Form_Click() Dim i As Single, kx As Integer, ky As Integer kx = Picture1.Width / 2 'kuvan keskipiste (x) ky = Picture1.Height / 2 'kuvan keskipiste (y) 'kierto vasemmalta oikealle yläkautta For i = PII * 1.5 To PII * 0.5 Step -0.01 Picture1.Left = KESKIX + Sin(i) * LEVEYS - kx Picture1.Top = KESKIY + Cos(i) * KORKEUS - ky 'tähän voi laittaa sopivan hidasteen DoEvents Next End Sub
Aihe on jo aika vanha, joten et voi enää vastata siihen.