Сервис браузера SQL Server http://msdn.microsoft.com/en-us/library/ms181087.aspx
Есть немало проектов, которые выбрали для этого Generic Graphics Toolkit . GMTL там хороший - он довольно маленький, очень функциональный и используется достаточно широко, чтобы быть очень надежным. OpenSG, VRJuggler и другие проекты все переключились на использование этого вместо собственной ручной математики вертора / матрицы.
Я нашел это довольно приятным - он делает все с помощью шаблонов, поэтому он очень гибкий и очень быстрый .
Изменить:
После обсуждения комментариев и правок я подумал, что выкину дополнительную информацию о преимуществах и недостатках конкретных реализаций, а также о том, почему вы можете выбрать одно вместо другого, учитывая вашу ситуацию.
GMTL -
Преимущества: Простой API, специально разработанный для графических движков. Включает в себя множество примитивных типов, ориентированных на рендеринг (например, плоскости, AABB, четвертичные с множественной интерполяцией и т. Д.), Которых нет ни в каких других пакетах. Очень низкие накладные расходы на память, довольно быстрые, простые в использовании.
Недостатки: API очень ориентирован именно на рендеринг и графику. Не включает матрицы общего назначения (NxM), разложение и решение матриц и т. Д., Так как они выходят за рамки традиционных графических / геометрических приложений.
Eigen -
Преимущества: Clean API , довольно проста в использовании. Включает модуль Geometry с кватернионами и геометрическими преобразованиями. Низкие накладные расходы на память. Полное, высокопроизводительное решение больших матриц NxN и другие математические процедуры общего назначения.
Недостатки: может быть немного больше возможностей, чем вы хотите (?). Меньшее количество специальных процедур для геометрической обработки / визуализации по сравнению с GMTL (например, определение углов Эйлера и т. Д.).
IMSL -
Преимущества: Очень полная числовая библиотека. Очень и очень быстро (предположительно, самый быстрый решатель). Безусловно, самый большой и полный математический API. Имеет коммерческую поддержку, зрелость и стабильность.
Недостатки: Стоимость - недешево. Очень мало методов, специфичных для геометрии / рендеринга, поэтому вам нужно будет использовать свой собственный поверх классов линейной алгебры.
NT2 -
Преимущества: Предоставляет синтаксис, более знакомый, если вы привыкли к MATLAB. Обеспечивает полную декомпозицию и решение для больших матриц и т. Д.
Недостатки: математические, не сфокусированные на рендеринге. Вероятно, не такой производительный, как Eigen.
LAPACK -
Преимущества: Очень стабильные, проверенные алгоритмы. Был здесь уже давно. Полное решение матрицы, и т. д. Множество вариантов непонятной математики.
Недостатки: В некоторых случаях не такая высокая производительность. Портировано из Fortran, со странным API для использования.
Лично для меня все сводится к одному вопросу - как вы собираетесь это использовать. Если вы сосредоточены только на рендеринге и графике, мне понравится Generic Graphics Toolkit , поскольку он хорошо работает и поддерживает многие полезные операции рендеринга из коробки без необходимости реализовывать свои собственные. Если вам нужно решение матриц общего назначения (например, SVD или LU-разложение больших матриц), я бы выбрал Eigen , поскольку он обрабатывает это, предоставляет некоторые геометрические операции и очень эффективен с большими матричными решениями. . Возможно, вам придется написать больше ваших собственных графических / геометрических операций (поверх их матриц / векторов), но это не так уж плохо.
Множество вариантов непонятной математики.Недостатки: В некоторых случаях не такая высокая производительность. Портировано из Фортрана, со странным API для использования.
Лично для меня все сводится к одному вопросу - как вы собираетесь это использовать. Если вы сосредоточены только на рендеринге и графике, мне понравится Generic Graphics Toolkit , поскольку он хорошо работает и поддерживает множество полезных операций рендеринга из коробки, без необходимости реализовывать свои собственные. Если вам нужно решение матриц общего назначения (например, SVD или LU-разложение больших матриц), я бы выбрал Eigen , поскольку он обрабатывает это, предоставляет некоторые геометрические операции и очень эффективен с большими матричными решениями. . Возможно, вам придется написать больше ваших собственных графических / геометрических операций (поверх их матриц / векторов), но это не так уж плохо.
Множество вариантов непонятной математики.Недостатки: В некоторых случаях не такая высокая производительность. Портировано из Фортрана, со странным API для использования.
Лично для меня все сводится к одному вопросу - как вы собираетесь это использовать. Если вы сосредоточены только на рендеринге и графике, мне понравится Generic Graphics Toolkit , поскольку он хорошо работает и поддерживает многие полезные операции рендеринга из коробки без необходимости реализовывать свои собственные. Если вам нужно решение матриц общего назначения (например, SVD или LU-разложение больших матриц), я бы выбрал Eigen , поскольку он обрабатывает это, предоставляет некоторые геометрические операции и очень эффективен с большими матричными решениями. . Возможно, вам придется написать больше ваших собственных графических / геометрических операций (поверх их матриц / векторов), но это не так уж плохо.
В некоторых случаях не такая высокая производительность. Портировано из Фортрана, со странным API для использования.Лично для меня все сводится к одному вопросу - как вы собираетесь это использовать. Если вы сосредоточены только на рендеринге и графике, мне понравится Generic Graphics Toolkit , поскольку он хорошо работает и поддерживает многие полезные операции рендеринга из коробки без необходимости реализовывать свои собственные. Если вам нужно решение матриц общего назначения (например, SVD или LU-разложение больших матриц), я бы выбрал Eigen , поскольку он обрабатывает это, предоставляет некоторые геометрические операции и очень эффективен с большими матричными решениями. . Возможно, вам придется написать больше ваших собственных графических / геометрических операций (поверх их матриц / векторов), но это не так уж плохо.
В некоторых случаях не такая высокая производительность. Портировано из Fortran, со странным API для использования.Лично для меня все сводится к одному вопросу - как вы собираетесь это использовать. Если вы сосредоточены только на рендеринге и графике, мне понравится Generic Graphics Toolkit , поскольку он хорошо работает и поддерживает многие полезные операции рендеринга из коробки без необходимости реализовывать свои собственные. Если вам нужно решение матриц общего назначения (например, SVD или LU-разложение больших матриц), я бы выбрал Eigen , поскольку он обрабатывает это, предоставляет некоторые геометрические операции и очень эффективен с большими матричными решениями. . Возможно, вам придется написать больше ваших собственных графических / геометрических операций (поверх их матриц / векторов), но это не так уж плохо.
со странным API для использования.Лично для меня все сводится к одному вопросу - как вы планируете это использовать. Если вы сосредоточены только на рендеринге и графике, мне понравится Generic Graphics Toolkit , поскольку он хорошо работает и поддерживает многие полезные операции рендеринга из коробки без необходимости реализовывать свои собственные. Если вам нужно решение матриц общего назначения (например, SVD или LU-разложение больших матриц), я бы выбрал Eigen , поскольку он обрабатывает это, предоставляет некоторые геометрические операции и очень эффективен с большими матричными решениями. . Возможно, вам придется написать больше ваших собственных графических / геометрических операций (поверх их матриц / векторов), но это не так уж плохо.
со странным API для использования.Лично для меня все сводится к одному вопросу - как вы планируете это использовать. Если вы сосредоточены только на рендеринге и графике, мне понравится Generic Graphics Toolkit , поскольку он хорошо работает и поддерживает множество полезных операций рендеринга из коробки, без необходимости реализовывать свои собственные. Если вам нужно решение матриц общего назначения (например, SVD или LU-разложение больших матриц), я бы выбрал Eigen , поскольку он обрабатывает это, предоставляет некоторые геометрические операции и очень эффективен с большими матричными решениями. . Возможно, вам придется написать больше ваших собственных графических / геометрических операций (поверх их матриц / векторов), но это не так уж плохо.
Я сосредоточен только на рендеринге и графике, мне нравится Generic Graphics Toolkit , поскольку он хорошо работает и поддерживает множество полезных операций рендеринга из коробки без необходимости реализовывать свои собственные. Если вам нужно решение матриц общего назначения (например, SVD или LU-разложение больших матриц), я бы выбрал Eigen , поскольку он обрабатывает это, предоставляет некоторые геометрические операции и очень эффективен с большими матричными решениями. . Возможно, вам придется написать больше ваших собственных графических / геометрических операций (поверх их матриц / векторов), но это не так уж плохо. Я сосредоточен только на рендеринге и графике, мне нравится Generic Graphics Toolkit , поскольку он хорошо работает и поддерживает множество полезных операций рендеринга из коробки без необходимости реализовывать свои собственные. Если вам нужно решение матриц общего назначения (например, SVD или LU-разложение больших матриц), я бы выбрал Eigen , поскольку он обрабатывает это, предоставляет некоторые геометрические операции и очень эффективен с большими матричными решениями. . Возможно, вам придется написать больше ваших собственных графических / геометрических операций (поверх их матриц / векторов), но это не так уж плохо. SVD или LU-разложение больших матриц), я бы выбрал Eigen , поскольку он обрабатывает это, предоставляет некоторые геометрические операции и очень эффективен с решениями для больших матриц. Возможно, вам придется написать больше ваших собственных графических / геометрических операций (поверх их матриц / векторов), но это не так уж плохо. SVD или LU-разложение больших матриц), я бы выбрал Eigen , поскольку он обрабатывает это, предоставляет некоторые геометрические операции и очень эффективен с большими матричными решениями. Возможно, вам придется написать больше ваших собственных графических / геометрических операций (поверх их матриц / векторов), но это не так уж плохо.Я слышал хорошие отзывы о Eigen и NT2 , но лично не использовал ни то, ни другое. Также есть Boost.UBLAS , который, как мне кажется, становится слишком длинным. Разработчики NT2 создают следующую версию с намерением включить ее в Boost, чтобы это могло что-то значить.
My lin. alg. потребности не выходят за рамки корпуса матрицы 4x4, поэтому я не могу комментировать расширенную функциональность; Я просто указываю на несколько вариантов.
Я новичок в этой теме, поэтому не могу сказать много, но BLAS в значительной степени является стандартом в научных вычислениях. BLAS на самом деле является стандартом API, который имеет множество реализаций. Честно говоря, я не уверен, какие реализации наиболее популярны и почему.
Если вы хотите также иметь возможность выполнять обычные операции линейной алгебры (решения систем, регрессия наименьших квадратов, декомпозиция и т. Д.), Посмотрите LAPACK .
Ладно, думаю, я знаю, что вы ищете. Похоже, что GGT - довольно хорошее решение, как предложил Рид Копси.
Лично мы свернули нашу небольшую библиотеку, потому что мы много работаем с рациональными точками - множеством рациональных NURBS и Безье.
Оказывается, что это так. большинство библиотек 3D-графики выполняют вычисления с проективными точками, которые не имеют основы в проективной математике, потому что именно они дают вам нужный ответ. В итоге мы использовали точки Грассмана, которые имеют прочную теоретическую основу и уменьшили количество типов точек. Точки Грассмана - это в основном те же вычисления, которые люди используют сейчас, с преимуществом надежной теории. Что наиболее важно, это проясняет ситуацию в нашем сознании, поэтому у нас становится меньше ошибок. Рон Гольдман написал статью о точках Грассмана в компьютерной графике под названием «Алгебраические и геометрические основы компьютерной графики» .
Не имеет прямого отношения к вашему вопросу, но интересное чтение.
Я добавлю голосование за Эйгена: я портировал много кода (3D-геометрия, линейная алгебра и дифференциальные уравнения) из разных библиотек в эту - улучшение производительности и читаемости кода почти во всех случаях.
Одно из преимуществ, о котором не упоминалось: очень легко использовать SSE с Eigen, что значительно повышает производительность операций 2D-3D (где все может быть дополнено до 128 бит).
Так что я очень критичный человек и полагаю, собираюсь ли я инвестировать в библиотеке, мне лучше знать, во что я ввязываюсь. Я считаю, что при тщательном изучении лучше отказаться от критики и отказаться от лести; то, что с этим не так, имеет гораздо больше последствий для будущего, чем то, что правильно. Поэтому я собираюсь немного переборщить, чтобы дать такой ответ, который помог бы мне, и я надеюсь, поможет другим, кто может пройти этот путь. Имейте в виду, что это основано на том небольшом обзоре / тестировании, который я провел с этими библиотеками. О, и я украл некоторые положительные описания от Рида.
Я упомяну, что я пошел с GMTL, несмотря на это » идиосинкразии, потому что небезопасность Eigen2 была слишком большой обратной стороной. Но недавно я узнал, что следующий выпуск Eigen2 будет содержать определения, которые отключат код выравнивания и сделают его безопасным. Так что я могу переключиться.
Обновление : Я переключился на Eigen3. Несмотря на его особенности, его масштаб и элегантность слишком сложно игнорировать, а оптимизации, делающие его небезопасным, можно отключить с помощью определения.
Преимущества: LGPL MPL2, Clean , хорошо продуманный API, довольно простой в использовании. Кажется, в хорошем состоянии с ярким сообществом. Низкие накладные расходы на память. Высокая производительность. Сделано для общей линейной алгебры, но также доступны хорошие геометрические функции. Вся библиотека заголовков, связывание не требуется.
Идиоцинкразия / недостатки: (Некоторых / всего этого можно избежать с помощью некоторых определений, доступных в текущей ветви разработки Eigen3)
Преимущества: LGPL, довольно простой API, специально разработанный для графических движков. Включает в себя множество примитивных типов, предназначенных для рендеринга (например, самолеты, AABB, четвертины с множественной интерполяцией и т. д.), нет ни в каких других пакетах. Очень низкие накладные расходы на память, довольно быстро, легко использовать. Все на основе заголовков, связывание не требуется.
Идиосинкразии / недостатки:
vec1 - vec2
не возвращает
вектор нормали, поэтому length (vecA - vecB)
не работает, даже если vecC = vecA -
vecB
работает. Вы должны заключить его в следующий формат: length (Vec (vecA - vecB))
length (makeCross (vecA, vecB))
gmtl :: length (gmtl :: makeCross (vecA, vecB))
vecA.cross (vecB) .length ()
Не могу сказать, потому что они, похоже, больше заинтересованы в заголовке фрактального изображения своей веб-страницы, чем в содержании. Больше похоже на академический проект, чем на серьезный программный проект.
Последний выпуск более двух лет назад.
По-видимому, документации на английском языке нет, хотя предположительно где-то есть что-то на французском.
Не удалось найти никаких следов сообщества вокруг проекта.
Преимущества: старые и зрелые.
Недостатки:
Если вы ищете высокопроизводительную матрицу / линейную алгебру / оптимизацию для процессоров Intel, я бы посмотрел на библиотеку Intel MKL.
MKL тщательно оптимизирован для обеспечения высокой производительности - большая часть его основана на очень зрелых стандартах BLAS / LAPACK fortran. И его производительность зависит от количества доступных ядер. Масштабируемость без помощи рук с доступными ядрами - это будущее вычислений, и я бы не стал использовать математическую библиотеку для нового проекта, не поддерживающего многоядерные процессоры.
Вкратце, он включает:
Обратной стороной является то, что MKL API может быть довольно сложный в зависимости от необходимых вам процедур. Вы также можете взглянуть на их библиотеку IPP (Integrated Performance Primitives), которая ориентирована на высокопроизводительные операции обработки изображений, но, тем не менее, довольно обширна.
Пол
CenterSpace Software, .NET Math библиотеки, centerpace.net