yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #26914
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.