UNPKG

@openhps/core

Version:

Open Hybrid Positioning System - Core component

195 lines 6.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AbsolutePosition = void 0; const tslib_1 = require("tslib"); const unit_1 = require("../../utils/unit"); const Velocity_1 = require("../values/Velocity"); const Orientation_1 = require("./Orientation"); const decorators_1 = require("../decorators"); const TimeService_1 = require("../../service/TimeService"); const Accuracy_1 = require("../values/Accuracy"); const Accuracy1D_1 = require("../values/Accuracy1D"); const utils_1 = require("../../utils"); /** * An absolute position of a {@link DataObject}. * @category Position */ let AbsolutePosition = class AbsolutePosition { constructor() { /** * Position recording timestamp */ this.timestamp = TimeService_1.TimeService.now(); /** * Velocity at recorded position */ this.velocity = new Velocity_1.Velocity(); /** * Position unit */ this.unit = unit_1.LengthUnit.METER; } /** * Get the position probability * @returns {number} Probability between 0 and 1 */ get probability() { if (!this._probability) { return 1 / this.accuracy.valueOf(); } return this._probability; } set probability(value) { if (value > 1 || value < 0) { throw new Error(`${this.constructor.name} should be between 0 and 1.`); } this._probability = value; } /** * Position accuracy * @returns {Accuracy} Position accuracy */ get accuracy() { if (!this._accuracy) { this._accuracy = new Accuracy1D_1.Accuracy1D(1, this.unit); } return this._accuracy; } set accuracy(value) { if (!value) { throw new Error(`Accuracy can not be undefined!`); } this._accuracy = value; } /** * Get the linear velocity * @returns {LinearVelocity} Linear velocity */ get linearVelocity() { if (!this.velocity) { return undefined; } return this.velocity.linear; } /** * Set the linear velocity */ set linearVelocity(value) { if (!this.velocity) { this.velocity = new Velocity_1.Velocity(); } this.velocity.linear = value; } /** * Get the angular velocity * @returns {AngularVelocity} Angular velocity */ get angularVelocity() { if (!this.velocity) { return undefined; } return this.velocity.angular; } /** * Set the angular velocity */ set angularVelocity(value) { if (!this.velocity) { this.velocity = new Velocity_1.Velocity(); } this.velocity.angular = value; } /** * Set the orientation of the position * @param {Orientation} orientation orientation * @returns {AbsolutePosition} instance */ setOrientation(orientation) { this.orientation = orientation; return this; } /** * Set the accuracy of the absolute position * @param {number | Accuracy} accuracy Accuracy object or number * @param {Unit} [unit] Optional unit * @returns {AbsolutePosition} instance */ setAccuracy(accuracy, unit) { if (typeof accuracy === 'number') { this.accuracy = new Accuracy1D_1.Accuracy1D(accuracy, unit || this.unit); } else { this.accuracy = accuracy; } return this; } /** * Get the distance from this location to a destination * @param {AbsolutePosition} destination Destination location * @param {DistanceFn} [distanceFunction] Distance function to use (default EUCLIDEAN distance) * @returns {number} Distance between this point and destination */ distanceTo(destination, distanceFunction = utils_1.EUCLIDEAN) { return distanceFunction(this.toVector3().toArray(), destination.toVector3().toArray()); } equals(position) { return this.toVector3(this.unit).equals(position.toVector3(this.unit)); } /** * Clone the position * @returns {AbsolutePosition} Cloned position */ clone() { const position = new this.constructor(); position.unit = this.unit; position._accuracy = this._accuracy ? this._accuracy.clone() : undefined; position.orientation = this.orientation ? this.orientation.clone() : undefined; position.velocity = this.velocity ? this.velocity.clone() : undefined; position.timestamp = this.timestamp; position.referenceSpaceUID = this.referenceSpaceUID; return position; } }; exports.AbsolutePosition = AbsolutePosition; tslib_1.__decorate([ (0, decorators_1.SerializableMember)({ index: true, numberType: decorators_1.NumberType.LONG, }), tslib_1.__metadata("design:type", Number) ], AbsolutePosition.prototype, "timestamp", void 0); tslib_1.__decorate([ (0, decorators_1.SerializableMember)(), tslib_1.__metadata("design:type", Velocity_1.Velocity) ], AbsolutePosition.prototype, "velocity", void 0); tslib_1.__decorate([ (0, decorators_1.SerializableMember)(), tslib_1.__metadata("design:type", Orientation_1.Orientation) ], AbsolutePosition.prototype, "orientation", void 0); tslib_1.__decorate([ (0, decorators_1.SerializableMember)(), tslib_1.__metadata("design:type", unit_1.LengthUnit) ], AbsolutePosition.prototype, "unit", void 0); tslib_1.__decorate([ (0, decorators_1.SerializableMember)({ index: true, }), tslib_1.__metadata("design:type", String) ], AbsolutePosition.prototype, "referenceSpaceUID", void 0); tslib_1.__decorate([ (0, decorators_1.SerializableMember)({ name: 'accuracy', }), tslib_1.__metadata("design:type", Accuracy_1.Accuracy) ], AbsolutePosition.prototype, "_accuracy", void 0); tslib_1.__decorate([ (0, decorators_1.SerializableMember)({ name: 'probability', numberType: decorators_1.NumberType.DECIMAL, }), tslib_1.__metadata("design:type", Number) ], AbsolutePosition.prototype, "_probability", void 0); exports.AbsolutePosition = AbsolutePosition = tslib_1.__decorate([ (0, decorators_1.SerializableObject)() ], AbsolutePosition); //# sourceMappingURL=AbsolutePosition.js.map