2010-04-08 11 views
1

Je recherche une bibliothèque C++ qui permet une intégration facile des Matrices de Transformation de Coordonnées (CTM) dans mon application. Vous connaissez peut-être les CTM de PDF ou PostScript.Bibliothèque C++ pour les matrices de transformation de coordonnées (CTM)?

Pour un projet, nous utilisons C++/Qt4 comme structure, qui offre une classe QTransform, qui fournit des méthodes comme .translate(double x, double y) ou .rotate(double degrees). Après quelques transformations, cela me permettrait d'obtenir toutes les 6 valeurs de CTM, que je pourrais alimenter dans une bibliothèque PDF ou utiliser une matrice de transformation dans des fichiers d'export. L'API de Qt permet également le mappage arbitraire de polygones (QPolygon), de rectangles (QRect) et d'autres structures de données primitives dans des systèmes de coordonnées transformés.

Donc, fondamentalement, je cherche quelque chose de similaire à ce que Qt fournit, mais sans avoir besoin d'utiliser Qt. Je sais que je pourrais faire les multiplications matricielles moi-même, mais je ne suis pas vraiment intéressé à le faire, car je suis très sûr que quelqu'un a déjà résolu ce problème, donc s'il vous plaît pas de liens vers des livres ou d'autres guides sur la façon de multiplier les matrices.

Merci!

Répondre

1

Pourquoi ne pas simplement utiliser Qt? Il fait ce que vous voulez, est open source (LGPL je pense) et vous devriez pouvoir lier juste à la classe QTransform.

+0

Oui, malheureusement, la classe QTransform ne fait pas partie de QtCore (ce qui me conviendrait), mais fait plutôt partie de QtGui. Ce serait une tonne de surcharge, sans parler des dépendances sur X11, etc. Cela ajouterait 15 Mo de bibliothèques supplémentaires juste pour utiliser une seule fonctionnalité de cette bibliothèque. – BastiBen

+0

Pouvez-vous sortir la classe QTransform, faire des fichiers .h et .cpp pour cette classe, et les inclure de la même manière que vos propres classes (peut-être sortir la classe pour supprimer toutes les fonctions membres supplémentaires que vous ne voulez pas). Ou lancez votre propre classe de transformation basée sur le code de la version Qt. – Amos

+0

Cela me semble être une façon raisonnable de faire cela, malheureusement cela me lierait aux termes de la licence Qt - ce qui aurait pour résultat de placer ce code dans une bibliothèque qui doit être liée dynamiquement. – BastiBen

0

Avez-vous considéré OpenGL? Il peut non seulement faire les types de transformations que vous recherchez (transformations linéaires jusqu'à 4x4), mais il peut généralement décharger ce travail sur votre carte graphique qui effectuera les calculs sur du matériel spécialement conçu pour de telles choses (c.-à-d. .

Questions connexes