#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 также является одним из вариантов — зависит от ваших требований