33 lines
1012 B
JavaScript
33 lines
1012 B
JavaScript
const util = {
|
|
getGyroPermission: () => {
|
|
if(!DeviceOrientationEvent.requestPermission) {
|
|
return Promise.resolve("granted")
|
|
} else{
|
|
return DeviceOrientationEvent.requestPermission()
|
|
}
|
|
},
|
|
round: (x, decimalPlaces) =>
|
|
Math.round(x * Math.pow(10, decimalPlaces)) / Math.pow(10, decimalPlaces),
|
|
// parameters in radians
|
|
// return values in radians
|
|
toPolarCoordinates: (alpha, beta, gamma) => {
|
|
const rz = m3.zRotation(alpha);
|
|
const rx = m3.xRotation(beta);
|
|
const ry = m3.yRotation(gamma);
|
|
|
|
const rot = m3.mul(rz, m3.mul(rx, ry));
|
|
|
|
const screenNormal = m3.mulV(rot, [0, 0, 1]);
|
|
|
|
const phi = Math.atan2(screenNormal[1], screenNormal[0]);
|
|
const r = v3.norm2(screenNormal);
|
|
// theta ∈ [0, π]
|
|
// where 0 is lying flat and π is upside down
|
|
const theta = Math.acos(screenNormal[2] / r);
|
|
|
|
return [screenNormal, phi, theta];
|
|
},
|
|
rgb: (r, g, b) => `rgb(${255 * r}, ${255 * g}, ${255 * b})`,
|
|
deg2rad: (deg) => deg / 180 * Math.PI,
|
|
};
|