public static MultiCross ( Autodesk m1, Autodesk m2 ) : Autodesk.Revit.DB.XYZ[] | ||
m1 | Autodesk | left matrix |
m2 | Autodesk | right matrix |
Résultat | Autodesk.Revit.DB.XYZ[] |
/// <summary> /// Add 2 Transform Matrix /// </summary> /// <param name="tran1"></param> /// <param name="tran2"></param> /// <returns></returns> private Transform AddTransform(Transform tran1, Transform tran2) { Autodesk.Revit.DB.XYZ xyz = new Autodesk.Revit.DB.XYZ(0, 0, 0); Transform result = Transform.CreateTranslation(xyz); result.Origin = MathUtil.AddXYZ(tran1.Origin, tran2.Origin); Autodesk.Revit.DB.XYZ[] left = new Autodesk.Revit.DB.XYZ[3]; Autodesk.Revit.DB.XYZ[] right = new Autodesk.Revit.DB.XYZ[3]; for (int i = 0; i < 3; i++) { left[i] = tran1.get_Basis(i); right[i] = tran2.get_Basis(i); } Autodesk.Revit.DB.XYZ[] temp = MathUtil.MultiCross(left, right); for (int i = 0; i < 3; i++) { result.set_Basis(i, temp[i]); } return(result); }
/// <summary> /// rotate 3*3 matrix around X axis /// </summary> /// <param name="origin">matrix to rotate</param> /// <param name="angle"></param> private void RotateX(ref double[,] origin, double angle) { double sin = Math.Sin(angle); double cos = Math.Cos(angle); double[,] rotate = { { 1.0, 0.0, 0.0 }, { 0.0, cos, sin }, { 0.0, -sin, cos } }; origin = MathUtil.MultiCross(m_origin, rotate); }