2016-06-28 2 views
0

Я новичок в CGAL, и я пытаюсь создать экземпляр 2D Reflection.Instancing a CGAL :: Преобразование типа Отражение

Определив typedef CGAL::Aff_transformation_2<K> Transformation, , который работает для других Transformations, как:

Transformation rational_rotate(CGAL::ROTATION, 1, 100); //OK 
Transformation translate(CGAL::TRANSLATION, Vector_2(-2, 0));//OK 

У меня есть сообщение об ошибке при попытке это:

CGAL::Line_2<CGAL::Cartesian<double>> LineR(A,B); 
Transformation Reflection(CGAL::REFLECTION, LineR); 

Я пробовал много Kernels, но я m не уверен, что проблема в этом направлении.

Любой намек был бы оценен.

+0

Странно, по-видимому, отсутствует в декартовых ядер (но присутствует в обертке). Однородные ядра идут немного дальше, но терпят неудачу, что может быть ошибкой. Пожалуйста, напишите о проблеме в github CGAL с полным примером (#include, typedef, мы должны иметь возможность просто скопировать-вставить и скомпилировать, чтобы воспроизвести проблему). –

+0

Привет, Спасибо за ваш быстрый ответ. Я добавил 2 файла LAB.pro и LAB.cpp с тегами по дереву: 1e7becd11f, как вы просили. – democrie

+1

Привет, пожалуйста, забудьте о дереве, вы можете взглянуть на вопрос №1216 – democrie

ответ

0

Exemple из ответа (не Waranty):

Transformation getReflection(Line_2 droite) 
{ 
    if(droite.is_degenerate()) 
     std::cout<< "Droite dégénérée, tester avant l'appel de la fonction ..."<< std::endl; 

    if(droite.is_vertical()) 
    { 
     double Xd = - droite.c()/droite.b(); 
     return Transformation(-1, 0, 2*Xd, 0, 1, 0, 1.0); 
    } 
    else 
    { 
     double x = droite.x_at_y(0); 
     Transformation translation (CGAL::TRANSLATION, CGAL::ORIGIN - Point_2(-x, 0)); 
     double pente = droite.direction().dy()/droite.direction().dx(); 
     double angle = atan(pente); 
     Transformation rotation(CGAL::ROTATION, sin(angle), cos(angle)); 
     Transformation comp = translation * rotation; 
     return comp * Transformation(1, 0, 0, -1) * comp.inverse(); 
    } 
} 
Смежные вопросы