Trying to understand behavior of holes in alphaShapes.

조회 수: 18 (최근 30일)
Matt J
Matt J 2021년 11월 19일
댓글: Matt J 2021년 11월 22일
I have created the attached alphaShape object, which contains a hole.
load alph_shape;
shp =
alphaShape with properties: Points: [6546×2 double] Alpha: 10 HoleThreshold: 0 RegionThreshold: 0
I am trying to understand why, when I drastically increase the alpha radius,
edges are added that transect the hole. Clearly, the radius is much bigger than the dimensions of the hole, so how can the enlargement cause new edges to be added inside it?

채택된 답변

Matt J
Matt J 2021년 11월 22일
편집: Matt J 2021년 11월 22일
I found the following in posted material for a course at Stanford. It's a pretty intuitive explanation of how alpha shapes work, and clears up my question, if it is accurate.
As mentioned in Edelsbrunner’s and M ̈ucke’s paper [3], one can intuitively think of an α-shape as the following. Imagine a huge mass of ice-cream making up the space Rd and containing the points S as “hard” chocolate pieces. Using one of these sphere-formed ice-cream spoons we carve out all parts of the ice-cream block we can reach without bumping into chocolate pieces, thereby even carving out holes in the inside ([Ed. the ice cream spoon is allowed to travel freely through space, even to within areas girded by the points S. However, it is allowed to draw a scoop if and only if the points in S can be excluded. ]).
We will eventually end up with a (not necessarily convex) object bounded by caps, arcs and points. If we now straighten all “round” faces to triangles and line segments, we have an intuitive description of what is called the α-shape of S...And what is α in the game? α is the radius of the carving spoon.

추가 답변 (1개)

Kumar Pallav
Kumar Pallav 2021년 11월 22일
The default alpha radius is one which is the smallest alpha radius that produces an alpha shape that encloses all points.
From my understanding, as you increase the 'alpha' value, it no longer produces the tighest fitting alpha shape, and you can observe this with the holes getting filled by points connected within that radius.
For an extreme value of 'alpha'=inf, it basically produces a conves hull with all the points inside it.
Since, you have given a large value of alpha, it is basically producing a convex hull.
Refer this for more on alphaShape.
Hope this helps!
  댓글 수: 2
Matt J
Matt J 2021년 11월 22일
편집: Matt J 2021년 11월 22일
@Kumar Pallav, Thanks, but I don't think that completely explains it, and your link to the alphashape doc page does not contain any information about the defining properties of an alphashape. Therefore, I looked to this wiki page, which says,
An edge of the alpha-shape is drawn between two members of the finite point set whenever there exists a generalized disk of radius 1/α containing none of the point set and which has the property that the two points lie on its boundary.
Now, if 2 points lie on opposite sides of a hole, it doesn't seem possible for a circle whose radius is larger than the hole to avoid containing other members of the point set. Therefore, it doesn't seem like an edge should ever be drawn between them.
Matt J
Matt J 2021년 11월 22일
The source I found for my other answer makes me wonder if the wiki page had a typo and "none of the point set" should really have been "one of the point set".

댓글을 달려면 로그인하십시오.


Help CenterFile Exchange에서 Bounding Regions에 대해 자세히 알아보기





Community Treasure Hunt

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

Start Hunting!

Translated by