Thrust in Box2D

Questions about the LÖVE API, installing LÖVE and other support related questions go here.
Forum rules
Before you make a thread asking for help, read this.
Post Reply
User avatar
Davidobot
Party member
Posts: 1226
Joined: Sat Mar 31, 2012 5:18 am
Location: Oxford, UK
Contact:

Thrust in Box2D

Post by Davidobot »

So, I have a square that I want to apply force to so that the force applied is always perpendicular to the base of the square. How would one accomplish this? See the diagram:
Image
PM me on here or elsewhere if you'd like to discuss porting your game to Nintendo Switch via mazette!
personal page and a raycaster
User avatar
vrld
Party member
Posts: 917
Joined: Sun Apr 04, 2010 9:14 pm
Location: Germany
Contact:

Re: Thrust in Box2D

Post by vrld »

Rotate the force vector according to the rotation of the shape: http://en.wikipedia.org/wiki/Rotation_m ... dimensions. In code:

Code: Select all

function rotate(rot, x,y)
    local s,c = math.sin(rot), math.cos(rot)
    return c*x - s*y, s*x + c*y
end
[shameless-plug]Or use hump.vector that includes this function.[/shameless-plug]
I have come here to chew bubblegum and kick ass... and I'm all out of bubblegum.

hump | HC | SUIT | moonshine
User avatar
chezrom
Citizen
Posts: 59
Joined: Tue May 28, 2013 11:03 pm
Location: France

Re: Thrust in Box2D

Post by chezrom »

Sorry vrld for your hump.vector library, but Box2D has this functions ...

You can use body:getWorldVector(local_x,local_y) => world_x,world_y to transform a vector is the body/local coordinate to the world coordinate.
The local vector is simple to determine because your square shape is always aligned with the axes of the local coordinates.

Also use body:getWorldPoint(local_x,local_y) to determine where you applicate your force (by default it is applied to the center of mass, that is different of the origin of the local coordinates).
User avatar
Davidobot
Party member
Posts: 1226
Joined: Sat Mar 31, 2012 5:18 am
Location: Oxford, UK
Contact:

Re: Thrust in Box2D

Post by Davidobot »

How would one use this with Body:applyForce?
PM me on here or elsewhere if you'd like to discuss porting your game to Nintendo Switch via mazette!
personal page and a raycaster
User avatar
chezrom
Citizen
Posts: 59
Joined: Tue May 28, 2013 11:03 pm
Location: France

Re: Thrust in Box2D

Post by chezrom »

For example :

Code: Select all

body:applyForce(body:getWorldVector(local_fx,local_fy))
The force is applied to the centre of mass, as show in your drawing.
You can have, if your thrust is directed down so the reaction force is up local_fx = 0 and local_fy= - gravity * factor
You must call applyForce at each update when the thrust is here.
User avatar
Davidobot
Party member
Posts: 1226
Joined: Sat Mar 31, 2012 5:18 am
Location: Oxford, UK
Contact:

Re: Thrust in Box2D

Post by Davidobot »

chezrom wrote:For example :

Code: Select all

body:applyForce(body:getWorldVector(local_fx,local_fy))
The force is applied to the centre of mass, as show in your drawing.
You can have, if your thrust is directed down so the reaction force is up local_fx = 0 and local_fy= - gravity * factor
You must call applyForce at each update when the thrust is here.
Thank you! Works flawlessly.
PM me on here or elsewhere if you'd like to discuss porting your game to Nintendo Switch via mazette!
personal page and a raycaster
Post Reply

Who is online

Users browsing this forum: Bing [Bot] and 5 guests