## vertex curvature

### vertex curvature

Hi,

How can I calculate the curvature of a vertex on a 3D triangular mesh?

Many thanks,

Ian

### vertex curvature

> How can I calculate the curvature of a vertex on a 3D triangular mesh?

In full generality you can't do it at all, because there is no single,
calculable quantity that would rightfully hold the title of being
"the" curvature.  "The" curvature is only defined for smooth surfaces,
one of which your triangle mesh may, or may not be approximating, at a
given vertex.  Only if it does, you can calculate some approximation
to the curvature and expect the result to make some sense.

--

Even if all the snow were burnt, ashes would remain.

### vertex curvature

Sorry, you're right - I should give you a little more information to go on
than that  :)

I am trying to implement a mesh simplification algorithm (basically
following the procedure outlined in the MAPS paper by Lee et al) that works
for triangular meshes.  In calculating which vertices are to be removed at a
given level of the simplification, I will select them from a priority queue
based on geometric information.  Roughly speaking, vertices with small and
flat 1-ring neighbourhoods will be chosen first.  The priority weight of a
vertex is a combination of the area of its 1-ring neighbourhood and an
estimate of its curvature.

So, whilst I can work out the area of the 1-ring neighbourhood (just the
summation of the neighbouring faces to that vertex), I need some method of
estimating this curvature.

I'm sorry if this is still a little vague, but (as you can probably tell) I
am not very experienced in this field.  If you can provide further help or
guidance I would be very grateful.

Thanks again,

Ian

> On Tue, 5 Mar 2002 17:21:20 -0000, "Ian"

> >How can I calculate the curvature of a vertex on a 3D triangular mesh?

> First tell us how you define it, and then you can ask how to calculate
> it..  All the standard definitions of "curvature" refer to
> differential concepts.  There is no standard definition for curvature
> at a point where a surface is not twice differentiable, and at a
> vertex it is generally not even once differentiable.

> For a twice differentiable point (not a vertex) there are several
> different curvatures that have importance:  two principal curvatures,
> mean curvature, and Gaussian curvature.

### vertex curvature

Quote:> Ah.  How about the ratio of the solid angle of the vertex to the area
> of the 1-ring neighborhood?   (The solid angle is the area that the
> vertex subtends on the unit sphere).

Sorry Ron, but that doesn't make much sense to me :(

I've just had a look on the net, and found some stuff about "solid angles"
in relation to cones, but don't really understand what you're getting at.
Could you elaborate further for me (or provide a link that will explain it
to me)?

Ian

### vertex curvature

Quote:> First tell us how you define it, and then you can ask how to calculate
> it..  All the standard definitions of "curvature" refer to
> differential concepts.  There is no standard definition for curvature
> at a point where a surface is not twice differentiable, and at a
> vertex it is generally not even once differentiable.

This is not correct.
For example, you can define the Gaussian curvature
of a vertex easily:
The sum of all angles in this vertex of all polygons
sharing this vertex minus pi (180 degree).

For example, each the vertex of a cube has curvature
3 * (pi/2) - pi = pi/2.
The curvature of each vertex of a tetragedron is
3 * (2/3 pi) - pi = pi.

This definition is also compatible with the differential definition
of curvature of smooth surfaces:
For twice differentiable surfaces, you can define the curvature
of an area as integral over the differential curvature.
Taking a limes of a curvature of a smooth surface
approaching a (not twice differentiable) mesh,
then the limes of this integrated curvature is exactly
the sum of the curvatures of all vertices as defined above
which are included in the area.

Furthermore, important mathematical theorems
work not only for differential curvatures, but for
the discreet one as defined above.
For example, the relation between the topology of a closed
surface (sphere, torus etc.) and the integral over the curvature.
For meshes, you only have to replace the integral over the
curvature by the sum over the curvatures of all vertices.
For example, the sum of the curvatures of all vertices of
closed meshes having the topology of a sphere
(cube,  tetragedron etc.) is 4 pi (discreet version of Gauss law).

BTW, you also can define a differential curvature
for meshes which are not twice differentiable:
The differential curvature of a vertex of a mesh
is the product of the two-dimensional delta "function"
and the curvature of the vertex as defined above.

The exterior curvature is also defined for discreet meshes:
Not for vertices, but for borders:
Angle between the both neighboring polygons minus pi.
Also very simple.

Folker

### vertex curvature

On Tue, 05 Mar 2002 16:56:33 -0800, Ron Levine

>But I'm not sure you've stated the definition quite right, at least
>the definition that suits OP's purposes.    If the mesh has manifold
>topology at the vertex, then  the sum of the angles at the vertex of
>the triangles sharing the vertex  would be 2 pi if the mesh were
>planar at the vertex, and the planar case should have zero curvature.
>This sum would be less than 2 pi for the vertex that is like a surface
>of constant curvature and greather than 2 pi for a "saddle", which
>ought to have negative curvature.  So I think the definition should be
>2 pi minus the sum of the angles at the vertex of the triangles
>sharing the vertex.  No?

This is an elegantly simple solution for the local curvature, i.e.
only taking into account the adjoining polygons.

This falls down though in the case where you're wanting to know the
polygons 'curvature' on a larger scale. For example, there might be
negative curvature at a vertex when you only look at its neighbors,
but severe positive curvature when you look at a larger region.

Any solutions to that?

Regards,
Andrew Chapman

### vertex curvature

> How can I calculate the curvature of a vertex on a 3D triangular mesh?

The Gaussian curvature is 2 pi minus the sum of the face angles incident
to that vertex.  Thus, the curvature of a cube vertex is [2 pi - 3(pi/2)]
= pi/2, the curvature of a tetrahedron vertex is [2 pi - 3(pi/3)] = pi,
and the curvature of a vertex interior to and coplanar with a face is
zero.

### vertex curvature

How do I calculate the "face angles incident to that vertex"?  What exactly
is a face angle?  Is it the angle between the face normal and the vertex
normal?

Thanks.

> > How can I calculate the curvature of a vertex on a 3D triangular mesh?

> The Gaussian curvature is 2 pi minus the sum of the face angles incident
> to that vertex.  Thus, the curvature of a cube vertex is [2 pi - 3(pi/2)]
> = pi/2, the curvature of a tetrahedron vertex is [2 pi - 3(pi/3)] = pi,
> and the curvature of a vertex interior to and coplanar with a face is
> zero.

### vertex curvature

Quote:> Again, this makes sense only if the mesh has manifold topology at the
> vertex.  That means that each of the edges inicident to the vertex of
> the triangles sharing the vertex is shared by exactly two of the
> triangles.

Right.

But also very important:
This Gaussian curvature is NOT suited for mesh simplification,
since it does not include exterior curvature.

For mesh simplification, a simple but roubust technique is
the following:

When removing a vertex, some triangles change and move
their plane. You calculate the distance of the vertex you
consider to remove to all these affected planes,
and take the largest distance.
This distance is basically the geometrical error you get
when you remove the vertex.
When having not to extrem cases (too sharp vertices),
this distance is approximately the distance of the vertex
to the new mesh where the vertex was removed.
You also could calculate this distance exactly,
getting an immediate measure of the "amount of change"
of the mesh by removing the vertex.

Folker

### vertex curvature

Quote:> ought to have negative curvature.  So I think the definition should be
> 2 pi minus the sum of the angles at the vertex of the triangles
> sharing the vertex.  No?

In other words, you suggest to reverse the sign?
I have no problem with this ;-)
About half of the books use one convention,
the rest of the books use the opposite sign convention...

Folker

### vertex curvature

Quote:> This falls down though in the case where you're wanting to know the
> polygons 'curvature' on a larger scale. For example, there might be
> negative curvature at a vertex when you only look at its neighbors,
> but severe positive curvature when you look at a larger region.

What do you exactly mean?
A polygon itself has no curvature at all,
only vertices carry Gaussian (intrinsic) curvature.

Folker

### vertex curvature

Quote:> It is not only a question of changing your sign, but also of changing
> one of the terms--from your incorrect pi to the correct 2 pi.

Oh, I didn't see that.
Yes, of course 2 pi is correct.

Quote:> >About half of the books use one convention,
> >the rest of the books use the opposite sign convention...

> That is certainly not the case in the differential realm.  In 100% of
> ...
> less than pi) have negative Gaussian curvature.,

Yes, maybe.
I must admit that I don't know too much much literature about Gaussian
curvature itself. But Gaussian curvature is a special case of Riemann
curvature, and for the Riemann curvature tensor exist both conventions
nearly equally often as far as I know.

Quote:> BTW, it is perhaps interesting to point out to the unaware that some
> apparently "curved" surfaces, such as cylinders and cones, and more
> generally all developable surfaces, have Gaussian curvature zero at
> every point where it is defined.   ...

Yes, this is the reason why the Gaussian curvature is not suited
for mesh simplification.

Folker

### vertex curvature

Quote:> Ah, but the Gaussian curvature is a SCALAR contraction of the Riemann
> curvature TENSOR.  A  tensor has no sign, but a non-zero scalar does.

But you can have different sign conventions to a tensor, too,
Furthermore, the Riemann scalar is also the contraction of the Riemann
tensor, and in two dimensions, the Riemann scalar is the Gaussian curvature,
except a constant factor and - depending on the convention - a different
sign.
But I assume that you are right, for Gaussian curvature, there is a
well-designed
convention.

Folker

### vertex curvature

Thanks guys - you've been most helpful  :)

Ian

Quote:> > Again, this makes sense only if the mesh has manifold topology at the
> > vertex.  That means that each of the edges inicident to the vertex of
> > the triangles sharing the vertex is shared by exactly two of the
> > triangles.

> Right.

> But also very important:
> This Gaussian curvature is NOT suited for mesh simplification,
> since it does not include exterior curvature.

> For mesh simplification, a simple but roubust technique is
> the following:

> When removing a vertex, some triangles change and move
> their plane. You calculate the distance of the vertex you
> consider to remove to all these affected planes,
> and take the largest distance.
> This distance is basically the geometrical error you get
> when you remove the vertex.
> When having not to extrem cases (too sharp vertices),
> this distance is approximately the distance of the vertex
> to the new mesh where the vertex was removed.
> You also could calculate this distance exactly,
> getting an immediate measure of the "amount of change"
> of the mesh by removing the vertex.

> Folker

Hi!

Not being a mathematician (and not even close to that), I'm stuck with
something I can't figure out myself, even not after having read all I have

AFAIK, A curve has a well defined curvature that applies to any point of the
curve. This property is actually related to the continuity of the curve, so
strictly speaking, a point at which the curve is not continuous does not has
a well defined curvature.
So, a (true) vertex doesn't has curvature. (true vertex=point when
continuity breaks)

Well...

For some reason (yes, I'm not really sure why I'm trying to do this :-)
I'm obsessed with the (self-invented) notion of curvature at a vertex, even
though I know that it is not defined and of course, not being defined, I
can't even think of a way to approximate it.

Imagine two consecutive circular arcs.  I want to be able to measure how
much does a moving point turns around the vertex just as I can measure how
much a point turns along a curve, and I want to do so homogeneously, as a
unique concept.
I'm totally failing to do that, because the curvature along the arc is
(1/r), while the 'turn' at the vertex is an angle, so I don't know how to
treat both measurements as the same thing (and for instance, compare them).

This makes me think that I'm mixing two unrelated concepts: that of
curvature and that of the instant change of direction of a point passing
through a vertex on a piecewise curve. But somehow I feel them as being
related.

A vertex angle tells me how fast (instantly) and how much a point is
turning. Isn't this what curvature expresses? Shouldn't I be able to tell
that the curvature of a small circle is 'greater' than the turn at a flat
vertex?

(If I think of a vertex as a zero-radius circular arc, curvature there goes
inf, so this doesn't help)

TIA,

--
Fernando Cacciola
Sierra s.r.l.

www.gosierra.com