UNPKG

3dmol

Version:

JavaScript/TypeScript molecular visualization library

55 lines (52 loc) 1.11 kB
// return conversion matrix given crystal unit cell parameters import { Matrix3 } from "../math"; /** * * @param {number} a * @param {number} b * @param {number} c * @param {number} alpha * @param {number} beta * @param {number} gamma * @returns {Matrix3} */ export function conversionMatrix3( a: number, b: number, c: number, alpha: number, beta: number, gamma: number ) { // Convert to radians alpha = (alpha * Math.PI) / 180; beta = (beta * Math.PI) / 180; gamma = (gamma * Math.PI) / 180; const sqr = (x: number) => { return x*x }; const cosAlpha = Math.cos(alpha); const cosBeta = Math.cos(beta); const cosGamma = Math.cos(gamma); const sinGamma = Math.sin(gamma); const conversionMatrix = new Matrix3( a, b * cosGamma, c * cosBeta, 0, b * sinGamma, (c * (cosAlpha - cosBeta * cosGamma)) / sinGamma, 0, 0, (c * Math.sqrt( 1 - sqr(cosAlpha) - sqr(cosBeta) - sqr(cosGamma) + 2 * cosAlpha * cosBeta * cosGamma )) / sinGamma ); return conversionMatrix; }