[MethodImpl(MethodImplOptions.AggressiveInlining)] // does not fully inline without static V3d TransformM33dPrecomputed_Inline(M33d m, V3d v) { return(new V3d( m.M00 * v.X + m.M01 * v.Y + m.M02 * v.Z, m.M10 * v.X + m.M11 * v.Y + m.M12 * v.Z, m.M20 * v.X + m.M21 * v.Y + m.M22 * v.Z )); }
/// <summary> /// Build a texture coordinate transformation from the given parameters as specified in TextureTransform /// http://gun.teipir.gr/VRML-amgem/spec/part1/nodesRef.html#TextureTransform /// </summary> public static Trafo2d BuildVrmlTextureTrafo(V2d center, double rotation, V2d scale, V2d translation) { M33d C = M33d.Translation(center), Ci = M33d.Translation(-center); M33d R = M33d.Rotation(rotation), Ri = M33d.Rotation(-rotation); M33d S = M33d.Scale(scale), Si = M33d.Scale(1 / scale); M33d T = M33d.Translation(translation), Ti = M33d.Translation(-translation); return(new Trafo2d( Ci * S * R * C * T, Ti * Ci * Ri * Si * C)); }
private M33d Benchmark(Func <M44d, int, int, M33d> method) { M33d sum = M33d.Zero; for (int i = 0; i < count; i++) { sum += method(A[i], rows[i], columns[i]); } return(sum); }
public static void ConsistentWithMatrixScaleTest() { TrafoTesting.GenericTest(rnd => { var scale = rnd.UniformV3d() * 10; var m = M33d.Scale(scale); var r = new Scale3d(scale); var p = rnd.UniformV3d() * rnd.UniformInt(1000); var res = m.Transform(p); var res2 = r.Transform(p); TrafoTesting.AreEqual(res, res2); }); }
public static M33d Version3(M44d m, int row, int column) { M33d rs = new M33d(); for (int k = 0; k < 9; k++) { var i = k / 3; var j = k % 3; var ii = (i < row) ? i : i + 1; var jj = (j < column) ? j : j + 1; rs[k] = m[ii * 4 + jj]; } return(rs); }
public static void NormalFrame() { TrafoTesting.GenericTest((rnd, i) => { var n = rnd.UniformV3d().Normalized; var basis = M33d.NormalFrame(n); Assert.IsTrue(basis.C0.Length.ApproximateEquals(1, 1e-7)); Assert.IsTrue(basis.C1.Length.ApproximateEquals(1, 1e-7)); Assert.IsTrue(basis.C2.Length.ApproximateEquals(1, 1e-7)); Assert.IsTrue(basis.C0.AngleBetween(basis.C1).ApproximateEquals(Constant.PiHalf, 1e-7)); Assert.IsTrue(basis.C0.AngleBetween(basis.C2).ApproximateEquals(Constant.PiHalf, 1e-7)); Assert.IsTrue(basis.C1.AngleBetween(basis.C2).ApproximateEquals(Constant.PiHalf, 1e-7)); }); }
public static M33d Version2(M44d m, int row, int column) { M33d rs = new M33d(); var idx = 0; for (int k = 0; k < 16; k++) { var i = k / 4; var j = k % 4; if (i != row && j != column) { rs[idx++] = m[k]; } } return(rs); }
/// <summary> /// Extracts texture transform from given node. /// </summary> public static Trafo2d ExtractVrmlTextureTrafo(this SymMapBase m) { if (m == null) { return(Trafo2d.Identity); } // get trafo parts var c = (V2d)m.Get <V2f>(Vrml97Sym.center, V2f.Zero); var r = (double)m.Get <float>(Vrml97Sym.rotation, 0.0f); var s = (V2d)m.Get <V2f>(Vrml97Sym.scale, new V2f(1, 1)); var t = (V2d)m.Get <V2f>(Vrml97Sym.translation, V2f.Zero); M33d C = M33d.Translation(c), Ci = M33d.Translation(-c); M33d R = M33d.Rotation(r), Ri = M33d.Rotation(-r); M33d S = M33d.Scale(s), Si = M33d.Scale(1 / s); M33d T = M33d.Translation(t), Ti = M33d.Translation(-t); return(new Trafo2d( Ci * S * R * C * T, Ti * Ci * Ri * Si * C)); }
public static M33d Version1(M44d m, int rowToDelete, int columnToDelete) { M33d result = new M33d(); int checked_row = 0; for (int actual_row = 0; actual_row < 4; actual_row++) { int checked_column = 0; if (actual_row != rowToDelete) { for (int actual_column = 0; actual_column < 4; actual_column++) { if (actual_column != columnToDelete) { result[checked_row, checked_column] = m[actual_row, actual_column]; checked_column++; } } checked_row++; } } return(result); }
static V3d TransformM33dPrecomputed(M33d mat, V3d v) { return(mat.Transform(v)); }
public void Write(M33d x) { Write(x.M00); Write(x.M01); Write(x.M02); Write(x.M10); Write(x.M11); Write(x.M12); Write(x.M20); Write(x.M21); Write(x.M22); }
public M34d(M33d r, V3d t) { M00 = r.M00; M01 = r.M01; M02 = r.M02; M03 = t.X; M10 = r.M10; M11 = r.M11; M12 = r.M12; M13 = t.Y; M20 = r.M20; M21 = r.M21; M22 = r.M22; M23 = t.Z; }