Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re: Some simple 2d game-related maths questions

by moritz (Cardinal)
on Aug 27, 2008 at 21:29 UTC ( #707321=note: print w/ replies, xml ) Need Help??


in reply to Some simple 2d game-related maths questions

First of all the game is quite nice, but there's a simple method with which you can win every level pretty fast, which kind of kills the fun as it is now.

How can I tell whether the circular sprit intersects with an arbitrary line.

I don't know how familiar you are with linear algebra, it really helps ;-)

(Update: When I talk about "points", I really mean "position vectors to points". Thanks FunkyMonk)

I'll call the end points of your line A and B, the center of your sprite M, the point on the line which is the closest to M is called C (all those are vectors), the radius of the sprite is r (a scalar value).

Since C is on the line between A and B, it must be expressible in the form A + x * (B-A). Since it's the closest point to M, the connection line from C to M is perpendicular to the original line, or as a formula:

(B-A) . (M-C) = 0 or (B-A) . (M - A - x * (B-A)) = 0 # (that's a scalar product)

The only unknown part in this equation is x, which you can calculate from that equation, but to which I'm too tired at the moment.

If 0 <= x <= 1 and |M - C| < r, then it circle touches or intersects the line.

Likewise if |M-A| <= r or |M-B| <= r it also touches or intersects. In all other case it doesn't.

To get a realistic bouncing behaviour, the angle between (dx, dy) and (M-C) after the bounce has to be negative of what it was before the bounce.


Comment on Re: Some simple 2d game-related maths questions
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://707321]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (5)
As of 2015-07-30 01:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (269 votes), past polls