UNPKG

geometric-pack

Version:

Geometric pack with lots of available calculations for 2D and 3D geometry

144 lines 6.23 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Triangle = void 0; var transform_1 = require("../../utils/transform"); var normalize_result_1 = require("../../utils/normalize-result"); var Triangle = /** @class */ (function () { function Triangle() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } this.validateInput(args); var sortedSides = args.sort(function (a, b) { return a - b; }); this.sideLengthA = sortedSides[0]; this.sideLengthB = sortedSides[1]; this.sideLengthC = sortedSides[2]; } Triangle_1 = Triangle; Triangle.prototype.validateInput = function (args) { args.forEach(function (arg) { if (typeof arg !== "number") { throw new Error("Argument must be a number"); } }); if (args.length !== 3) { throw new Error("Triangle constructor takes 3 arguments"); } if (this.hasNonPositive(args)) { throw new Error("Side lengths must be positive numbers"); } if (Triangle_1.isTriangle(args)) { throw new Error("Not a triangle"); } }; Triangle.prototype.hasNonPositive = function (_a) { var sideLengthA = _a[0], sideLengthB = _a[1], sideLengthC = _a[2]; return sideLengthA <= 0 || sideLengthB <= 0 || sideLengthC <= 0; }; Triangle.isTriangle = function (_a) { var sideLengthA = _a[0], sideLengthB = _a[1], sideLengthC = _a[2]; return (sideLengthA <= 0 || sideLengthB <= 0 || sideLengthC <= 0 || sideLengthA + sideLengthB <= sideLengthC || sideLengthA + sideLengthC <= sideLengthB || sideLengthB + sideLengthC <= sideLengthA); }; Triangle.prototype.getDefinition = function () { return { sideLengthA: this.sideLengthA, sideLengthB: this.sideLengthB, sideLengthC: this.sideLengthC, circumference: this.getCircumference(), area: this.getArea(), hasRightAngle: this.hasRightAngle(), heights: this.getHeights(), angles: this.getAngles(), outerCircleRadius: this.getOuterCircleRadius(), innerCircleRadius: this.getInnerCircleRadius(), }; }; Triangle.prototype.getCircumference = function () { return this.sideLengthA + this.sideLengthB + this.sideLengthC; }; Triangle.prototype.getArea = function () { var s = this.getCircumference() / 2; return Math.sqrt(s * (s - this.sideLengthA) * (s - this.sideLengthB) * (s - this.sideLengthC)); }; Triangle.prototype.hasRightAngle = function () { return (Math.pow(this.sideLengthA, 2) + Math.pow(this.sideLengthB, 2) === Math.pow(this.sideLengthC, 2)); }; Triangle.prototype.getHeightOfBaseA = function () { return this.getArea() / (0.5 * this.sideLengthA); }; Triangle.prototype.getHeightOfBaseB = function () { return this.getArea() / (0.5 * this.sideLengthB); }; Triangle.prototype.getHeightOfBaseC = function () { return this.getArea() / (0.5 * this.sideLengthC); }; Triangle.prototype.getHeights = function () { return { heightOfBaseA: this.getHeightOfBaseA(), heightOfBaseB: this.getHeightOfBaseB(), heightOfBaseC: this.getHeightOfBaseC(), }; }; Triangle.prototype.getAlpha = function () { var radians = Math.asin((2 * this.getArea()) / (this.sideLengthB * this.sideLengthC)); return transform_1.transformRadiansToDegrees(radians); }; Triangle.prototype.getBeta = function () { var radians = Math.asin((2 * this.getArea()) / (this.sideLengthA * this.sideLengthC)); return transform_1.transformRadiansToDegrees(radians); }; Triangle.prototype.getGamma = function () { return 180 - (this.getAlpha() + this.getBeta()); }; Triangle.prototype.getAngles = function () { return { alpha: this.getAlpha(), beta: this.getBeta(), gamma: this.getGamma(), }; }; Triangle.prototype.isCongruent = function (triangle) { return (this.sideLengthA === triangle.sideLengthA && this.sideLengthB === triangle.sideLengthB && this.sideLengthC === triangle.sideLengthC); }; Triangle.prototype.isSimilar = function (triangle) { return (this.getGamma() === triangle.getGamma() && this.getBeta() === triangle.getBeta() && this.getAlpha() === triangle.getAlpha()); }; Triangle.prototype.getOuterCircleRadius = function () { return ((this.sideLengthA * this.sideLengthB * this.sideLengthC) / (4 * this.getArea())); }; Triangle.prototype.getInnerCircleRadius = function () { return this.getArea() / (this.getCircumference() / 2); }; var Triangle_1; Triangle = Triangle_1 = __decorate([ normalize_result_1.NormalizeResults(), __metadata("design:paramtypes", [Number]) ], Triangle); return Triangle; }()); exports.Triangle = Triangle; //# sourceMappingURL=triangle.js.map