Bug in computing Gaussian curvature in openfliiper

Dear openfliiper, We think, In Curvature.cc, the calculation for Gaussian curvature is wrong. The fact is that the number of incident angles(facets) overs a boundary vertex is one less than then number of incident vertices (edges) over it. Below is the existing calculation. It should judge whether the vertex is a boundary one or not! --------------- Curvature.cc -------------- for(; voh_it; ++voh_it, ++n_voh_it) { typename MeshT::Point p1 = _mesh.point(_mesh.to_vertex_handle( voh_it)); typename MeshT::Point p2 = _mesh.point(_mesh.to_vertex_handle( n_voh_it)); gauss_curv -= acos(OpenMesh::sane_aarg( ((p1-p0).normalize() | (p2-p0).normalize()) )); } Best Regards, Xianyong Liu.

Dear openfliiper, Concerning the problem we sent last night. We put two examples here. From the output, we can see that for boundary vertex, the current way returns an unnecessary face(shown in bold font). Besides, could you please help us how to iterate all incident vertices in a face in counterclockwise.
> example one: 553 is a boundary vertex
-------------------------- retrieve by incident half edges (553,517);(553,482) (553,482);(553,516) (553,516);(553,464) (553,464);(553,603) *(553,603);(553,517)* --------------------------retrieve by incident faces (553,517);(553,482) (553,482);(553,516) (553,516);(553,464) (553,603);(553,464)
> example two: 509 is an interior vertex
-------------------------- retrieve by incident half edges (509,507);(509,534) (509,534);(509,549) (509,549);(509,535) (509,535);(509,510) (509,510);(509,492) (509,492);(509,491) (509,491);(509,507) --------------------------retrieve by incident faces (509,507);(509,491) (509,534);(509,507) (509,549);(509,534) (509,535);(509,549) (509,535);(509,510) (509,492);(509,510) (509,492);(509,491) Best Regards, Xianyong Liu. 2012/10/24 刘先勇 <xyliu80@gmail.com>
Dear openfliiper,
We think, In Curvature.cc, the calculation for Gaussian curvature is wrong.
The fact is that the number of incident angles(facets) overs a boundary vertex is one less than then number of incident vertices (edges) over it.
Below is the existing calculation. It should judge whether the vertex is a boundary one or not!
--------------- Curvature.cc -------------- for(; voh_it; ++voh_it, ++n_voh_it) { typename MeshT::Point p1 = _mesh.point(_mesh.to_vertex_handle( voh_it)); typename MeshT::Point p2 = _mesh.point(_mesh.to_vertex_handle( n_voh_it));
gauss_curv -= acos(OpenMesh::sane_aarg( ((p1-p0).normalize() | (p2-p0).normalize()) )); }
Best Regards, Xianyong Liu.

Hi, i think the gaussian curvature is not well defined on the boundary. The current computation computes it, as if the one ring is complete, which is just an approximation of course. How would you suggest to define/compute it? Best, Jan Möbius On 25.10.2012 04:39, 刘先勇 wrote:
Dear openfliiper, Concerning the problem we sent last night. We put two examples here. From the output, we can see that for boundary vertex, the current way returns an unnecessary face(shown in bold font).
Besides, could you please help us how to iterate all incident vertices in a face in counterclockwise.
>> example one: 553 is a boundary vertex
-------------------------- retrieve by incident half edges (553,517);(553,482) (553,482);(553,516) (553,516);(553,464) (553,464);(553,603) *(553,603);(553,517)*
--------------------------retrieve by incident faces (553,517);(553,482) (553,482);(553,516) (553,516);(553,464) (553,603);(553,464)
>> example two: 509 is an interior vertex
-------------------------- retrieve by incident half edges (509,507);(509,534) (509,534);(509,549) (509,549);(509,535) (509,535);(509,510) (509,510);(509,492) (509,492);(509,491) (509,491);(509,507)
--------------------------retrieve by incident faces (509,507);(509,491) (509,534);(509,507) (509,549);(509,534) (509,535);(509,549) (509,535);(509,510) (509,492);(509,510) (509,492);(509,491)
Best Regards, Xianyong Liu.
2012/10/24 刘先勇 <xyliu80@gmail.com <mailto:xyliu80@gmail.com>>
Dear openfliiper,
We think, In Curvature.cc, the calculation for Gaussian curvature is wrong.
The fact is that the number of incident angles(facets) overs a boundary vertex is one less than then number of incident vertices (edges) over it.
Below is the existing calculation. It should judge whether the vertex is a boundary one or not!
--------------- Curvature.cc -------------- for(; voh_it; ++voh_it, ++n_voh_it) { typename MeshT::Point p1 = _mesh.point(_mesh.to_vertex_handle( voh_it)); typename MeshT::Point p2 = _mesh.point(_mesh.to_vertex_handle( n_voh_it));
gauss_curv -= acos(OpenMesh::sane_aarg( ((p1-p0).normalize() | (p2-p0).normalize()) )); }
Best Regards, Xianyong Liu.
_______________________________________________ Openflipper mailing list Openflipper@lists.rwth-aachen.de http://mailman.rwth-aachen.de/mailman/listinfo/openflipper
-- Dipl.Inform. Jan Möbius Department of Computer Science VIII Aachen University of Technology (RWTH) Ahornstrasse 55, 52074 Aachen, Germany Phone ++49 (0)241 80-21817 Fax ++49 (0)241 80-22899 mailto:moebius@cs.rwth-aachen.de http://www.rwth-graphics.de
participants (2)
-
Jan Möbius
-
刘先勇