Вопрос или проблема
Я работаю над проектом на C#, в котором мне нужно вращать некоторые векторы. До сих пор я использовал довольно сложное решение с использованием матриц вращения, но теперь мне также нужна поддержка вращения кватернионов (и, вероятно, преобразование из одного в другое).
Большинство библиотек, которые я нахожу, созданы для графической разработки. Однако мне не нужно выводить/рендерить графику. Документация XNA и DirectX показывает детали о классах Matrix, Vector3 и Quaternion, которые, похоже, предоставляют все, что мне нужно. Но они, кажется, немного устарели?
Я действительно не опытен в этой области библиотек и не уверен, есть ли более современные решения или это вообще не имеет значения.
Конечно, было бы здорово, если бы существовала более легковесная библиотека. Поскольку вращение должно выполняться в реальном времени, библиотека должна обеспечивать хорошую производительность.
В итоге я выбрал MonoGame Framework, который является открытой реализацией XNA. Я просто добавил пакет MonoGame.Framework.WindowsDX в мой проект, который предлагал те же пространства имен, что и документация XNA от Microsoft. Так что я мог легко использовать using Microsoft.Xna.Framework;
в своих классах для работы с объектами Quaternion
, Matrix
и Vector3
.
Для меня это кажется хорошим решением, если вам не нужны игровые, графические или рендеринговые функции. Вы просто добавляете пакет NuGet и используете необходимые классы XNA.
Более очевидным выбором могло бы быть использование System.Numerics. Альтернативно, в нашей компании мы разработали библиотеку с открытым исходным кодом Vim.Math3d на основе System.Numerics, объединяющую множество полезных алгоритмов и структур из MonoGame. Для полноты картины мы поддерживаем список аналогичных 3D математических библиотек.
Ответ или решение
Для решения задачи с вращением векторов в проекте C# вы можете рассмотреть несколько подходов и библиотек, учитывая, что ваша задача не включает визуализацию графики, а фокусируется только на математических расчетах.
-
Использование библиотеки MonoGame: Вы уже упомянули о возможности использования MonoGame Framework, который представляет собой современную и открытое источниковое решение для XNA. Подключив пакет
MonoGame.Framework.WindowsDX
через NuGet, вы сможете подключать необходимые пространства имен, такие какMicrosoft.Xna.Framework
, и использовать классыQuaternion
,Matrix
иVector3
. Этот подход хорош, поскольку вы сможете легко спроектировать свою архитектуру, используя известные принципы, и при этом получить доступ к мощным инструментам для работы с 3D-математикой. -
Использование System.Numerics: Альтернативным, но более очевидным выбором является использование пространства имен
System.Numerics
, которое входит в стандартную библиотеку .NET. Данная библиотека предоставляет классыVector3
,Matrix4x4
, а такжеQuaternion
, которые могут быть использованы для выполнения всех необходимых математических операций. Этот вариант является наилучшим, если вы ищете легковесное и эффективное решение без зависимостей от дополнительных библиотек. -
Ваша собственная библиотека: Если требования вашего проекта достаточно специфичны, и вы хотите создать нечто уникальное, можете рассмотреть вариант разработки собственной библиотеки для выполнения 3D-математических расчетов. В этом случае вы сможете включить в неё только те функции, которые нужны вам, а также оптимизировать производительность по своим критериям.
-
Библиотека Vim.Math3D: Если у вас есть возможность использовать сторонние библиотеки, вы также можете обратить внимание на библиотеку Vim.Math3D. Эта библиотека была разработана вашей компанией и сочетает в себе функционал
System.Numerics
с рядом полезных алгоритмов и структур из MonoGame. Это идеальный вариант, если вам нужно больше алгоритмического функционала помимо базовых математических операций. -
Сравнение и выбор: При выборе библиотеки стоит оценить её производительность, активность поддержки и документацию. Если вы планируете много времени уделять разработке, убедитесь, что библиотека активно поддерживается и имеет обширное сообщество. В случае с MonoGame и System.Numerics, обе библиотеки имеют хорошую поддержку и обширную документацию.
В заключение, все перечисленные варианты имеют свои плюсы и минусы. Выбор зависит от ваших конкретных потребностей и предпочтений в работе с библиотеками. Если вам не нужны графические функции, и вы ищете простоту и эффективность, рассмотрите возможность использования System.Numerics
. Если же вам нужны дополнительные функции и алгоритмы, то библиотека Vim.Math3D может стать отличным выбором.