@openhps/core
Version:
Open Hybrid Positioning System - Core component
52 lines (46 loc) • 1.63 kB
text/typescript
import { Quaternion, Vector3 } from '../../utils/math';
import { NumberType, SerializableMember, SerializableObject } from '../decorators';
import * as THREE from '../../utils/math/_internal';
import { TimeService } from '../../service/TimeService';
import { Accuracy } from '../values/Accuracy';
import { AngleUnit } from '../../utils';
import { Accuracy1D } from '../values/Accuracy1D';
/**
* Orientation quaternion with accuracy
* @category Position
*/
()
export class Orientation extends Quaternion {
({
isRequired: false,
numberType: NumberType.LONG,
})
timestamp: number;
({
isRequired: false,
})
accuracy!: Accuracy<AngleUnit, number>;
constructor(x?: number, y?: number, z?: number, w?: number, accuracy?: Accuracy<AngleUnit, number>) {
super(x, y, z, w);
this.accuracy = accuracy || new Accuracy1D(0, AngleUnit.RADIAN);
this.timestamp = TimeService.now();
}
static fromBearing(bearing: number, unit: AngleUnit = AngleUnit.DEGREE): Orientation {
return Orientation.fromEuler({
x: 0,
y: 0,
z: bearing,
order: 'ZYX',
unit,
});
}
static fromQuaternion(quat: Quaternion | THREE.Quaternion): Orientation {
return new Orientation(quat.x, quat.y, quat.z, quat.w);
}
clone(): this {
const vector = super.clone();
vector.accuracy = this.accuracy ? this.accuracy.clone() : undefined;
vector.timestamp = this.timestamp;
return vector as this;
}
}