Ellipsin muotoinen törmäys
Ellipsin muotoinen törmäys
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 )
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 )
Re: Ellipsin muotoinen törmäys
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ä.
Re: Ellipsin muotoinen törmäys
Jaa löysinkin keinon 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.
Re: Ellipsin muotoinen törmäys
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
-
- Active Member
- Posts: 135
- Joined: Fri Mar 07, 2008 8:49 pm
Re: Ellipsin muotoinen törmäys
En näe tuossa mitään ongelmaa, koska en tiedä mitä yrität saada aikaan. Kerro se, niin joku voinee auttaa.
Offtopic: Triplaposti
Offtopic: Triplaposti
Re: Ellipsin muotoinen törmäys
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
Offtopic: itseasiassa kvintettipostaus jos editit lasketaan
-
- Active Member
- Posts: 135
- Joined: Fri Mar 07, 2008 8:49 pm
Re: Ellipsin muotoinen törmäys
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.
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.
Re: Ellipsin muotoinen törmäys
Noniin minä kaavailin tässä aikaisemmin toista ratkaisua, joka osoittautui oikeaksi! Olin vain unohtanut laittaa tietyt muuttuhat floateiksi
Niin ja itse koodi:
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