7

我有两个向量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 });

我基本上想对它们进行交叉乘积,但是找不到官方功能。我知道叉积是一个非常简单的函数,我可以自己编写,但我想使用 API 的函数。

以下两个都对我有用:(在 API 中找不到这样的函数。)

Vector<double> result = v1.CrossProduct(v2);
Vector<double> result = Vector.CrossProduct(v1,v2);

我找到了这个,但是当我尝试编写它时找不到该函数:API Reference

4

2 回答 2

7

对 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;
    }
于 2013-11-16T06:44:52.650 回答
3

您正在访问Math.NET Iridium的 API 文档,这是一个已停止的项目。其目的是将Iridium代码库集成到Math.NET Numerics中,但CrossProduct功能似乎尚未转移,正如Math.NET Numerics Codeplex 站点上的 两个讨论线程中所见。

如果您想使用Math.NET Iridium,该方法肯定可用,您可以从此处CrossProduct下载最新的源代码。

于 2012-08-01T13:15:43.033 回答