Перекрестный продукт с использованием Math.Net Numerics с C#
У меня есть два вектора MathNet.Numerics.LinearAlgebra.Generic.Vector<double>
, вроде следующего:
Vector<double> v1 = new DenseVector(new double[] { 1, 2, 3 });
Vector<double> v2 = new DenseVector(new double[] { 3, 2, 1 });
Я в основном хочу, чтобы CrossProduct их, однако не смог найти официальную функцию. Я знаю, что перекрестный продукт - очень простая функция, которую я могу написать сам, но я хочу использовать функцию API.
Оба из нижеприведенного работают для меня: (Не удалось найти такие функции в API.)
Vector<double> result = v1.CrossProduct(v2);
Vector<double> result = Vector.CrossProduct(v1,v2);
Я нашел это, однако не смог найти функцию, когда попытался написать: Справочник по API
2 ответа
Вы получаете доступ к документации по API для Math.NET Iridium, который является прекращенным проектом. Предполагалось, что кодовая база Iridium должна быть интегрирована в Math.NET Numerics, но, похоже, чтоCrossProduct
функциональность еще не была передана, что можно увидеть в двух обсуждениях на сайте Math.NET Numerics Codeplex.
Если вы хотите использовать Math.NET Iridium, где CrossProduct
Метод, безусловно, доступен, вы можете скачать самый последний исходный код здесь.
Пример метода для перекрестного произведения вектора из 3 элементов.
using DLA = MathNet.Numerics.LinearAlgebra.Double;
public static DLA.Vector Cross(DLA.Vector left, DLA.Vector right)
{
if ((left.Count != 3 || right.Count != 3))
{
string message = "Vectors must have a length of 3.";
throw new Exception(message);
}
DLA.Vector result = new DLA.DenseVector(3);
result[0] = left[1] * right[2] - left[2] * right[1];
result[1] = -left[0] * right[2] + left[2] * right[0];
result[2] = left[0] * right[1] - left[1] * right[0];
return result;
}