Void Ratio from array of spheres.

Hello,
I have a matrix which contains x, y, z coordinates, as well as the radius of each sphere. Sphere boundaries are rigid so that the shortest distance between any two adjacent spheres is the sum of their respective radii. The spheres are all mixed together and are of varying radii. I would like to calculate the void ratio of this mixture; or the ratio of the volume of void space to the volume of solid objects (spheres).
For example, the first three columns of this matrix are xyz coordinates, respectivly, and the last column is the radius.
xyzr =
-45.1766 -48.5664 0.4843 0.5000
-50.0416 -49.2495 0.4961 0.5000
-47.9513 -47.9333 0.9957 1.0000
-49.9313 -47.3837 1.8390 1.0000
-48.8482 -50.0006 0.9927 1.0000
-49.6122 -48.1071 0.4921 0.5000
-44.6511 -49.4200 0.4985 0.5000
-45.2021 -50.4440 0.4960 0.5000
-50.5025 -49.5157 1.3356 0.5000
-44.7595 -46.8283 4.0392 3.5000
The actual matrix is a 60000x4 double, and the spheres end up being closely packed. I would like to calculate the voids in between spheres, with the top surface being the surface of the uppermost spheres. What I mean is that the volume isn't simply the volume of the box minus the volume of spheres.

11 Comments

Do you have any ideas/attempts?
The idea I have so far is to basically draw a tight box around the outermost spheres and then subtract the volume of the spheres from that volume. I am wondering if there might be something more elegant like calculating a surface integral for the sides, making a box from those, and then subracting the volume of the spheres from that new volume.
What about this case?
Casey Ricks
Casey Ricks on 12 Mar 2020
Edited: Casey Ricks on 12 Mar 2020
Sphere boundaries are fixed. The shortest distance between the center points of two spheres is R2+R1.
Thanks for pointing that out.
So why just substract volume of spheres from bounding box?
Which bounding box are you referring to? I mean, how do you specify the height of the bounding box?
What about convhull and alphashape?
Yea, so right now I'm using convhull. I hadn't tried out alphashape yet, but I'll look into that function. Thank you.
alphashape ended up working out even better than convhull. Thanks for your advice.
Hey Casey,
Out if interest, how did you go about generating your xyzr data?
Hello!
The data was generated in lammps.

Sign in to comment.

Answers (0)

Categories

Asked:

on 12 Mar 2020

Commented:

on 14 Mar 2020

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!