I have been making many 2D games recently, and they all are sidescrollers, so they have collisions. I develop my games with C++ and the SDL library. The way I handle collisions right now is I go through each entity I have in my game and check if their SDL_Rect collides with eachother. But I've also run into the problem of getting exact collisions. I got a way of creating MANY SDL_Rects for a single sprite for per-pixel collisions.
So, I wanted to ask, what is the best way of handling collisions, but not using too much memory at the same time? And making sure the collisions are realistic or not?
Thanks.
collisions
From what I've seen hitboxes are pretty much the way to go for 2D sidescrollers. Check out this video
it shows hitboxes for Kirby in Super Smash Bros Melee, a very high end game which still uses hit boxes. The way to make the collisions seem realistic would probably be to create physics which push the things apart from each other when they collide which would look pretty natural.
Yeah, I have the "pushing away" from eachother part down. So basically, the collision box for a, lets say a collission box for a sword for meta knight, is bigger than really is?
[color="#333333"][font="arial, sans-serif"]I'm doing[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]a[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]collision detector[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]based on[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]line segments.[/font]
[color="#333333"][font="arial, sans-serif"]For a line[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]'r[/font][color="#333333"][font="arial, sans-serif"]' between[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]two[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]points[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"](A and[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]B[/font][color="#333333"][font="arial, sans-serif"])[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]we have:[/font][color="#333333"][font="arial, sans-serif"]Being[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]'A'[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]the first point and[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]AB[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]('[/font][color="#333333"][font="arial, sans-serif"]B'[/font][color="#333333"][font="arial, sans-serif"]-[/font][color="#333333"][font="arial, sans-serif"]'A[/font][color="#333333"][font="arial, sans-serif"]'[/font][color="#333333"][font="arial, sans-serif"]) the[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]direction vector[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]of the line[/font][color="#333333"][font="arial, sans-serif"].[/font]
[font="arial, sans-serif"] [/font][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]If the[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]alpha value to[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]a[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]tu[/font][color="#333333"][font="arial, sans-serif"]ple[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"](x[/font][color="#333333"][font="arial, sans-serif"], y[/font][color="#333333"][font="arial, sans-serif"])[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]is greater than or[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]equal to zero[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]and less than or[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]equal to[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]one[/font][color="#333333"][font="arial, sans-serif"], the line[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]r[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]becomes[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]a[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]line segment [/font][color="#333333"][font="arial, sans-serif"]bounded[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]by A and[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]B.[/font]
[color="#333333"][font="arial, sans-serif"]Adding[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]another[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]line segment,[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]the value[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]of the tuple[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]([/font][color="#333333"][font="arial, sans-serif"]x,[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]y) that[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]gives[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]solution to[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]the two equations[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]define[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]the collision point[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"](called[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]P[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]in the drawing)[/font][color="#333333"][font="arial, sans-serif"].[/font]
[color="#333333"][font="arial, sans-serif"] [/font]
[color="#333333"][font="arial, sans-serif"]
[/font]
[font="arial, sans-serif"] [/font]
[font="arial, sans-serif"][color="#333333"]P = (x,y)[/font]
[font="arial, sans-serif"] [/font]
[color="#333333"][font="arial, sans-serif"]([/font][color="#333333"][font="arial, sans-serif"]matching[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]'r[/font][color="#333333"][font="arial, sans-serif"]' and '[/font][color="#333333"][font="arial, sans-serif"]s[/font][color="#333333"][font="arial, sans-serif"]' to find[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]the common point[/font][color="#333333"][font="arial, sans-serif"])[/font][color="#333333"][font="arial, sans-serif"].[/font]
[font="arial, sans-serif"][color="#333333"]rx = sx[/font]
[font="arial, sans-serif"][color="#333333"]ry = sy[/font]
[font="arial, sans-serif"][color="#333333"]rx = Ax alpha*(ABx)[/font]
[font="arial, sans-serif"][color="#333333"]sx =Cx beta*(CDx)[/font]
[font="arial, sans-serif"][color="#333333"]ry = Ay alpha*(ABy)[/font]
[font="arial, sans-serif"][color="#333333"]sy =Cy beta*(CDy)[/font]
[font="arial, sans-serif"] [/font]
[font="arial, sans-serif"][color="#333333"]Ax alfa*(ABx) = Cx beta*(CDx)[/font]
[font="arial, sans-serif"][color="#333333"]Ay alfa*(ABy) = Cy beta*(CDy)[/font][color="#333333"][font="arial, sans-serif"]As[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]all the values ??are[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]listed[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]in[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]the runtime,[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]we can find[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]the alpha[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]or beta[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]in the equation[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]and find[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]the values ??([/font][color="#333333"][font="arial, sans-serif"]from the point of[/font][color="#333333"][font="arial, sans-serif"]collision)[/font][color="#333333"][font="arial, sans-serif"].[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]If[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]0[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]<[/font][color="#333333"][font="arial, sans-serif"]=[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]alpha[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]<[/font][color="#333333"][font="arial, sans-serif"]=[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]1[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]and 0 <[/font][color="#333333"][font="arial, sans-serif"]=[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]beta[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]<[/font][color="#333333"][font="arial, sans-serif"]=[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]1[/font][color="#333333"][font="arial, sans-serif"], there will be[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]a[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]collision point[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]([/font][color="#333333"][font="arial, sans-serif"]to discover [/font][color="#333333"][font="arial, sans-serif"]the collision point,[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]just[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]a[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]replace alpha or beta in an equation).[/font]
[color="#333333"][font="arial, sans-serif"] [/font]
[color="#333333"][font="arial, sans-serif"]To help[/font][color="#333333"][font="arial, sans-serif"],[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]here's[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]the C++ code that[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]I'm[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]using[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"](the solutions[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]have a small[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]bug[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]when the[/font][color="#333333"][font="arial, sans-serif"] lines[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]are parallels ([/font][color="#333333"][font="arial, sans-serif"]ABX[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]/[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]==[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]Aby[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]CDx[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]/[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]CDy[/font][color="#333333"][font="arial, sans-serif"])[/font][color="#333333"][font="arial, sans-serif"], but it's very easy to fix).[/font]
[color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]
[/font]
[color="#333333"][font="arial, sans-serif"] [/font]
[font="arial, sans-serif"][color="#333333"]Thats it![/font]
[font="arial, sans-serif"][color="#333333"]I hope that i have helped and sorry for my horrible english xD.[/font]
[color="#333333"][font="arial, sans-serif"]For a line[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]'r[/font][color="#333333"][font="arial, sans-serif"]' between[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]two[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]points[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"](A and[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]B[/font][color="#333333"][font="arial, sans-serif"])[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]we have:[/font][color="#333333"][font="arial, sans-serif"]Being[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]'A'[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]the first point and[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]AB[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]('[/font][color="#333333"][font="arial, sans-serif"]B'[/font][color="#333333"][font="arial, sans-serif"]-[/font][color="#333333"][font="arial, sans-serif"]'A[/font][color="#333333"][font="arial, sans-serif"]'[/font][color="#333333"][font="arial, sans-serif"]) the[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]direction vector[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]of the line[/font][color="#333333"][font="arial, sans-serif"].[/font]
[font="arial, sans-serif"] [/font][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]If the[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]alpha value to[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]a[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]tu[/font][color="#333333"][font="arial, sans-serif"]ple[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"](x[/font][color="#333333"][font="arial, sans-serif"], y[/font][color="#333333"][font="arial, sans-serif"])[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]is greater than or[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]equal to zero[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]and less than or[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]equal to[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]one[/font][color="#333333"][font="arial, sans-serif"], the line[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]r[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]becomes[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]a[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]line segment [/font][color="#333333"][font="arial, sans-serif"]bounded[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]by A and[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]B.[/font]
[color="#333333"][font="arial, sans-serif"]Adding[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]another[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]line segment,[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]the value[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]of the tuple[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]([/font][color="#333333"][font="arial, sans-serif"]x,[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]y) that[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]gives[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]solution to[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]the two equations[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]define[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]the collision point[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"](called[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]P[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]in the drawing)[/font][color="#333333"][font="arial, sans-serif"].[/font]
[color="#333333"][font="arial, sans-serif"] [/font]
[color="#333333"][font="arial, sans-serif"]
[/font]
[font="arial, sans-serif"] [/font]
[font="arial, sans-serif"][color="#333333"]P = (x,y)[/font]
[font="arial, sans-serif"] [/font]
[color="#333333"][font="arial, sans-serif"]([/font][color="#333333"][font="arial, sans-serif"]matching[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]'r[/font][color="#333333"][font="arial, sans-serif"]' and '[/font][color="#333333"][font="arial, sans-serif"]s[/font][color="#333333"][font="arial, sans-serif"]' to find[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]the common point[/font][color="#333333"][font="arial, sans-serif"])[/font][color="#333333"][font="arial, sans-serif"].[/font]
[font="arial, sans-serif"][color="#333333"]rx = sx[/font]
[font="arial, sans-serif"][color="#333333"]ry = sy[/font]
[font="arial, sans-serif"][color="#333333"]rx = Ax alpha*(ABx)[/font]
[font="arial, sans-serif"][color="#333333"]sx =Cx beta*(CDx)[/font]
[font="arial, sans-serif"][color="#333333"]ry = Ay alpha*(ABy)[/font]
[font="arial, sans-serif"][color="#333333"]sy =Cy beta*(CDy)[/font]
[font="arial, sans-serif"] [/font]
[font="arial, sans-serif"][color="#333333"]Ax alfa*(ABx) = Cx beta*(CDx)[/font]
[font="arial, sans-serif"][color="#333333"]Ay alfa*(ABy) = Cy beta*(CDy)[/font][color="#333333"][font="arial, sans-serif"]As[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]all the values ??are[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]listed[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]in[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]the runtime,[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]we can find[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]the alpha[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]or beta[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]in the equation[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]and find[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]the values ??([/font][color="#333333"][font="arial, sans-serif"]from the point of[/font][color="#333333"][font="arial, sans-serif"]collision)[/font][color="#333333"][font="arial, sans-serif"].[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]If[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]0[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]<[/font][color="#333333"][font="arial, sans-serif"]=[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]alpha[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]<[/font][color="#333333"][font="arial, sans-serif"]=[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]1[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]and 0 <[/font][color="#333333"][font="arial, sans-serif"]=[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]beta[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]<[/font][color="#333333"][font="arial, sans-serif"]=[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]1[/font][color="#333333"][font="arial, sans-serif"], there will be[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]a[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]collision point[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]([/font][color="#333333"][font="arial, sans-serif"]to discover [/font][color="#333333"][font="arial, sans-serif"]the collision point,[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]just[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]a[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]replace alpha or beta in an equation).[/font]
[color="#333333"][font="arial, sans-serif"] [/font]
[color="#333333"][font="arial, sans-serif"]To help[/font][color="#333333"][font="arial, sans-serif"],[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]here's[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]the C++ code that[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]I'm[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]using[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"](the solutions[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]have a small[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]bug[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]when the[/font][color="#333333"][font="arial, sans-serif"] lines[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]are parallels ([/font][color="#333333"][font="arial, sans-serif"]ABX[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]/[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]==[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]Aby[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]CDx[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]/[/font][color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]CDy[/font][color="#333333"][font="arial, sans-serif"])[/font][color="#333333"][font="arial, sans-serif"], but it's very easy to fix).[/font]
[color="#333333"][font="arial, sans-serif"] [/font][color="#333333"][font="arial, sans-serif"]
bool Juncao::colisaoSegmento(Coord a, Coord b, Coord c, Coord d){
b.set(b.getX()-a.getX(),b.getY()-a.getY(),0);
d.set(d.getX()-c.getX(),d.getY()-c.getY(),0);
float alfa,beta;
if(b.getX()==0){
if(d.getY() == 0){
alfa = (c.getY()-a.getY())/b.getY();
beta = (a.getX()-c.getX())/d.getX();
} else{
alfa = (((a.getX()-c.getX())/(d.getX()*d.getY()))+c.getY()-a.getY())/d.getY();
beta = (alfa*b.getY()-c.getY()-a.getY())/d.getY();
}
} else{
float j = d.getY();
float i = (d.getX()*b.getY())/b.getX();
float k = a.getY()+(b.getY()*c.getX())/b.getX();
float l = c.getY() + (a.getX()*b.getY())/b.getX();
beta = (k-l)/(j-i);
alfa = (c.getX()+beta*d.getX()-a.getX())/b.getX();
}
if(alfa >=0 && alfa <=1)
if(beta >=0 && beta <=1)
return true;
return false;
}
[/font]
[color="#333333"][font="arial, sans-serif"] [/font]
[font="arial, sans-serif"][color="#333333"]Thats it![/font]
[font="arial, sans-serif"][color="#333333"]I hope that i have helped and sorry for my horrible english xD.[/font]
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement