- Updated scenery zoom pan wrapper, track hover info and distance meter to work correctly on touch screen / mobile devices - Fixed SideMenu still responding to tab navigation even if closed
62 lines
1.2 KiB
JavaScript
62 lines
1.2 KiB
JavaScript
import Vector3 from "../model/vector3";
|
|
|
|
function degToRad(angle) {
|
|
return angle * (Math.PI / 180);
|
|
}
|
|
|
|
function radToDeg(angle) {
|
|
return angle * (180 / Math.PI);
|
|
}
|
|
|
|
function vectorDegToRad(vector) {
|
|
return new Vector3(
|
|
degToRad(vector.x),
|
|
degToRad(vector.y),
|
|
degToRad(vector.z),
|
|
);
|
|
}
|
|
|
|
function vectorRadToDeg(vector) {
|
|
return new Vector3(
|
|
radToDeg(vector.x),
|
|
radToDeg(vector.y),
|
|
radToDeg(vector.z),
|
|
);
|
|
}
|
|
|
|
function normalizeDegAngle(angle, max = 360) {
|
|
if (angle < 0) {
|
|
return angle + max * Math.ceil(Math.abs(angle) / max);
|
|
} else if (angle >= max) {
|
|
return angle - max * Math.floor(angle / max);
|
|
} else {
|
|
return angle;
|
|
}
|
|
}
|
|
|
|
function normalizeDegVector(vector) {
|
|
return new Vector3(
|
|
normalizeDegAngle(vector.x),
|
|
normalizeDegAngle(vector.y),
|
|
normalizeDegAngle(vector.z)
|
|
)
|
|
}
|
|
|
|
function normalizeAngleDelta(delta) {
|
|
if (delta > 180) delta -= 360;
|
|
if (delta < -180) delta += 360;
|
|
return delta;
|
|
}
|
|
|
|
const AngleHelper = {
|
|
degToRad,
|
|
radToDeg,
|
|
vectorDegToRad,
|
|
vectorRadToDeg,
|
|
normalizeDegAngle,
|
|
normalizeDegVector,
|
|
normalizeAngleDelta
|
|
}
|
|
|
|
export default AngleHelper;
|