how to destroy a physics joint?

i have been playing with the fantastic codea for a couple months and this is my first communication on the forum.
First of all my complements to TTL for a great job!

For the game i am working on i would like to be able to destroy a joint between two bodies. Is this possible?

Here’s code that I posted in another discussion. I added code to destroy one of the joints when you do a double tap. Just run the program and when you’re ready, double tap the screen.

EDIT1: Changed and reposted the program.
EDIT2: Changed the program again to keep the line and joint circle after breaking the joint.
EDIT3: Changed the program again for a more realistic joint break.



supportedOrientations(PORTRAIT)
displayMode(FULLSCREEN)

function setup()
    dest=false
    c1 = physics.body(CIRCLE,0)
    c1.x = 400
    c1.y = 1000
    c1.type = STATIC    
    c2 = physics.body(CIRCLE,25)
    c2.x = 200
    c2.y = 900  
    c2.sensor=true  
    c3 = physics.body(CIRCLE, 25)
    c3.x = 500
    c3.y = 950  
    c3.sensor=true  
    c4 = physics.body(CIRCLE, 25)
    c4.x = 300
    c4.y = 850  
    c4.sensor=true  
    p1=physics.body(POLYGON,vec2(-10,25),vec2(-10,-25),vec2(10,-25),vec2(10,25)) 
    p1.x=400
    p1.y=850 
    p1.sensor=true  
    joint1 = physics.joint(REVOLUTE,c1,c2,c1.position)
    joint2 = physics.joint(REVOLUTE, c2, c3,vec2(c2.x,c2.y))  
    joint3 = physics.joint(REVOLUTE, c3, c4,vec2(c3.x,c3.y)) 
    joint4 = physics.joint(REVOLUTE, c4, p1,vec2(c4.x,c4.y))           
end

function draw()
    background(40, 40, 50)
    fill(255)
    strokeWidth(2)    
    line(c1.x,c1.y,c2.x,c2.y)
    line(c2.x,c2.y,c3.x,c3.y) 
    if not dest then
        line(c3.x,c3.y,c4.x,c4.y) 
    else
        line(c5.x,c5.y,c4.x,c4.y)
        ellipse(c5.x,c5.y,8)
    end
    line(c4.x,c4.y,p1.x,p1.y)           
    ellipse(c1.x,c1.y,8)        
    ellipse(c2.x,c2.y,8) 
    ellipse(c3.x,c3.y,8)  
    ellipse(c4.x,c4.y,8)  
    translate(p1.x,p1.y)
    rotate(p1.angle)
    points = p1.points
    for j = 1,#points do
        a = points[j]
        b = points[(j % #points)+1]
        line(a.x, a.y, b.x, b.y)    
    end
end

function touched(t)
    if t.state==BEGAN and t.tapCount==2 then
        dest=true 
        c5=physics.body(CIRCLE,25)
        c5.x=c3.x
        c5.y=c3.y
        c5.linearVelocity=c3.linearVelocity
        joint5 = physics.joint(REVOLUTE, c5, c4,vec2(c5.x,c5.y)) 
        joint3:destroy()
    end
end


Updated the above program to keep the line, joint circle and a more realistic joint break.

Perfect. Thank you very much!

Reading the description of reactionForce and reactionTorque of physics.joint, it seems that it is possible to break joints by applying forces to bodies rather than programmaticaly, but after trying quite a few things I cannot get it to work. Does anyone has a short working example, please?