restore backup and add opencode support
This commit is contained in:
1 parent
b99d2ff835
commit
c295660631
72 files changed
+7035
-7198
No files matched your search
@@ -0,0 +1,213 @@
|
||||
/**
|
||||
* @fileoverview added by tsickle
|
||||
* @suppress {checkTypes} checked by tsc
|
||||
*/
|
||||
/**
|
||||
* Copyright (C) 2018 Michael Czechowski <mail@dailysh.it>
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the Free
|
||||
* Software Foundation; version 2.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* this program; if not, write to the Free Software Foundation, Inc., 51
|
||||
* Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
import { Injectable } from '@angular/core';
|
||||
import * as Random from 'd3-random';
|
||||
export class NlsMathService {
|
||||
/**
|
||||
* Calculate distance between to points with coordinates.
|
||||
* @param {?} a
|
||||
* @param {?} b
|
||||
* @return {?}
|
||||
*/
|
||||
Δ(a, b) {
|
||||
return Math.pow(Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2), 0.5);
|
||||
}
|
||||
/**
|
||||
* @param {?} point
|
||||
* @param {?} matrix
|
||||
* @return {?}
|
||||
*/
|
||||
getClosestCenter(point, matrix) {
|
||||
if (this.Δ(point, matrix.start) < this.Δ(point, matrix.end)) {
|
||||
return matrix.start;
|
||||
}
|
||||
else {
|
||||
return matrix.end;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @param {?} point
|
||||
* @param {?} matrix
|
||||
* @return {?}
|
||||
*/
|
||||
getFarestCenter(point, matrix) {
|
||||
if (this.Δ(point, matrix.start) > this.Δ(point, matrix.end)) {
|
||||
return matrix.start;
|
||||
}
|
||||
else {
|
||||
return matrix.end;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @param {?} matrix
|
||||
* @param {?} overlap
|
||||
* @return {?}
|
||||
*/
|
||||
randomPoint(matrix, overlap) {
|
||||
/** @type {?} */
|
||||
const x = {
|
||||
min: matrix.center.x - matrix.width * overlap,
|
||||
max: matrix.center.x + matrix.width * overlap
|
||||
};
|
||||
/** @type {?} */
|
||||
const y = {
|
||||
min: matrix.center.y - matrix.height * overlap,
|
||||
max: matrix.center.y + matrix.height * overlap
|
||||
};
|
||||
return {
|
||||
x: Random.randomUniform(x.min, x.max)(),
|
||||
y: Random.randomUniform(y.min, y.max)()
|
||||
};
|
||||
}
|
||||
/**
|
||||
* @param {?} width
|
||||
* @param {?} height
|
||||
* @return {?}
|
||||
*/
|
||||
centerOfArea(width, height) {
|
||||
return {
|
||||
x: width * 0.5,
|
||||
y: height * 0.5
|
||||
};
|
||||
}
|
||||
/**
|
||||
* @param {?} p1
|
||||
* @param {?} p2
|
||||
* @return {?}
|
||||
*/
|
||||
centerOfPoints(p1, p2) {
|
||||
return {
|
||||
x: (p1.x + p2.x) * 0.5,
|
||||
y: (p1.y + p2.y) * 0.5
|
||||
};
|
||||
}
|
||||
/**
|
||||
* @param {?} curve
|
||||
* @return {?}
|
||||
*/
|
||||
centerOfCurve(curve) {
|
||||
/** @type {?} */
|
||||
const genMedian = this.medianPoint(curve);
|
||||
/** @type {?} */
|
||||
const p1 = genMedian.next().value;
|
||||
/** @type {?} */
|
||||
const p2 = genMedian.next().value;
|
||||
/** @type {?} */
|
||||
const radians = this.angleRadians(p1, p2);
|
||||
return Object.assign(this.centerOfPoints(p1, p2), { ascent: radians });
|
||||
}
|
||||
/**
|
||||
* @param {?} curve
|
||||
* @return {?}
|
||||
*/
|
||||
medianOfCurve(curve) {
|
||||
/** @type {?} */
|
||||
const genMedian = this.medianPoint(curve);
|
||||
/** @type {?} */
|
||||
const p1 = genMedian.next().value;
|
||||
/** @type {?} */
|
||||
const p2 = genMedian.next().value;
|
||||
/** @type {?} */
|
||||
const p3 = genMedian.next().value;
|
||||
/** @type {?} */
|
||||
const radians = this.angleRadians(p2, p3);
|
||||
// const radians = Math.round(Math.random() * 10000) / 1000;
|
||||
// @todo if nodes are less than 5 error occures
|
||||
return Object.assign(p1, { ascent: radians });
|
||||
}
|
||||
/**
|
||||
* @param {?} p1
|
||||
* @param {?} p2
|
||||
* @return {?}
|
||||
*/
|
||||
angleRadians(p1, p2) {
|
||||
return Math.atan2(p2.y - p1.y, p2.x - p1.x);
|
||||
}
|
||||
/**
|
||||
* @param {?} p1
|
||||
* @param {?} p2
|
||||
* @return {?}
|
||||
*/
|
||||
angleDegree(p1, p2) {
|
||||
return this.angleRadians(p1, p2) * 180 / Math.PI;
|
||||
}
|
||||
/**
|
||||
* @param {?} list
|
||||
* @return {?}
|
||||
*/
|
||||
medianIndex(list) {
|
||||
return Math.floor(list.length * 0.5);
|
||||
}
|
||||
/**
|
||||
* @param {?} points
|
||||
* @return {?}
|
||||
*/
|
||||
*medianPoint(points) {
|
||||
/** @type {?} */
|
||||
let index;
|
||||
/** @type {?} */
|
||||
const list = points.slice();
|
||||
while (list) {
|
||||
index = this.medianIndex(points);
|
||||
yield list[index];
|
||||
list.splice(index, 1);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Generator for sine bounce
|
||||
*
|
||||
* @param {?=} amplitude default to 1 indicates the amplitude in positive as well
|
||||
* in negative range
|
||||
* @param {?=} decimals amount of decimal places
|
||||
* @param {?=} start 0 indicates to initiate with positive numbers, 1 indicates to
|
||||
* start with negative numbers first
|
||||
* @return {?}
|
||||
*/
|
||||
*bounce(amplitude = 1, decimals = 1, start = 0) {
|
||||
/** @type {?} */
|
||||
const power = Math.pow(10, decimals);
|
||||
/** @type {?} */
|
||||
const step = 2 / (power);
|
||||
/** @type {?} */
|
||||
let index = 0;
|
||||
while (true) {
|
||||
/** @type {?} */
|
||||
const radians = Math.PI * step * index + start;
|
||||
yield Math.round((Math.sin(radians) * amplitude) * power) / power;
|
||||
index++;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @param {?=} startPositive
|
||||
* @return {?}
|
||||
*/
|
||||
*flipSign(startPositive = true) {
|
||||
/** @type {?} */
|
||||
let sign = startPositive ? 1 : -1;
|
||||
while (true) {
|
||||
yield sign = sign * (-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
NlsMathService.decorators = [
|
||||
{ type: Injectable },
|
||||
];
|
||||
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmxzLWd1aWxsb2NoZS8iLCJzb3VyY2VzIjpbIm5scy9zZXJ2aWNlcy9tYXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdCQSxPQUFPLEVBQVUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sS0FBSyxNQUFNLE1BQU0sV0FBVyxDQUFDO0FBTXBDLE1BQU07Ozs7Ozs7SUFPRyxDQUFDLENBQUMsQ0FBUSxFQUFFLENBQVE7UUFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Ozs7Ozs7SUFHakUsZ0JBQWdCLENBQUMsS0FBWSxFQUFFLE1BQVc7UUFDL0MsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDckI7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1NBQ25COzs7Ozs7O0lBR0ksZUFBZSxDQUFDLEtBQVksRUFBRSxNQUFXO1FBQzlDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtB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
Line truncated
|
||||
Reference in new issue
Block a user