Лучшая практика для обработки векторной / матричной математики?

#c# #arrays #matrix

#c# #массивы #матрица

Вопрос:

Я пытаюсь найти наилучший способ обработки векторных свойств в C #. Я пишу программу, которая выполняет преобразования системы координат в трехмерном пространстве. Некоторые свойства моих объектов будут представлять собой массивы из 3 элементов (соответствующие осям X, Y и Z), А другие будут представлять собой матрицы 3 на 3 (XX, XY, XZ, YX и т. Д.).

Я сузил его до 3 вариантов:

  • Просто используйте обычные массивы (т. е. double[3] )
  • Создание пользовательских классов со свойствами на основе осей
  • Используйте структуры со свойствами на основе осей

Это новый тип проблем для меня, поэтому я хотел обратиться к сообществу, чтобы узнать, что другие делали в подобных ситуациях. Каковы плюсы / минусы описанных выше подходов? Существуют ли какие-либо механизмы, уже встроенные в C # или .NET framework для обработки такого рода вещей?

Комментарии:

1. Лучший способ — использовать Matlab dll для выполнения matrix math и вызвать Matlab из c #.

2. @fubo Спасибо за ответ. Могу я спросить, почему вы рекомендуете использовать классы? И я предполагаю, что вы бы создали класс для векторов (X, Y, Z), а другой для матриц (XX, XY, XZ, YZ, YY, YZ, ZX, ZY, ZZ) или вы бы как-то объединили их?

3. Существуют стандартные типы для векторов , при этом реализации ориентированы на использование инструкций процессора, оптимизированных для такого рода вещей (это активная область интересов, особенно для .NET Core). Помимо этого, существует множество библиотек . Большинство из них также сосредоточены на производительности, поскольку это имеет тенденцию быть, когда у вас есть векторы и матрицы — обычно у вас их несколько, с большим количеством операций над ними.

4. @jdweng вау! Я не знал, что вы можете это сделать!! Мне придется погрузиться в это. Спасибо за совет!

5. @Steve Матрица может быть public class Point { public double X { get; set; } public double Y { get; set; } public double Z { get; set; } } public class Matrix { public Point P1 { get; set; } public Point P2 { get; set; } public Point P3 { get; set; } } Matlab также является одним из вариантов — зависит от ваших требований