Ellipsin muotoinen törmäys

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Ellipsin muotoinen törmäys

Post by axu »

Eli minun pitäisi saada ellipsin muotoinen törmäys tai pikselintarkka törmäys NIIN, että saadaan törmäys kulma.
törmättävät asiat ovat joko viivoja(sijainnit tiedetään) tai sitten iso kuva, jonka voi myös vaihtoehtoisesti objektiksi laittaa.
eli ellipsin muotoinen törmäys jompaan kumpaan noista.(pitäis saada viikkokisa XV:hen :? )
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: Ellipsin muotoinen törmäys

Post by temu92 »

Rtfm, CollisionAngle tai GetAngle2
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: Ellipsin muotoinen törmäys

Post by axu »

niin, mitenkähän tuo collisionangle käy tuohon objectsoverlappiin? tätä minäkin pidin hyvänä vaihtoehtona muttakun ei onnistu koska collisionangle toimii vain cb:n oman törmäystunnistussysteemin kanssa, joka taasen ei tue pikselin tarkkaa törmäystä.
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: Ellipsin muotoinen törmäys

Post by axu »

Jaa löysinkin keinon :D nyt kehittelen realistista törmäystä, postaan tähän jos tulee onkelmia!
EDIT:

Noniin eli nyt pitäis saada piste menemään tietylle suoralle pisteen alkuperäisestä paikasta suoralle lähimpään kohtaan

ymmärsiköhän kukaan

EDIT:

Tähänkin keksin tyydyttävän ratkaisun. En sitä oikeaa, vaan tyydyttävän.

Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: Ellipsin muotoinen törmäys

Post by axu »

eipäs sittenkään. mikä vikanna, ei keksi itse

Code: Select all

Global _PTL_X,_PTL_Y
'DrawToWorld ON
Random:
l1x=Rand(400)'-200,200)
l1y=Rand(300)'-150,150)
l2x=Rand(400)'-200,200)
l2y=Rand(300)'-150,150)


Repeat
    px=MouseX()
    py=MouseY()
    PointToLine(px,py,l1x,l1y,l2x,l2y)
    px=_PTL_X
    py=_PTL_Y
    Line l1x,l1y,l2x,l2y
    Circle px-5,py+5,10
    Text 1,1,FPS()
    DrawScreen
    If KeyHit(cbKeySpace) Then Goto Random
Forever

Function PointToLine (px,py,l1x,l1y,l2x,l2y)
    LineA=GetAngle(l1x,l1y,l2x,l2y)
    Text 1,10,"Angle: "+LineA+" dist: "+PointToLineDist(px,py,l1x,l1y,l2x,l2y)
    py=py+Sin(LineA)*PointToLineDist(px,py,l1x,l1y,l2x,l2y)
    px=px+Cos(LineA)*PointToLineDist(px,py,l1x,l1y,l2x,l2y)

    _PTL_X=px
    _PTL_Y=pY
End Function

Function PointToLineDist (px#, py#, l1x#, l1y#, l2x#, l2y#)
    //Suoran yhtälö
    a# =  (l2y - l1y) / (l2x - l1x)
    b# = -1
    c# = -(l2y - l1y) / (l2x - l1x) * l1x + l1y
   
    //Etäisyys
    d# = Abs(a * px + b * py + c) / Sqrt(a * a + b * b)
   
    Return d
EndFunction
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: Ellipsin muotoinen törmäys

Post by Alligaattori »

En näe tuossa mitään ongelmaa, koska en tiedä mitä yrität saada aikaan. Kerro se, niin joku voinee auttaa.

Offtopic: Triplaposti :o
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: Ellipsin muotoinen törmäys

Post by axu »

niin elikkä selitin tämän tässä ylempänä: eli se piste(tai pallo) pitäisi saada pysymään siinä viivalla kokoajan, eli sen pitäisi mennä lähimpään kohtaan sitä alkuperäisestä sijainnistaan

Offtopic: itseasiassa kvintettipostaus jos editit lasketaan :shock:
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: Ellipsin muotoinen törmäys

Post by Alligaattori »

En nyt äkkiseltään keksi ratkaisua, mutta nukkumaan käydessä voin pähkäillä asiaa. Sillä lailla monet asiat ratkeavat. :) Laitan huomisaamuna avitusta, jos keksin jotakin.

Edittiä pukkaa: Keksin ratkaisun (huonon sellaisen, mutta toimivan) ongelmaan. Lähdetään hiiren sijaintipisteestä laskemaan ympyrää säteenä 0,1,2,3,4 jne. ja kehää käydään läpi aste kerrallaan. Jos pisteen koordinaatit täyttävät suoran yhtälön, piirretään siihen ympyrä ja hypätään silmukoista ulos. FPS oli noin 5...20 riippuen hiiren ja suoran etäisyydestä. Yritin saada lisävauhtia DLL:llä, mutta tuplamav iski enkä ole vielä löytänyt syytä. :(

Lisää edittiä: Keksinkin tätä kirjoittaessani paremman ratkaisun ja katson, toimiiko.
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: Ellipsin muotoinen törmäys

Post by axu »

Noniin minä kaavailin tässä aikaisemmin toista ratkaisua, joka osoittautui oikeaksi! Olin vain unohtanut laittaa tietyt muuttuhat floateiksi

Niin ja itse koodi:

Code: Select all

Global _PTL_X,_PTL_Y
'DrawToWorld ON
Random:
l1x=Rand(400)'-200,200)
l1y=Rand(300)'-150,150)
l2x=Rand(400)'-200,200)
l2y=Rand(300)'-150,150)

Repeat
    px=MouseX()
    py=MouseY()
    PointToLine(px,py,l1x,l1y,l2x,l2y)
    px=_PTL_X
    py=_PTL_Y
    Line l1x,l1y,l2x,l2y
    Line px,py,MouseX(),MouseY()
    Circle px-5,py-5,10
    Text 1,1,FPS()
    DrawScreen
    If KeyHit(cbKeySpace) Then Goto Random
Forever

Function PointToLine (px#,py#,l1x,l1y,l2x,l2y)
    LineA=-GetAngle(l1x,l1y,l2x,l2y)+90
    lastdist#=PointToLineDist(px,py,l1x,l1y,l2x,l2y)
    While PointToLineDist(px,py,l1x,l1y,l2x,l2y)>2
        If lastdist#<PointToLineDist(px,py,l1x,l1y,l2x,l2y) Then Exit
        lastdist#=PointToLineDist(px,py,l1x,l1y,l2x,l2y)
        py=py+Sin(LineA)
        px=px+Cos(LineA)
    Wend
    lastdist#=PointToLineDist(px,py,l1x,l1y,l2x,l2y)
    While PointToLineDist(px,py,l1x,l1y,l2x,l2y)>2
        If lastdist#<PointToLineDist(px,py,l1x,l1y,l2x,l2y) Then Exit
        lastdist#=PointToLineDist(px,py,l1x,l1y,l2x,l2y)
        py=py-Sin(LineA)
        px=px-Cos(LineA)
    Wend
    _PTL_X=px
    _PTL_Y=pY
End Function

Function PointToLineDist (px#, py#, l1x#, l1y#, l2x#, l2y#)
    //Suoran yhtälö
    a# =  (l2y - l1y) / (l2x - l1x)
    b# = -1
    c# = -(l2y - l1y) / (l2x - l1x) * l1x + l1y
   
    //Etäisyys
    d# = Abs(a * px + b * py + c) / Sqrt(a * a + b * b)
   
    Return d
EndFunction
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
Post Reply