Skip to Content.
Sympa Menu

cgal-discuss - Re: [Fwd: [cgal-discuss] Tetrahedron-Polyhedron problem]

Subject: CGAL users discussion list

List archive

Re: [Fwd: [cgal-discuss] Tetrahedron-Polyhedron problem]


Chronological Thread 
  • From:
  • To:
  • Subject: Re: [Fwd: [cgal-discuss] Tetrahedron-Polyhedron problem]
  • Date: Wed, 17 Mar 2010 12:20:04 +0100
  • Importance: Normal

Thanks for the answer.

But if I have to do this check manually, what's the purpose of the
Polyhedron::is_closed() function? I thought this function is capable of
doing this.

And if I'm going to check this manually, why should I use the incremental
builder? one then can create triangles from points, which is a lot simpler
to implement (like my first example I wrote in this e-mail), and then do
this check manually (while the check Polyhedron::is_closed() fails to give
the right answer).

Could you please explain what is_closed() function does? and why I'm
supposed to use the incremental builder for my task if I'm to do this
check manually?

Is there a shorter way to create my polyhedra than I'm taking?

Thank you,
Best regards,
Samer Afach

>
> wrote:
>> Thank you so much for your answer.
>>
>> but I still have 1 unclear issue. I've seen that that example creates a
>> triangle, meaning a surface. What if I want to create a closed
>> polyhedron
>> (like a cube or a tetrahedron)? as a general question I would like to
>> ask,
>> is CGAL able to form a "closed" polyhedron and know that it's closed in
>> an
>> automatic manner? because as I drew in my first problem, I created the
>> surfaces, but the program wasn't able to detect that it's a closed
>> polyhedron (while it's of course closed, since I followed the same
>> simple
>> point-structure of the example).
>>
>> How can I tell CGAL to confirm (not check) that my polyhedron is closed,
>> so that if I use the check function Polyhedron::is_closed() I would get
>> the right answer?
>>
>> Is the incremental builder the right tool for that task?
>>
>> Thank you again,
>>
>> Best Regards,
>> Samer Afach
>
> First note that Polyhedron can only be used to represent one or more
> surfaces.
>
> In the example joint, I manually create a tetrahedron to show that the
> incremental builder add faces in a clever way (halfedge are reused when
> you add a facet). The number of halfedges is 12.
>
> To know if your surface is closed, you can rely on the theorem of
> classification of surface and the Euler characteristic
> (http://en.wikipedia.org/wiki/Euler_characteristic).
>
> The Euler characteristic is 2 for each closed surface encoded by the
> polyhedron (the for each is really important here).
>
>
> S.
>
>
>
>
>>
>>
>>> Hello,
>>>
>>> From what I understand you probably need to use the
>>> Polyhedron_incremental_builder_3.
>>>
>>> Have a look here for the documentation (there is an example at the end
>>> of the page)
>>> http://www.cgal.org/Manual/last/doc_html/cgal_manual/Polyhedron_ref/Class_Polyhedron_incremental_builder_3.html
>>>
>>> S.
>>>
>>>
>>>
>>> wrote:
>>>> Dear programmers,
>>>>
>>>> I've drawn this question but no one has given me an answer. I would
>>>> really
>>>> appreciate it so much if someone could even give me a hint to solve
>>>> this
>>>> problem. It's really very important for me.
>>>>
>>>> Thank you in advance,
>>>>
>>>> Sincerely,
>>>> Samer
>>>>
>>>> ---------------------------- Original Message
>>>> ----------------------------
>>>> Subject: [cgal-discuss] Tetrahedron-Polyhedron problem
>>>> From: "Samer Afach"
>>>> <>
>>>> Date: Fri, March 12, 2010 5:15 pm
>>>> To:
>>>>
>>>> --------------------------------------------------------------------------
>>>>
>>>> Hello :),
>>>>
>>>> I'm starting to create some simple polyhedra in order to go to bigger
>>>> applications, and so I'm trying to understand how this library works
>>>> with it.
>>>>
>>>> I have a problem, the problem is that I'm failing to create 4
>>>> triangles
>>>> and form a tetrahedron from them. I'm avoiding using the function
>>>> Polyhedron::make_tetrahedron(...) because my aim in the future is
>>>> creating random polyhedra by combining triangles and check whether
>>>> they
>>>> are closed and fulfill some conditions. Here's my program:
>>>>
>>>> #include <CGAL/Homogeneous.h>
>>>> #include <CGAL/Polyhedron_traits_with_normals_3.h>
>>>> #include <CGAL/Polyhedron_3.h>
>>>> #include <iostream>
>>>> #include <algorithm>
>>>>
>>>> using namespace std;
>>>>
>>>> struct Normal_vector
>>>> {
>>>> template <class Facet>
>>>> typename Facet::Plane_3 operator()( Facet& f) {
>>>> typename Facet::Halfedge_handle h = f.halfedge();
>>>> // Facet::Plane_3 is the normal vector type. We assume the
>>>> // CGAL Kernel here and use its global functions.
>>>> return CGAL::cross_product(
>>>> h->next()->vertex()->point() - h->vertex()->point(),
>>>> h->next()->next()->vertex()->point() -
>>>> h->next()->vertex()->point());
>>>> }
>>>> };
>>>> typedef CGAL::Homogeneous<int> Kernel;
>>>> typedef Kernel::Point_3 Point_3;
>>>> typedef Kernel::Vector_3 Vector_3;
>>>> typedef CGAL::Polyhedron_traits_with_normals_3<Kernel> Traits;
>>>> typedef CGAL::Polyhedron_3<Traits> Polyhedron;
>>>> typedef Polyhedron::Halfedge_handle Halfedge_handle;
>>>> int main() {
>>>> Point_3 p( 1, 0, 0);
>>>> Point_3 q( 0, 1, 0);
>>>> Point_3 r( 0, 0, 1);
>>>> Point_3 s( 0, 0, 0);
>>>> Polyhedron P;
>>>> //P.make_tetrahedron( p, q, r, s);
>>>>
>>>> P.make_triangle(p,q,r);
>>>> P.make_triangle(p,r,s);
>>>> P.make_triangle(p,s,q);
>>>> P.make_triangle(q,s,r);
>>>>
>>>> if(P.is_closed())
>>>> {
>>>> cout<<"It's closed"<<endl;
>>>> }
>>>> if(P.is_pure_trivalent())
>>>> {
>>>> cout<<"Trivalent"<<endl;
>>>> }
>>>> std::transform( P.facets_begin(), P.facets_end(),
>>>> P.planes_begin(),
>>>> Normal_vector());
>>>> CGAL::set_pretty_mode( std::cout);
>>>> std::copy( P.planes_begin(), P.planes_end(),
>>>> std::ostream_iterator<Vector_3>( std::cout, "\n"));
>>>> return 0;
>>>> }
>>>>
>>>> I copied this program from a sample in the manual. What's confusing me
>>>> is that when I create a tetrahedron using the make_tetrahedron
>>>> function,
>>>> the conditions work fine, but I can't get the same output when
>>>> creating
>>>> a tetrahedron by "connecting" 3 dimensional triangles. I was even
>>>> careful having the same output as the example (same order for the
>>>> norms)
>>>>
>>>> Could anyone please tell me why that's happening, and I would
>>>> appreciate
>>>> it so much if someone also could apply the function
>>>> Polyhedron::is_tetrahedron(Polyhedron::Halfedge_handle) also, because
>>>> I
>>>> failed to do it because I didn't know how to get the right call for
>>>> Halfedge_handle.
>>>>
>>>> Sincerest regards,
>>>> Samer Afach
>>>> Institute of computational physics, University of Stuttgart
>>>>
>>>
>>> --
>>> You are currently subscribed to cgal-discuss.
>>> To unsubscribe or access the archives, go to
>>> https://lists-sop.inria.fr/wws/info/cgal-discuss
>>>
>>
>>
>>
>
>
> --
> You are currently subscribed to cgal-discuss.
> To unsubscribe or access the archives, go to
> https://lists-sop.inria.fr/wws/info/cgal-discuss
>
>





Archive powered by MHonArc 2.6.16.

Top of Page