/// <summary> /// Transform the inertia. /// </summary> public static Tensor4 Transform(Tensor4 I, Matrix4x5 T, float mass) { return(Transform(I, T.rotation) + Transform(T.position, mass)); }
/// <summary> /// Inverse the tensor. /// </summary> /// <remarks> /// The operation is working, but unoptimized, yet expensive. /// </remarks> public static Tensor4 Inverse(Tensor4 m) { // Made by my awesome bot github.com/willnode/Matrix-N-Programmer // TODO: Make the bot smarter again, possibly use Cross(x) operation var A4545 = m.eu.u * m.ev.v - m.eu.v * m.ev.u; var A3545 = m.eu.t * m.ev.v - m.eu.v * m.ev.t; var A3445 = m.eu.t * m.ev.u - m.eu.u * m.ev.t; var A2545 = m.eu.z * m.ev.v - m.eu.v * m.ev.z; var A2445 = m.eu.z * m.ev.u - m.eu.u * m.ev.z; var A2345 = m.eu.z * m.ev.t - m.eu.t * m.ev.z; var A1545 = m.eu.y * m.ev.v - m.eu.v * m.ev.y; var A1445 = m.eu.y * m.ev.u - m.eu.u * m.ev.y; var A1345 = m.eu.y * m.ev.t - m.eu.t * m.ev.y; var A1245 = m.eu.y * m.ev.z - m.eu.z * m.ev.y; var A0545 = m.eu.x * m.ev.v - m.eu.v * m.ev.x; var A0445 = m.eu.x * m.ev.u - m.eu.u * m.ev.x; var A0345 = m.eu.x * m.ev.t - m.eu.t * m.ev.x; var A0245 = m.eu.x * m.ev.z - m.eu.z * m.ev.x; var A0145 = m.eu.x * m.ev.y - m.eu.y * m.ev.x; var A4535 = m.et.u * m.ev.v - m.et.v * m.ev.u; var A3535 = m.et.t * m.ev.v - m.et.v * m.ev.t; var A3435 = m.et.t * m.ev.u - m.et.u * m.ev.t; var A2535 = m.et.z * m.ev.v - m.et.v * m.ev.z; var A2435 = m.et.z * m.ev.u - m.et.u * m.ev.z; var A2335 = m.et.z * m.ev.t - m.et.t * m.ev.z; var A1535 = m.et.y * m.ev.v - m.et.v * m.ev.y; var A1435 = m.et.y * m.ev.u - m.et.u * m.ev.y; var A1335 = m.et.y * m.ev.t - m.et.t * m.ev.y; var A1235 = m.et.y * m.ev.z - m.et.z * m.ev.y; var A4534 = m.et.u * m.eu.v - m.et.v * m.eu.u; var A3534 = m.et.t * m.eu.v - m.et.v * m.eu.t; var A3434 = m.et.t * m.eu.u - m.et.u * m.eu.t; var A2534 = m.et.z * m.eu.v - m.et.v * m.eu.z; var A2434 = m.et.z * m.eu.u - m.et.u * m.eu.z; var A2334 = m.et.z * m.eu.t - m.et.t * m.eu.z; var A1534 = m.et.y * m.eu.v - m.et.v * m.eu.y; var A1434 = m.et.y * m.eu.u - m.et.u * m.eu.y; var A1334 = m.et.y * m.eu.t - m.et.t * m.eu.y; var A1234 = m.et.y * m.eu.z - m.et.z * m.eu.y; var A0535 = m.et.x * m.ev.v - m.et.v * m.ev.x; var A0435 = m.et.x * m.ev.u - m.et.u * m.ev.x; var A0335 = m.et.x * m.ev.t - m.et.t * m.ev.x; var A0235 = m.et.x * m.ev.z - m.et.z * m.ev.x; var A0534 = m.et.x * m.eu.v - m.et.v * m.eu.x; var A0434 = m.et.x * m.eu.u - m.et.u * m.eu.x; var A0334 = m.et.x * m.eu.t - m.et.t * m.eu.x; var A0234 = m.et.x * m.eu.z - m.et.z * m.eu.x; var A0135 = m.et.x * m.ev.y - m.et.y * m.ev.x; var A0134 = m.et.x * m.eu.y - m.et.y * m.eu.x; var B345345 = m.et.t * A4545 - m.et.u * A3545 + m.et.v * A3445; var B245345 = m.et.z * A4545 - m.et.u * A2545 + m.et.v * A2445; var B235345 = m.et.z * A3545 - m.et.t * A2545 + m.et.v * A2345; var B234345 = m.et.z * A3445 - m.et.t * A2445 + m.et.u * A2345; var B145345 = m.et.y * A4545 - m.et.u * A1545 + m.et.v * A1445; var B135345 = m.et.y * A3545 - m.et.t * A1545 + m.et.v * A1345; var B134345 = m.et.y * A3445 - m.et.t * A1445 + m.et.u * A1345; var B125345 = m.et.y * A2545 - m.et.z * A1545 + m.et.v * A1245; var B124345 = m.et.y * A2445 - m.et.z * A1445 + m.et.u * A1245; var B123345 = m.et.y * A2345 - m.et.z * A1345 + m.et.t * A1245; var B045345 = m.et.x * A4545 - m.et.u * A0545 + m.et.v * A0445; var B035345 = m.et.x * A3545 - m.et.t * A0545 + m.et.v * A0345; var B034345 = m.et.x * A3445 - m.et.t * A0445 + m.et.u * A0345; var B025345 = m.et.x * A2545 - m.et.z * A0545 + m.et.v * A0245; var B024345 = m.et.x * A2445 - m.et.z * A0445 + m.et.u * A0245; var B023345 = m.et.x * A2345 - m.et.z * A0345 + m.et.t * A0245; var B015345 = m.et.x * A1545 - m.et.y * A0545 + m.et.v * A0145; var B014345 = m.et.x * A1445 - m.et.y * A0445 + m.et.u * A0145; var B013345 = m.et.x * A1345 - m.et.y * A0345 + m.et.t * A0145; var B012345 = m.et.x * A1245 - m.et.y * A0245 + m.et.z * A0145; var B345245 = m.ez.t * A4545 - m.ez.u * A3545 + m.ez.v * A3445; var B245245 = m.ez.z * A4545 - m.ez.u * A2545 + m.ez.v * A2445; var B235245 = m.ez.z * A3545 - m.ez.t * A2545 + m.ez.v * A2345; var B234245 = m.ez.z * A3445 - m.ez.t * A2445 + m.ez.u * A2345; var B145245 = m.ez.y * A4545 - m.ez.u * A1545 + m.ez.v * A1445; var B135245 = m.ez.y * A3545 - m.ez.t * A1545 + m.ez.v * A1345; var B134245 = m.ez.y * A3445 - m.ez.t * A1445 + m.ez.u * A1345; var B125245 = m.ez.y * A2545 - m.ez.z * A1545 + m.ez.v * A1245; var B124245 = m.ez.y * A2445 - m.ez.z * A1445 + m.ez.u * A1245; var B123245 = m.ez.y * A2345 - m.ez.z * A1345 + m.ez.t * A1245; var B345235 = m.ez.t * A4535 - m.ez.u * A3535 + m.ez.v * A3435; var B245235 = m.ez.z * A4535 - m.ez.u * A2535 + m.ez.v * A2435; var B235235 = m.ez.z * A3535 - m.ez.t * A2535 + m.ez.v * A2335; var B234235 = m.ez.z * A3435 - m.ez.t * A2435 + m.ez.u * A2335; var B145235 = m.ez.y * A4535 - m.ez.u * A1535 + m.ez.v * A1435; var B135235 = m.ez.y * A3535 - m.ez.t * A1535 + m.ez.v * A1335; var B134235 = m.ez.y * A3435 - m.ez.t * A1435 + m.ez.u * A1335; var B125235 = m.ez.y * A2535 - m.ez.z * A1535 + m.ez.v * A1235; var B124235 = m.ez.y * A2435 - m.ez.z * A1435 + m.ez.u * A1235; var B123235 = m.ez.y * A2335 - m.ez.z * A1335 + m.ez.t * A1235; var B345234 = m.ez.t * A4534 - m.ez.u * A3534 + m.ez.v * A3434; var B245234 = m.ez.z * A4534 - m.ez.u * A2534 + m.ez.v * A2434; var B235234 = m.ez.z * A3534 - m.ez.t * A2534 + m.ez.v * A2334; var B234234 = m.ez.z * A3434 - m.ez.t * A2434 + m.ez.u * A2334; var B145234 = m.ez.y * A4534 - m.ez.u * A1534 + m.ez.v * A1434; var B135234 = m.ez.y * A3534 - m.ez.t * A1534 + m.ez.v * A1334; var B134234 = m.ez.y * A3434 - m.ez.t * A1434 + m.ez.u * A1334; var B125234 = m.ez.y * A2534 - m.ez.z * A1534 + m.ez.v * A1234; var B124234 = m.ez.y * A2434 - m.ez.z * A1434 + m.ez.u * A1234; var B123234 = m.ez.y * A2334 - m.ez.z * A1334 + m.ez.t * A1234; var B045245 = m.ez.x * A4545 - m.ez.u * A0545 + m.ez.v * A0445; var B035245 = m.ez.x * A3545 - m.ez.t * A0545 + m.ez.v * A0345; var B034245 = m.ez.x * A3445 - m.ez.t * A0445 + m.ez.u * A0345; var B025245 = m.ez.x * A2545 - m.ez.z * A0545 + m.ez.v * A0245; var B024245 = m.ez.x * A2445 - m.ez.z * A0445 + m.ez.u * A0245; var B023245 = m.ez.x * A2345 - m.ez.z * A0345 + m.ez.t * A0245; var B045235 = m.ez.x * A4535 - m.ez.u * A0535 + m.ez.v * A0435; var B035235 = m.ez.x * A3535 - m.ez.t * A0535 + m.ez.v * A0335; var B034235 = m.ez.x * A3435 - m.ez.t * A0435 + m.ez.u * A0335; var B025235 = m.ez.x * A2535 - m.ez.z * A0535 + m.ez.v * A0235; var B024235 = m.ez.x * A2435 - m.ez.z * A0435 + m.ez.u * A0235; var B023235 = m.ez.x * A2335 - m.ez.z * A0335 + m.ez.t * A0235; var B045234 = m.ez.x * A4534 - m.ez.u * A0534 + m.ez.v * A0434; var B035234 = m.ez.x * A3534 - m.ez.t * A0534 + m.ez.v * A0334; var B034234 = m.ez.x * A3434 - m.ez.t * A0434 + m.ez.u * A0334; var B025234 = m.ez.x * A2534 - m.ez.z * A0534 + m.ez.v * A0234; var B024234 = m.ez.x * A2434 - m.ez.z * A0434 + m.ez.u * A0234; var B023234 = m.ez.x * A2334 - m.ez.z * A0334 + m.ez.t * A0234; var B015245 = m.ez.x * A1545 - m.ez.y * A0545 + m.ez.v * A0145; var B014245 = m.ez.x * A1445 - m.ez.y * A0445 + m.ez.u * A0145; var B013245 = m.ez.x * A1345 - m.ez.y * A0345 + m.ez.t * A0145; var B015235 = m.ez.x * A1535 - m.ez.y * A0535 + m.ez.v * A0135; var B014235 = m.ez.x * A1435 - m.ez.y * A0435 + m.ez.u * A0135; var B013235 = m.ez.x * A1335 - m.ez.y * A0335 + m.ez.t * A0135; var B015234 = m.ez.x * A1534 - m.ez.y * A0534 + m.ez.v * A0134; var B014234 = m.ez.x * A1434 - m.ez.y * A0434 + m.ez.u * A0134; var B013234 = m.ez.x * A1334 - m.ez.y * A0334 + m.ez.t * A0134; var B012245 = m.ez.x * A1245 - m.ez.y * A0245 + m.ez.z * A0145; var B012235 = m.ez.x * A1235 - m.ez.y * A0235 + m.ez.z * A0135; var B012234 = m.ez.x * A1234 - m.ez.y * A0234 + m.ez.z * A0134; var C23452345 = m.ez.z * B345345 - m.ez.t * B245345 + m.ez.u * B235345 - m.ez.v * B234345; var C13452345 = m.ez.y * B345345 - m.ez.t * B145345 + m.ez.u * B135345 - m.ez.v * B134345; var C12452345 = m.ez.y * B245345 - m.ez.z * B145345 + m.ez.u * B125345 - m.ez.v * B124345; var C12352345 = m.ez.y * B235345 - m.ez.z * B135345 + m.ez.t * B125345 - m.ez.v * B123345; var C12342345 = m.ez.y * B234345 - m.ez.z * B134345 + m.ez.t * B124345 - m.ez.u * B123345; var C03452345 = m.ez.x * B345345 - m.ez.t * B045345 + m.ez.u * B035345 - m.ez.v * B034345; var C02452345 = m.ez.x * B245345 - m.ez.z * B045345 + m.ez.u * B025345 - m.ez.v * B024345; var C02352345 = m.ez.x * B235345 - m.ez.z * B035345 + m.ez.t * B025345 - m.ez.v * B023345; var C02342345 = m.ez.x * B234345 - m.ez.z * B034345 + m.ez.t * B024345 - m.ez.u * B023345; var C01452345 = m.ez.x * B145345 - m.ez.y * B045345 + m.ez.u * B015345 - m.ez.v * B014345; var C01352345 = m.ez.x * B135345 - m.ez.y * B035345 + m.ez.t * B015345 - m.ez.v * B013345; var C01342345 = m.ez.x * B134345 - m.ez.y * B034345 + m.ez.t * B014345 - m.ez.u * B013345; var C01252345 = m.ez.x * B125345 - m.ez.y * B025345 + m.ez.z * B015345 - m.ez.v * B012345; var C01242345 = m.ez.x * B124345 - m.ez.y * B024345 + m.ez.z * B014345 - m.ez.u * B012345; var C01232345 = m.ez.x * B123345 - m.ez.y * B023345 + m.ez.z * B013345 - m.ez.t * B012345; var C23451345 = m.ey.z * B345345 - m.ey.t * B245345 + m.ey.u * B235345 - m.ey.v * B234345; var C13451345 = m.ey.y * B345345 - m.ey.t * B145345 + m.ey.u * B135345 - m.ey.v * B134345; var C12451345 = m.ey.y * B245345 - m.ey.z * B145345 + m.ey.u * B125345 - m.ey.v * B124345; var C12351345 = m.ey.y * B235345 - m.ey.z * B135345 + m.ey.t * B125345 - m.ey.v * B123345; var C12341345 = m.ey.y * B234345 - m.ey.z * B134345 + m.ey.t * B124345 - m.ey.u * B123345; var C23451245 = m.ey.z * B345245 - m.ey.t * B245245 + m.ey.u * B235245 - m.ey.v * B234245; var C13451245 = m.ey.y * B345245 - m.ey.t * B145245 + m.ey.u * B135245 - m.ey.v * B134245; var C12451245 = m.ey.y * B245245 - m.ey.z * B145245 + m.ey.u * B125245 - m.ey.v * B124245; var C12351245 = m.ey.y * B235245 - m.ey.z * B135245 + m.ey.t * B125245 - m.ey.v * B123245; var C12341245 = m.ey.y * B234245 - m.ey.z * B134245 + m.ey.t * B124245 - m.ey.u * B123245; var C23451235 = m.ey.z * B345235 - m.ey.t * B245235 + m.ey.u * B235235 - m.ey.v * B234235; var C13451235 = m.ey.y * B345235 - m.ey.t * B145235 + m.ey.u * B135235 - m.ey.v * B134235; var C12451235 = m.ey.y * B245235 - m.ey.z * B145235 + m.ey.u * B125235 - m.ey.v * B124235; var C12351235 = m.ey.y * B235235 - m.ey.z * B135235 + m.ey.t * B125235 - m.ey.v * B123235; var C12341235 = m.ey.y * B234235 - m.ey.z * B134235 + m.ey.t * B124235 - m.ey.u * B123235; var C23451234 = m.ey.z * B345234 - m.ey.t * B245234 + m.ey.u * B235234 - m.ey.v * B234234; var C13451234 = m.ey.y * B345234 - m.ey.t * B145234 + m.ey.u * B135234 - m.ey.v * B134234; var C12451234 = m.ey.y * B245234 - m.ey.z * B145234 + m.ey.u * B125234 - m.ey.v * B124234; var C12351234 = m.ey.y * B235234 - m.ey.z * B135234 + m.ey.t * B125234 - m.ey.v * B123234; var C12341234 = m.ey.y * B234234 - m.ey.z * B134234 + m.ey.t * B124234 - m.ey.u * B123234; var C03451345 = m.ey.x * B345345 - m.ey.t * B045345 + m.ey.u * B035345 - m.ey.v * B034345; var C02451345 = m.ey.x * B245345 - m.ey.z * B045345 + m.ey.u * B025345 - m.ey.v * B024345; var C02351345 = m.ey.x * B235345 - m.ey.z * B035345 + m.ey.t * B025345 - m.ey.v * B023345; var C02341345 = m.ey.x * B234345 - m.ey.z * B034345 + m.ey.t * B024345 - m.ey.u * B023345; var C03451245 = m.ey.x * B345245 - m.ey.t * B045245 + m.ey.u * B035245 - m.ey.v * B034245; var C02451245 = m.ey.x * B245245 - m.ey.z * B045245 + m.ey.u * B025245 - m.ey.v * B024245; var C02351245 = m.ey.x * B235245 - m.ey.z * B035245 + m.ey.t * B025245 - m.ey.v * B023245; var C02341245 = m.ey.x * B234245 - m.ey.z * B034245 + m.ey.t * B024245 - m.ey.u * B023245; var C03451235 = m.ey.x * B345235 - m.ey.t * B045235 + m.ey.u * B035235 - m.ey.v * B034235; var C02451235 = m.ey.x * B245235 - m.ey.z * B045235 + m.ey.u * B025235 - m.ey.v * B024235; var C02351235 = m.ey.x * B235235 - m.ey.z * B035235 + m.ey.t * B025235 - m.ey.v * B023235; var C02341235 = m.ey.x * B234235 - m.ey.z * B034235 + m.ey.t * B024235 - m.ey.u * B023235; var C03451234 = m.ey.x * B345234 - m.ey.t * B045234 + m.ey.u * B035234 - m.ey.v * B034234; var C02451234 = m.ey.x * B245234 - m.ey.z * B045234 + m.ey.u * B025234 - m.ey.v * B024234; var C02351234 = m.ey.x * B235234 - m.ey.z * B035234 + m.ey.t * B025234 - m.ey.v * B023234; var C02341234 = m.ey.x * B234234 - m.ey.z * B034234 + m.ey.t * B024234 - m.ey.u * B023234; var C01451345 = m.ey.x * B145345 - m.ey.y * B045345 + m.ey.u * B015345 - m.ey.v * B014345; var C01351345 = m.ey.x * B135345 - m.ey.y * B035345 + m.ey.t * B015345 - m.ey.v * B013345; var C01341345 = m.ey.x * B134345 - m.ey.y * B034345 + m.ey.t * B014345 - m.ey.u * B013345; var C01451245 = m.ey.x * B145245 - m.ey.y * B045245 + m.ey.u * B015245 - m.ey.v * B014245; var C01351245 = m.ey.x * B135245 - m.ey.y * B035245 + m.ey.t * B015245 - m.ey.v * B013245; var C01341245 = m.ey.x * B134245 - m.ey.y * B034245 + m.ey.t * B014245 - m.ey.u * B013245; var C01451235 = m.ey.x * B145235 - m.ey.y * B045235 + m.ey.u * B015235 - m.ey.v * B014235; var C01351235 = m.ey.x * B135235 - m.ey.y * B035235 + m.ey.t * B015235 - m.ey.v * B013235; var C01341235 = m.ey.x * B134235 - m.ey.y * B034235 + m.ey.t * B014235 - m.ey.u * B013235; var C01451234 = m.ey.x * B145234 - m.ey.y * B045234 + m.ey.u * B015234 - m.ey.v * B014234; var C01351234 = m.ey.x * B135234 - m.ey.y * B035234 + m.ey.t * B015234 - m.ey.v * B013234; var C01341234 = m.ey.x * B134234 - m.ey.y * B034234 + m.ey.t * B014234 - m.ey.u * B013234; var C01251345 = m.ey.x * B125345 - m.ey.y * B025345 + m.ey.z * B015345 - m.ey.v * B012345; var C01241345 = m.ey.x * B124345 - m.ey.y * B024345 + m.ey.z * B014345 - m.ey.u * B012345; var C01251245 = m.ey.x * B125245 - m.ey.y * B025245 + m.ey.z * B015245 - m.ey.v * B012245; var C01241245 = m.ey.x * B124245 - m.ey.y * B024245 + m.ey.z * B014245 - m.ey.u * B012245; var C01251235 = m.ey.x * B125235 - m.ey.y * B025235 + m.ey.z * B015235 - m.ey.v * B012235; var C01241235 = m.ey.x * B124235 - m.ey.y * B024235 + m.ey.z * B014235 - m.ey.u * B012235; var C01251234 = m.ey.x * B125234 - m.ey.y * B025234 + m.ey.z * B015234 - m.ey.v * B012234; var C01241234 = m.ey.x * B124234 - m.ey.y * B024234 + m.ey.z * B014234 - m.ey.u * B012234; var C01231345 = m.ey.x * B123345 - m.ey.y * B023345 + m.ey.z * B013345 - m.ey.t * B012345; var C01231245 = m.ey.x * B123245 - m.ey.y * B023245 + m.ey.z * B013245 - m.ey.t * B012245; var C01231235 = m.ey.x * B123235 - m.ey.y * B023235 + m.ey.z * B013235 - m.ey.t * B012235; var C01231234 = m.ey.x * B123234 - m.ey.y * B023234 + m.ey.z * B013234 - m.ey.t * B012234; var det = m.ex.x * (m.ey.y * C23452345 - m.ey.z * C13452345 + m.ey.t * C12452345 - m.ey.u * C12352345 + m.ey.v * C12342345) - m.ex.y * (m.ey.x * C23452345 - m.ey.z * C03452345 + m.ey.t * C02452345 - m.ey.u * C02352345 + m.ey.v * C02342345) + m.ex.z * (m.ey.x * C13452345 - m.ey.y * C03452345 + m.ey.t * C01452345 - m.ey.u * C01352345 + m.ey.v * C01342345) - m.ex.t * (m.ey.x * C12452345 - m.ey.y * C02452345 + m.ey.z * C01452345 - m.ey.u * C01252345 + m.ey.v * C01242345) + m.ex.u * (m.ey.x * C12352345 - m.ey.y * C02352345 + m.ey.z * C01352345 - m.ey.t * C01252345 + m.ey.v * C01232345) - m.ex.v * (m.ey.x * C12342345 - m.ey.y * C02342345 + m.ey.z * C01342345 - m.ey.t * C01242345 + m.ey.u * C01232345); det = 1 / det; var v = new Tensor4(); v.ex.x = det * (m.ey.y * C23452345 - m.ey.z * C13452345 + m.ey.t * C12452345 - m.ey.u * C12352345 + m.ey.v * C12342345); v.ex.y = det * -(m.ex.y * C23452345 - m.ex.z * C13452345 + m.ex.t * C12452345 - m.ex.u * C12352345 + m.ex.v * C12342345); v.ex.z = det * (m.ex.y * C23451345 - m.ex.z * C13451345 + m.ex.t * C12451345 - m.ex.u * C12351345 + m.ex.v * C12341345); v.ex.t = det * -(m.ex.y * C23451245 - m.ex.z * C13451245 + m.ex.t * C12451245 - m.ex.u * C12351245 + m.ex.v * C12341245); v.ex.u = det * (m.ex.y * C23451235 - m.ex.z * C13451235 + m.ex.t * C12451235 - m.ex.u * C12351235 + m.ex.v * C12341235); v.ex.v = det * -(m.ex.y * C23451234 - m.ex.z * C13451234 + m.ex.t * C12451234 - m.ex.u * C12351234 + m.ex.v * C12341234); v.ey.x = det * -(m.ey.x * C23452345 - m.ey.z * C03452345 + m.ey.t * C02452345 - m.ey.u * C02352345 + m.ey.v * C02342345); v.ey.y = det * (m.ex.x * C23452345 - m.ex.z * C03452345 + m.ex.t * C02452345 - m.ex.u * C02352345 + m.ex.v * C02342345); v.ey.z = det * -(m.ex.x * C23451345 - m.ex.z * C03451345 + m.ex.t * C02451345 - m.ex.u * C02351345 + m.ex.v * C02341345); v.ey.t = det * (m.ex.x * C23451245 - m.ex.z * C03451245 + m.ex.t * C02451245 - m.ex.u * C02351245 + m.ex.v * C02341245); v.ey.u = det * -(m.ex.x * C23451235 - m.ex.z * C03451235 + m.ex.t * C02451235 - m.ex.u * C02351235 + m.ex.v * C02341235); v.ey.v = det * (m.ex.x * C23451234 - m.ex.z * C03451234 + m.ex.t * C02451234 - m.ex.u * C02351234 + m.ex.v * C02341234); v.ez.x = det * (m.ey.x * C13452345 - m.ey.y * C03452345 + m.ey.t * C01452345 - m.ey.u * C01352345 + m.ey.v * C01342345); v.ez.y = det * -(m.ex.x * C13452345 - m.ex.y * C03452345 + m.ex.t * C01452345 - m.ex.u * C01352345 + m.ex.v * C01342345); v.ez.z = det * (m.ex.x * C13451345 - m.ex.y * C03451345 + m.ex.t * C01451345 - m.ex.u * C01351345 + m.ex.v * C01341345); v.ez.t = det * -(m.ex.x * C13451245 - m.ex.y * C03451245 + m.ex.t * C01451245 - m.ex.u * C01351245 + m.ex.v * C01341245); v.ez.u = det * (m.ex.x * C13451235 - m.ex.y * C03451235 + m.ex.t * C01451235 - m.ex.u * C01351235 + m.ex.v * C01341235); v.ez.v = det * -(m.ex.x * C13451234 - m.ex.y * C03451234 + m.ex.t * C01451234 - m.ex.u * C01351234 + m.ex.v * C01341234); v.et.x = det * -(m.ey.x * C12452345 - m.ey.y * C02452345 + m.ey.z * C01452345 - m.ey.u * C01252345 + m.ey.v * C01242345); v.et.y = det * (m.ex.x * C12452345 - m.ex.y * C02452345 + m.ex.z * C01452345 - m.ex.u * C01252345 + m.ex.v * C01242345); v.et.z = det * -(m.ex.x * C12451345 - m.ex.y * C02451345 + m.ex.z * C01451345 - m.ex.u * C01251345 + m.ex.v * C01241345); v.et.t = det * (m.ex.x * C12451245 - m.ex.y * C02451245 + m.ex.z * C01451245 - m.ex.u * C01251245 + m.ex.v * C01241245); v.et.u = det * -(m.ex.x * C12451235 - m.ex.y * C02451235 + m.ex.z * C01451235 - m.ex.u * C01251235 + m.ex.v * C01241235); v.et.v = det * (m.ex.x * C12451234 - m.ex.y * C02451234 + m.ex.z * C01451234 - m.ex.u * C01251234 + m.ex.v * C01241234); v.eu.x = det * (m.ey.x * C12352345 - m.ey.y * C02352345 + m.ey.z * C01352345 - m.ey.t * C01252345 + m.ey.v * C01232345); v.eu.y = det * -(m.ex.x * C12352345 - m.ex.y * C02352345 + m.ex.z * C01352345 - m.ex.t * C01252345 + m.ex.v * C01232345); v.eu.z = det * (m.ex.x * C12351345 - m.ex.y * C02351345 + m.ex.z * C01351345 - m.ex.t * C01251345 + m.ex.v * C01231345); v.eu.t = det * -(m.ex.x * C12351245 - m.ex.y * C02351245 + m.ex.z * C01351245 - m.ex.t * C01251245 + m.ex.v * C01231245); v.eu.u = det * (m.ex.x * C12351235 - m.ex.y * C02351235 + m.ex.z * C01351235 - m.ex.t * C01251235 + m.ex.v * C01231235); v.eu.v = det * -(m.ex.x * C12351234 - m.ex.y * C02351234 + m.ex.z * C01351234 - m.ex.t * C01251234 + m.ex.v * C01231234); v.ev.x = det * -(m.ey.x * C12342345 - m.ey.y * C02342345 + m.ey.z * C01342345 - m.ey.t * C01242345 + m.ey.u * C01232345); v.ev.y = det * (m.ex.x * C12342345 - m.ex.y * C02342345 + m.ex.z * C01342345 - m.ex.t * C01242345 + m.ex.u * C01232345); v.ev.z = det * -(m.ex.x * C12341345 - m.ex.y * C02341345 + m.ex.z * C01341345 - m.ex.t * C01241345 + m.ex.u * C01231345); v.ev.t = det * (m.ex.x * C12341245 - m.ex.y * C02341245 + m.ex.z * C01341245 - m.ex.t * C01241245 + m.ex.u * C01231245); v.ev.u = det * -(m.ex.x * C12341235 - m.ex.y * C02341235 + m.ex.z * C01341235 - m.ex.t * C01241235 + m.ex.u * C01231235); v.ev.v = det * (m.ex.x * C12341234 - m.ex.y * C02341234 + m.ex.z * C01341234 - m.ex.t * C01241234 + m.ex.u * C01231234); return(v); }
/// <summary> /// Rotate the tensor orientation by the matrix /// </summary> public static Tensor4 Transform(Tensor4 I, Matrix4 r) { var t = Cross(r); return(t * I * Transpose(t)); }