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: 1220
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
My projects: Raycaster, love.js v11.3 port
itch page: link
My website: link
My library: LovelyMoon
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: 1220
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?
My projects: Raycaster, love.js v11.3 port
itch page: link
My website: link
My library: LovelyMoon
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: 1220
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.
My projects: Raycaster, love.js v11.3 port
itch page: link
My website: link
My library: LovelyMoon
Post Reply

Who is online

Users browsing this forum: No registered users and 11 guests