Hi,

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

Many thanks,

Ian

Hi,

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

Many thanks,

Ian

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

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.

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.

Sorry Ron, but that doesn't make much sense to me :(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).

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)?

I appreciate your patience!

Ian

This is not correct.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.

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

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?

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

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

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.

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.

Right.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.

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

In other words, you suggest to reverse the sign?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?

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

What do you exactly mean?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.

A polygon itself has no curvature at all,

only vertices carry Gaussian (intrinsic) curvature.

Folker

Oh, I didn't see that.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.

Yes, of course 2 pi is correct.

Yes, maybe.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.,

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.

Yes, this is the reason why the Gaussian curvature is not suitedQuote:> 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. ...

for mesh simplification.

Folker

But you can have different sign conventions to a tensor, too,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.

(have an additional minus sign in your curvation tensor definition).

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

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

1. Approx curvature at a vertex?

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

about the subject.

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

2. URL of 'the Poor Mans Renderer' (or something like that) ?

3. code for curvature of vertices on triangle mesh?

6. I will appreciate your feedback

7. Duplicate Vertices in a Vertex Table

8. nyc paris

10. Vertex normals at the Bezier control vertex

11. Approximating good texture vertices from 3d vertices

12. Defining "principal curvatures" at vertices of a polyhedron

13. How to use vertex programming (vertex shading)

14 post • Page:**1** of **1**