public static Vec4d[] TriangulatePoints(
double[,] projMatr1, double[,] projMatr2,
IEnumerable<Point2d> projPoints1, IEnumerable<Point2d> projPoints2)
{
if (projMatr1 == null)
throw new ArgumentNullException(nameof(projMatr1));
if (projMatr2 == null)
throw new ArgumentNullException(nameof(projMatr2));
if (projPoints1 == null)
throw new ArgumentNullException(nameof(projPoints1));
if (projPoints2 == null)
throw new ArgumentNullException(nameof(projPoints2));
if (projMatr1.GetLength(0) != 3 && projMatr1.GetLength(1) != 4)
throw new ArgumentException("projMatr1 != double[3,4]");
if (projMatr2.GetLength(0) != 3 && projMatr2.GetLength(1) != 4)
throw new ArgumentException("projMatr2 != double[3,4]");
Point2d[] projPoints1Array = EnumerableEx.ToArray(projPoints1);
Point2d[] projPoints2Array = EnumerableEx.ToArray(projPoints2);
var points4D = new Vec4d[projPoints1Array.Length];
NativeMethods.calib3d_triangulatePoints_array(
projMatr1, projMatr2,
projPoints1Array, projPoints1Array.Length,
projPoints2Array, projPoints2Array.Length,
points4D);
return points4D;
}
#endregion