2010-04-08 3 views
1

Я ищу библиотеку C++, которая позволяет легко интегрировать матрицы преобразования координат (CTM) в мое приложение. Вы можете узнать CTM из PDF или PostScript.Библиотека C++ для матриц преобразования координат (CTM)?

Для одного проекта мы используем C++/Qt4 в качестве рамки, которая предлагает класс QTransform, который предоставляет такие методы, как .translate(double x, double y) или .rotate(double degrees).

После выполнения некоторых преобразований это позволило мне получить все 6 значений CTM, которые я мог бы использовать в библиотеке PDF или использовать матрицу преобразования в файлах экспорта. API Qt также позволяет произвольно отображать полигоны (QPolygon), прямоугольники (QRect) и другие примитивные структуры данных в преобразованные системы координат.

Итак, в основном я ищу что-то похожее на то, что Qt предоставляет, но без необходимости использования Qt.

Я знаю, что сам мог бы выполнять матричные умножения, но мне это не очень интересно, так как я очень уверен, что кто-то уже решил эту проблему, поэтому, пожалуйста, не связывайтесь с книгами или другими руководствами о том, как умножить матрицы.

Спасибо!

ответ

1

Почему бы просто не использовать Qt? Он делает то, что вы хотите, является открытым исходным кодом (LGPL, я думаю), и вы должны иметь возможность ссылаться только на класс QTransform.

+0

Да, к сожалению, класс QTransform не является частью QtCore (с которым мне все будет в порядке), но вместо этого часть QtGui. Это будет тонна накладных расходов, не говоря уже о зависимостях от X11 и т. Д. Это добавит около 15 МБ дополнительных библиотек, чтобы использовать только одну функцию этой библиотеки. – BastiBen

+0

Вы можете взять класс QTransform, сделать файлы .h и .cpp только для этого класса и включить их так же, как и ваши собственные классы (возможно, вывести класс из класса, чтобы удалить любые дополнительные функции-члены, которые вы не хотите). Или сверните свой собственный класс преобразования, основанный на коде из версии Qt. – Amos

+0

Звучит как разумный способ сделать это, к сожалению, это привяжет меня к условиям лицензирования Qt - что приведет к тому, что этот код будет в библиотеку, которая должна быть динамически связана. – BastiBen

0

Вы считаете OpenGL? Он может не только выполнять типы преобразований, которые вы ищете (линейные преобразования до 4x4), но он может, как правило, разгружать работу на вашей видеокарте, которая будет выполнять вычисления на оборудовании, специально предназначенном для таких вещей (то есть это быстро) ,