@openhps/core
Version:
Open Hybrid Positioning System - Core component
103 lines • 3.25 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Absolute2DPosition = void 0;
const tslib_1 = require("tslib");
const AbsolutePosition_1 = require("./AbsolutePosition");
const decorators_1 = require("../decorators");
const utils_1 = require("../../utils");
const math_1 = require("../../utils/math");
/**
* Absolute cartesian 2D position. This class uses a {@link Vector2}. This location can be used both as
* an absolute location or relative location.
* @category Position
*/
let Absolute2DPosition = class Absolute2DPosition extends AbsolutePosition_1.AbsolutePosition {
constructor(x, y, unit = utils_1.LengthUnit.METER) {
super();
this.vector = new math_1.Vector3();
this.vector.x = x ? x : 0;
this.vector.y = y ? y : 0;
this.unit = unit;
}
get x() {
if (!this.vector) {
return undefined;
}
return this.vector.x;
}
set x(value) {
if (!this.vector) {
return;
}
this.vector.x = value;
}
get y() {
if (!this.vector) {
return undefined;
}
return this.vector.y;
}
set y(value) {
if (!this.vector) {
return;
}
this.vector.y = value;
}
/**
* Get the angle in radians from this position to a destination
* @param {Absolute2DPosition} destination Destination position
* @returns {number} Bearing in radians from this position to destination
*/
angleTo(destination) {
return this.vector.angleTo(destination.vector);
}
fromVector(vector, unit) {
if (unit) {
this.x = unit.convert(vector.x, this.unit);
this.y = unit.convert(vector.y, this.unit);
}
else {
this.x = vector.x;
this.y = vector.y;
}
return this;
}
toVector3(unit) {
if (unit) {
return new math_1.Vector3(this.unit.convert(this.x, unit), this.unit.convert(this.y, unit));
}
else {
return new math_1.Vector3(this.x, this.y);
}
}
/**
* Clone the position
* @returns {Absolute2DPosition} Cloned position
*/
clone() {
const position = super.clone();
position.x = this.x;
position.y = this.y;
return position;
}
};
exports.Absolute2DPosition = Absolute2DPosition;
tslib_1.__decorate([
(0, decorators_1.SerializableMember)({
numberType: decorators_1.NumberType.DECIMAL,
}),
tslib_1.__metadata("design:type", Number),
tslib_1.__metadata("design:paramtypes", [Number])
], Absolute2DPosition.prototype, "x", null);
tslib_1.__decorate([
(0, decorators_1.SerializableMember)({
numberType: decorators_1.NumberType.DECIMAL,
}),
tslib_1.__metadata("design:type", Number),
tslib_1.__metadata("design:paramtypes", [Number])
], Absolute2DPosition.prototype, "y", null);
exports.Absolute2DPosition = Absolute2DPosition = tslib_1.__decorate([
(0, decorators_1.SerializableObject)(),
tslib_1.__metadata("design:paramtypes", [Number, Number, utils_1.LengthUnit])
], Absolute2DPosition);
//# sourceMappingURL=Absolute2DPosition.js.map