← Back to team overview

yade-users team mailing list archive

Re: [Question #700199]: Surface area and overlap

 

Question #700199 on Yade changed:
https://answers.launchpad.net/yade/+question/700199

    Status: Open => Answered

Jan Stránský proposed the following answer:
The contactPoint is probably not a good idea for different radii..
Better use [3].

A complete working example:
###
O.bodies.append([
    sphere((1,2,3),4,fixed=True),
    sphere((4,5,6),3,fixed=True),
])

def computeCapSurface(body,interaction):
    radius = body.shape.radius
    surface = 4*pi*pow(radius,2)
    center = body.state.pos
    if interaction.id2 == body.id: id2 = interaction.id1
    else: id2 = interaction.id2
    body2 = O.bodies[id2]
    radius2 = body2.shape.radius
    center2 = body2.state.pos
    d = (center2-center).norm()
    d1 = (pow(d,2)-pow(radius2,2)+pow(radius,2)) / (2*d) # [3]
    print(radius,d,d1)
    capHeight = radius - d1 # [2]
    capSurface = 2*pi*radius*capHeight # [2]
    return capSurface

def computeSurfaceOfOneSphere(body):
    interactions = body.intrs() # [1]
    radius = body.shape.radius
    surface = 4*pi*pow(radius,2)
    capSurfaces = [computeCapSurface(body,interaction) for interaction in interactions]
    surfaceActual = surface - sum(capSurfaces)
    return surfaceActual

O.step()

surfaces = [computeSurfaceOfOneSphere(b) for b in O.bodies]
surfaceTotal = sum(surfaces)
###

Double check the math and equations, I give no warranty that they are
correct :-)

Cheers
Jan

[3] https://mathworld.wolfram.com/Circle-CircleIntersection.html

-- 
You received this question notification because your team yade-users is
an answer contact for Yade.