2
$\begingroup$

I'm wondering how to compute a bounding tetrahedron from a set of points so i can initialize a delaunay triangulation

My first approach was to find the bounding box to my set of points and then compute a tetrahedron going from the bounding box .

I'm searching for a robust method for doing it .

$\endgroup$
4
  • 1
    $\begingroup$ Is the tetrahedron oriented? $\endgroup$
    – pmw1234
    Commented Jan 2, 2021 at 18:22
  • $\begingroup$ @pmw1234 not necesseraly $\endgroup$
    – Tawfik
    Commented Jan 3, 2021 at 12:23
  • 1
    $\begingroup$ A good algorithm that isn't necessarily the fastest is to pick several directions.(somewhere between 11 and 16 usually works well) Then compute a tetrahedron oriented on each direction. After computing the tetrahedron for that direction compute it's area only keeping the tetrahedron with the smallest total area. This won't always find the absolute best fit, but it is usually good enough. And it boils the fit algorithm down to finding the best fit for an axis aligned tetrahedron where the current direction is the up axis. $\endgroup$
    – pmw1234
    Commented Jan 5, 2021 at 23:43
  • $\begingroup$ Here is a link to a discussion on Axis Aligned Tetrahedrons. medium.com/@bromanz/… $\endgroup$
    – pmw1234
    Commented Jan 5, 2021 at 23:45

1 Answer 1

2
$\begingroup$

While it's an old question, someone may find the following approach useful nonetheless.

  1. Calculate the (axis aligned) bounding box for your input point cloud.
  2. From that, calculate the (axis aligned) bounding cube centered around the centroid of the bounding box (so the two are either identical or the bounding box is fully enclosed in the bounding cube).
  3. Scale the bounding cube up by a factor of three about its centroid (so the scaling will not implicitly transform it in worldspace).
  4. Derrive any of the regular tetrahedra embedded in the cube. That is, take the diagonals of two opposing faces of the cube, more precisely the top- and bottom-face, but such that both diagonals are orthogonal rather than colinear. The four cube vertices connected to those two diagonals are the vertices of your bounding (regular) tetrahedron.

Regular octahedron (red) and embedded (dual) cube (yellow) The yellow cube's vertices touch the red octahedron's faces on their centroids.

Regular tetrahedron (yellow) embedded in cube (blue) The red octahedron's vertices are the centroids of the blue cube. The blue cube's edge length is three times that of the yellow cube. The red octahedron is identical in both images.

Regular octahedron (orange) embedded in (yellow) regular tetrahedron The orange octahedron's vertices are the midpoints of the yellow regular tetrahedron. The yellow tetrahedron's bounding box is the blue cube shown above.



Explanation: A cube's dual is a regular octahedron. So if we take the centroid of each cube face, we get the embedded (dual) octahedron.

This octahedron's volume equals one third of the cube's volume. As the duality works both ways, we can, for a given minimum bounding cube, imagine a regular octahedron inside which our cube is embedded itself. This bounding octahedron naturally has to be three times the size of the bounding cube.

A regular octahedron on the other hand can be neatly embedded in a regular tetrahedron, where the octahedron's vertices are the midpoints of the tetrahedron's edges.

A regular tetrahedron can be embedded in a cube such that four vertices of the cube make up for the tetrahedron's vertices and the tetrahedron's edges are all diagonals of the cube's face.

It follows we can imagine a regular octahedron which embeds our original bounding cube while itself being embedded in a regular tetrahedron (which we need), itself embedded in a larger cube. The volume of the tetrahedron is exactly one third of that of the large cube, which is where the above-mentioned scaling factor comes from.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.