@fbltd/math 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/math.d.ts +121 -0
- package/dist/math.js +385 -0
- package/dist/math.js.map +1 -0
- package/package.json +8 -3
- package/bundler.config.json +0 -6
- package/index.ts +0 -1
- package/src/angle.ts +0 -87
- package/src/colors/color.ts +0 -11
- package/src/colors/conic.gradient.ts +0 -105
- package/src/colors/index.ts +0 -2
- package/src/figures/circle.ts +0 -12
- package/src/figures/index.ts +0 -3
- package/src/figures/point.ts +0 -23
- package/src/figures/straight-line.ts +0 -15
- package/src/index.ts +0 -6
- package/src/matrix.ts +0 -32
- package/src/operator.ts +0 -23
- package/src/utils.ts +0 -17
- package/tsconfig.json +0 -10
package/dist/math.d.ts
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
declare module "src/utils" {
|
|
2
|
+
export function approximately(theValue: number, is: number, withPrecision?: number): boolean;
|
|
3
|
+
export function toPositive(value: number, range: number): number;
|
|
4
|
+
export function isCorrectNumber(value: any): boolean;
|
|
5
|
+
}
|
|
6
|
+
declare module "src/angle" {
|
|
7
|
+
export enum AngleUnits {
|
|
8
|
+
Deg = 0,
|
|
9
|
+
Rad = 1,
|
|
10
|
+
Turn = 2
|
|
11
|
+
}
|
|
12
|
+
export class Angle {
|
|
13
|
+
static toRad(angle: number, unit?: AngleUnits): number;
|
|
14
|
+
static toTurn(angle: number, unit?: AngleUnits): number;
|
|
15
|
+
static toDeg(angle: number, unit?: AngleUnits): number;
|
|
16
|
+
static toPositive(angle: number, unit: AngleUnits): number;
|
|
17
|
+
static normalize(angle: number, unit: AngleUnits): number;
|
|
18
|
+
static toCSS(angle: number, unit: AngleUnits): string;
|
|
19
|
+
static angleUnitCorrespondence: Record<AngleUnits, string>;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
declare module "src/figures/point" {
|
|
23
|
+
export type IPoint2 = [number, number];
|
|
24
|
+
export class Point2 {
|
|
25
|
+
static sum(p1: IPoint2, p2: IPoint2): IPoint2;
|
|
26
|
+
static scale(v: IPoint2, factor: number): IPoint2;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
declare module "src/figures/circle" {
|
|
30
|
+
import { IPoint2 } from "src/figures/point";
|
|
31
|
+
import { IMatrix2d } from "src/matrix";
|
|
32
|
+
export class Circle {
|
|
33
|
+
center: IPoint2;
|
|
34
|
+
r: number;
|
|
35
|
+
constructor(center: IPoint2, r: number);
|
|
36
|
+
transform(matrix: IMatrix2d): void;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
declare module "src/figures/straight-line" {
|
|
40
|
+
import { IPoint2 } from "src/figures/point";
|
|
41
|
+
import { IMatrix2d } from "src/matrix";
|
|
42
|
+
export class StraightLine {
|
|
43
|
+
p1: IPoint2;
|
|
44
|
+
p2: IPoint2;
|
|
45
|
+
constructor(p1: IPoint2, p2: IPoint2);
|
|
46
|
+
transform(matrix: IMatrix2d, transformThis?: boolean): StraightLine;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
declare module "src/figures/index" {
|
|
50
|
+
export * from "src/figures/point";
|
|
51
|
+
export * from "src/figures/circle";
|
|
52
|
+
export * from "src/figures/straight-line";
|
|
53
|
+
}
|
|
54
|
+
declare module "src/matrix" {
|
|
55
|
+
import { IPoint2 } from "src/figures/index";
|
|
56
|
+
export type IMatrix2d = [
|
|
57
|
+
number,
|
|
58
|
+
number,
|
|
59
|
+
number,
|
|
60
|
+
number,
|
|
61
|
+
number,
|
|
62
|
+
number
|
|
63
|
+
];
|
|
64
|
+
export const identityMatrix: IMatrix2d;
|
|
65
|
+
export class Matrix2d {
|
|
66
|
+
static multiply(matrix: IMatrix2d, ...matrices: IMatrix2d[]): IMatrix2d;
|
|
67
|
+
static apply(matrix: IMatrix2d, point: IPoint2): IPoint2;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
declare module "src/operator" {
|
|
71
|
+
import { IMatrix2d } from "src/matrix";
|
|
72
|
+
import { AngleUnits } from "src/angle";
|
|
73
|
+
export class Operator {
|
|
74
|
+
private static temp1;
|
|
75
|
+
private static temp2;
|
|
76
|
+
static rotateIdentity(angle: number, unit?: AngleUnits): IMatrix2d;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
declare module "src/colors/color" {
|
|
80
|
+
export class Color {
|
|
81
|
+
red: number;
|
|
82
|
+
green: number;
|
|
83
|
+
blue: number;
|
|
84
|
+
constructor(red: number, green: number, blue: number);
|
|
85
|
+
toCSS(): string;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
declare module "src/colors/conic.gradient" {
|
|
89
|
+
import { Color } from "src/colors/color";
|
|
90
|
+
import { IPoint2 } from "src/figures/index";
|
|
91
|
+
export class ConicGradient {
|
|
92
|
+
colors: {
|
|
93
|
+
angle: number;
|
|
94
|
+
color: Color;
|
|
95
|
+
}[];
|
|
96
|
+
constructor(...colors: {
|
|
97
|
+
angle: number;
|
|
98
|
+
color: Color;
|
|
99
|
+
}[]);
|
|
100
|
+
getColorAtAngle(angle: number): Color;
|
|
101
|
+
getAngleByColor(color: Color): number;
|
|
102
|
+
isColorInRange(color: Color): boolean;
|
|
103
|
+
toCanvas(ctx: CanvasRenderingContext2D, center: IPoint2): CanvasGradient;
|
|
104
|
+
toCSS(): string;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
declare module "src/colors/index" {
|
|
108
|
+
export * from "src/colors/color";
|
|
109
|
+
export * from "src/colors/conic.gradient";
|
|
110
|
+
}
|
|
111
|
+
declare module "src/index" {
|
|
112
|
+
export * from "src/angle";
|
|
113
|
+
export * from "src/matrix";
|
|
114
|
+
export * from "src/operator";
|
|
115
|
+
export * from "src/utils";
|
|
116
|
+
export * from "src/colors/index";
|
|
117
|
+
export * from "src/figures/index";
|
|
118
|
+
}
|
|
119
|
+
declare module "index" {
|
|
120
|
+
export * from "src/index";
|
|
121
|
+
}
|
package/dist/math.js
ADDED
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
2
|
+
if (k2 === undefined) k2 = k;
|
|
3
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
4
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
5
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
6
|
+
}
|
|
7
|
+
Object.defineProperty(o, k2, desc);
|
|
8
|
+
}) : (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
o[k2] = m[k];
|
|
11
|
+
}));
|
|
12
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
13
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
14
|
+
};
|
|
15
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
16
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
17
|
+
if (ar || !(i in from)) {
|
|
18
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
19
|
+
ar[i] = from[i];
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
23
|
+
};
|
|
24
|
+
define("src/utils", ["require", "exports"], function (require, exports) {
|
|
25
|
+
"use strict";
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.approximately = approximately;
|
|
28
|
+
exports.toPositive = toPositive;
|
|
29
|
+
exports.isCorrectNumber = isCorrectNumber;
|
|
30
|
+
function approximately(theValue, is, withPrecision) {
|
|
31
|
+
if (withPrecision === void 0) { withPrecision = 1e-8; }
|
|
32
|
+
return Math.abs(theValue - is) <= withPrecision;
|
|
33
|
+
}
|
|
34
|
+
function toPositive(value, range) {
|
|
35
|
+
if (value >= 0)
|
|
36
|
+
return Math.abs(value);
|
|
37
|
+
return Math.abs((range + value % range) % range);
|
|
38
|
+
}
|
|
39
|
+
function isCorrectNumber(value) {
|
|
40
|
+
var v = +value;
|
|
41
|
+
if (!isNaN(value) && isFinite(value)) {
|
|
42
|
+
v = parseFloat(value);
|
|
43
|
+
return !isNaN(v) && isFinite(v);
|
|
44
|
+
}
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
define("src/angle", ["require", "exports", "src/utils"], function (require, exports, utils_1) {
|
|
49
|
+
"use strict";
|
|
50
|
+
var _a;
|
|
51
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
52
|
+
exports.Angle = exports.AngleUnits = void 0;
|
|
53
|
+
var AngleUnits;
|
|
54
|
+
(function (AngleUnits) {
|
|
55
|
+
AngleUnits[AngleUnits["Deg"] = 0] = "Deg";
|
|
56
|
+
AngleUnits[AngleUnits["Rad"] = 1] = "Rad";
|
|
57
|
+
AngleUnits[AngleUnits["Turn"] = 2] = "Turn";
|
|
58
|
+
})(AngleUnits || (exports.AngleUnits = AngleUnits = {}));
|
|
59
|
+
var Angle = (function () {
|
|
60
|
+
function Angle() {
|
|
61
|
+
}
|
|
62
|
+
Angle.toRad = function (angle, unit) {
|
|
63
|
+
if (unit === void 0) { unit = AngleUnits.Deg; }
|
|
64
|
+
switch (unit) {
|
|
65
|
+
case AngleUnits.Rad:
|
|
66
|
+
return angle;
|
|
67
|
+
case AngleUnits.Deg:
|
|
68
|
+
return angle * Math.PI / 180;
|
|
69
|
+
case AngleUnits.Turn:
|
|
70
|
+
return Math.PI * 2 * angle;
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
Angle.toTurn = function (angle, unit) {
|
|
74
|
+
if (unit === void 0) { unit = AngleUnits.Deg; }
|
|
75
|
+
switch (unit) {
|
|
76
|
+
case AngleUnits.Turn:
|
|
77
|
+
return angle;
|
|
78
|
+
case AngleUnits.Deg:
|
|
79
|
+
return angle / 360;
|
|
80
|
+
case AngleUnits.Rad:
|
|
81
|
+
return angle / (Math.PI * 2);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
Angle.toDeg = function (angle, unit) {
|
|
85
|
+
if (unit === void 0) { unit = AngleUnits.Rad; }
|
|
86
|
+
switch (unit) {
|
|
87
|
+
case AngleUnits.Deg:
|
|
88
|
+
return angle;
|
|
89
|
+
case AngleUnits.Turn:
|
|
90
|
+
return angle * 360;
|
|
91
|
+
case AngleUnits.Rad:
|
|
92
|
+
return angle * 180 / Math.PI;
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
Angle.toPositive = function (angle, unit) {
|
|
96
|
+
switch (unit) {
|
|
97
|
+
case AngleUnits.Deg:
|
|
98
|
+
return (0, utils_1.toPositive)(angle, 360);
|
|
99
|
+
case AngleUnits.Turn:
|
|
100
|
+
return (0, utils_1.toPositive)(angle, 1);
|
|
101
|
+
case AngleUnits.Rad:
|
|
102
|
+
return (0, utils_1.toPositive)(angle, Math.PI * 2);
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
Angle.normalize = function (angle, unit) {
|
|
106
|
+
switch (unit) {
|
|
107
|
+
case AngleUnits.Deg:
|
|
108
|
+
return Angle.toPositive(angle, unit) % 360;
|
|
109
|
+
case AngleUnits.Rad:
|
|
110
|
+
return Angle.toPositive(angle, unit) % (Math.PI * 2);
|
|
111
|
+
case AngleUnits.Turn:
|
|
112
|
+
return Angle.toPositive(angle, unit) % 1;
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
Angle.toCSS = function (angle, unit) {
|
|
116
|
+
if (!(0, utils_1.isCorrectNumber)(angle))
|
|
117
|
+
return '';
|
|
118
|
+
return "rotate(".concat(angle).concat(Angle.angleUnitCorrespondence[unit], ")");
|
|
119
|
+
};
|
|
120
|
+
Angle.angleUnitCorrespondence = (_a = {},
|
|
121
|
+
_a[AngleUnits.Rad] = 'rad',
|
|
122
|
+
_a[AngleUnits.Turn] = 'turn',
|
|
123
|
+
_a[AngleUnits.Deg] = 'deg',
|
|
124
|
+
_a);
|
|
125
|
+
return Angle;
|
|
126
|
+
}());
|
|
127
|
+
exports.Angle = Angle;
|
|
128
|
+
});
|
|
129
|
+
define("src/figures/point", ["require", "exports"], function (require, exports) {
|
|
130
|
+
"use strict";
|
|
131
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
132
|
+
exports.Point2 = void 0;
|
|
133
|
+
var Point2 = (function () {
|
|
134
|
+
function Point2() {
|
|
135
|
+
}
|
|
136
|
+
Point2.sum = function (p1, p2) {
|
|
137
|
+
return [
|
|
138
|
+
p1[0] + p2[0],
|
|
139
|
+
p1[1] + p2[1],
|
|
140
|
+
];
|
|
141
|
+
};
|
|
142
|
+
Point2.scale = function (v, factor) {
|
|
143
|
+
return [
|
|
144
|
+
v[0] * factor,
|
|
145
|
+
v[1] * factor,
|
|
146
|
+
];
|
|
147
|
+
};
|
|
148
|
+
return Point2;
|
|
149
|
+
}());
|
|
150
|
+
exports.Point2 = Point2;
|
|
151
|
+
});
|
|
152
|
+
define("src/figures/circle", ["require", "exports", "src/matrix"], function (require, exports, matrix_1) {
|
|
153
|
+
"use strict";
|
|
154
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
155
|
+
exports.Circle = void 0;
|
|
156
|
+
var Circle = (function () {
|
|
157
|
+
function Circle(center, r) {
|
|
158
|
+
this.center = center;
|
|
159
|
+
this.r = r;
|
|
160
|
+
}
|
|
161
|
+
Circle.prototype.transform = function (matrix) {
|
|
162
|
+
this.center = matrix_1.Matrix2d.apply(matrix, this.center);
|
|
163
|
+
};
|
|
164
|
+
return Circle;
|
|
165
|
+
}());
|
|
166
|
+
exports.Circle = Circle;
|
|
167
|
+
});
|
|
168
|
+
define("src/figures/straight-line", ["require", "exports", "src/matrix"], function (require, exports, matrix_2) {
|
|
169
|
+
"use strict";
|
|
170
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
171
|
+
exports.StraightLine = void 0;
|
|
172
|
+
var StraightLine = (function () {
|
|
173
|
+
function StraightLine(p1, p2) {
|
|
174
|
+
this.p1 = p1;
|
|
175
|
+
this.p2 = p2;
|
|
176
|
+
}
|
|
177
|
+
StraightLine.prototype.transform = function (matrix, transformThis) {
|
|
178
|
+
if (transformThis === void 0) { transformThis = false; }
|
|
179
|
+
if (transformThis) {
|
|
180
|
+
return this;
|
|
181
|
+
}
|
|
182
|
+
return new StraightLine(matrix_2.Matrix2d.apply(matrix, this.p1), matrix_2.Matrix2d.apply(matrix, this.p2));
|
|
183
|
+
};
|
|
184
|
+
return StraightLine;
|
|
185
|
+
}());
|
|
186
|
+
exports.StraightLine = StraightLine;
|
|
187
|
+
});
|
|
188
|
+
define("src/figures/index", ["require", "exports", "src/figures/point", "src/figures/circle", "src/figures/straight-line"], function (require, exports, point_1, circle_1, straight_line_1) {
|
|
189
|
+
"use strict";
|
|
190
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
191
|
+
__exportStar(point_1, exports);
|
|
192
|
+
__exportStar(circle_1, exports);
|
|
193
|
+
__exportStar(straight_line_1, exports);
|
|
194
|
+
});
|
|
195
|
+
define("src/matrix", ["require", "exports"], function (require, exports) {
|
|
196
|
+
"use strict";
|
|
197
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
198
|
+
exports.Matrix2d = exports.identityMatrix = void 0;
|
|
199
|
+
exports.identityMatrix = [1, 0, 0, 1, 0, 0];
|
|
200
|
+
var Matrix2d = (function () {
|
|
201
|
+
function Matrix2d() {
|
|
202
|
+
}
|
|
203
|
+
Matrix2d.multiply = function (matrix) {
|
|
204
|
+
var matrices = [];
|
|
205
|
+
for (var _i = 1; _i < arguments.length; _i++) {
|
|
206
|
+
matrices[_i - 1] = arguments[_i];
|
|
207
|
+
}
|
|
208
|
+
for (var _a = 0, matrices_1 = matrices; _a < matrices_1.length; _a++) {
|
|
209
|
+
var m = matrices_1[_a];
|
|
210
|
+
matrix = [
|
|
211
|
+
matrix[0] * m[0] + matrix[2] * m[1],
|
|
212
|
+
matrix[1] * m[0] + matrix[3] * m[1],
|
|
213
|
+
matrix[0] * m[2] + matrix[2] * m[3],
|
|
214
|
+
matrix[1] * m[2] + matrix[3] * m[3],
|
|
215
|
+
matrix[0] * m[4] + matrix[2] * m[5] + matrix[4],
|
|
216
|
+
matrix[1] * m[4] + matrix[3] * m[5] + matrix[5],
|
|
217
|
+
];
|
|
218
|
+
}
|
|
219
|
+
return matrix;
|
|
220
|
+
};
|
|
221
|
+
Matrix2d.apply = function (matrix, point) {
|
|
222
|
+
return [
|
|
223
|
+
matrix[0] * point[0] + matrix[2] * point[1] + matrix[4],
|
|
224
|
+
matrix[1] * point[0] + matrix[3] * point[1] + matrix[5],
|
|
225
|
+
];
|
|
226
|
+
};
|
|
227
|
+
return Matrix2d;
|
|
228
|
+
}());
|
|
229
|
+
exports.Matrix2d = Matrix2d;
|
|
230
|
+
});
|
|
231
|
+
define("src/operator", ["require", "exports", "src/angle"], function (require, exports, angle_1) {
|
|
232
|
+
"use strict";
|
|
233
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
234
|
+
exports.Operator = void 0;
|
|
235
|
+
var Operator = (function () {
|
|
236
|
+
function Operator() {
|
|
237
|
+
}
|
|
238
|
+
Operator.rotateIdentity = function (angle, unit) {
|
|
239
|
+
if (unit === void 0) { unit = angle_1.AngleUnits.Deg; }
|
|
240
|
+
angle = angle_1.Angle.toRad(angle, unit);
|
|
241
|
+
this.temp1 = Math.cos(angle);
|
|
242
|
+
this.temp2 = Math.sin(angle);
|
|
243
|
+
return [
|
|
244
|
+
this.temp1,
|
|
245
|
+
this.temp2,
|
|
246
|
+
-this.temp2,
|
|
247
|
+
this.temp1,
|
|
248
|
+
0, 0
|
|
249
|
+
];
|
|
250
|
+
};
|
|
251
|
+
return Operator;
|
|
252
|
+
}());
|
|
253
|
+
exports.Operator = Operator;
|
|
254
|
+
});
|
|
255
|
+
define("src/colors/color", ["require", "exports"], function (require, exports) {
|
|
256
|
+
"use strict";
|
|
257
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
258
|
+
exports.Color = void 0;
|
|
259
|
+
var Color = (function () {
|
|
260
|
+
function Color(red, green, blue) {
|
|
261
|
+
this.red = red;
|
|
262
|
+
this.green = green;
|
|
263
|
+
this.blue = blue;
|
|
264
|
+
this.red = Math.max(Math.min(red, 255), 0);
|
|
265
|
+
this.green = Math.max(Math.min(green, 255), 0);
|
|
266
|
+
this.blue = Math.max(Math.min(blue, 255), 0);
|
|
267
|
+
}
|
|
268
|
+
Color.prototype.toCSS = function () {
|
|
269
|
+
return "rgb(".concat(this.red, ", ").concat(this.green, ", ").concat(this.blue, ")");
|
|
270
|
+
};
|
|
271
|
+
return Color;
|
|
272
|
+
}());
|
|
273
|
+
exports.Color = Color;
|
|
274
|
+
});
|
|
275
|
+
define("src/colors/conic.gradient", ["require", "exports", "src/colors/color"], function (require, exports, color_1) {
|
|
276
|
+
"use strict";
|
|
277
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
278
|
+
exports.ConicGradient = void 0;
|
|
279
|
+
var ConicGradient = (function () {
|
|
280
|
+
function ConicGradient() {
|
|
281
|
+
var colors = [];
|
|
282
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
283
|
+
colors[_i] = arguments[_i];
|
|
284
|
+
}
|
|
285
|
+
this.colors = __spreadArray([], colors, true).sort(function (a, b) { return a.angle - b.angle; });
|
|
286
|
+
this.colors.push({
|
|
287
|
+
angle: 1,
|
|
288
|
+
color: this.colors[0].color
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
ConicGradient.prototype.getColorAtAngle = function (angle) {
|
|
292
|
+
var prev = undefined;
|
|
293
|
+
var next = undefined;
|
|
294
|
+
for (var _i = 0, _a = this.colors; _i < _a.length; _i++) {
|
|
295
|
+
var color = _a[_i];
|
|
296
|
+
if (color.angle === angle)
|
|
297
|
+
return color.color;
|
|
298
|
+
if (color.angle < angle)
|
|
299
|
+
prev = color;
|
|
300
|
+
if (color.angle > angle) {
|
|
301
|
+
next = color;
|
|
302
|
+
break;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
if (!prev || !next)
|
|
306
|
+
return undefined;
|
|
307
|
+
var coef = (angle - prev.angle) / (next.angle - prev.angle);
|
|
308
|
+
return new color_1.Color(Math.floor((next.color.red - prev.color.red) * coef + prev.color.red), Math.floor((next.color.green - prev.color.green) * coef + prev.color.green), Math.floor((next.color.blue - prev.color.blue) * coef + prev.color.blue));
|
|
309
|
+
};
|
|
310
|
+
ConicGradient.prototype.getAngleByColor = function (color) {
|
|
311
|
+
var prev;
|
|
312
|
+
var next = this.colors[0];
|
|
313
|
+
if (color.red === next.color.red && color.green === next.color.green && color.blue === next.color.blue)
|
|
314
|
+
return next.angle;
|
|
315
|
+
for (var i = 1; i < this.colors.length; i++) {
|
|
316
|
+
next = this.colors[i];
|
|
317
|
+
prev = this.colors[i - 1];
|
|
318
|
+
if (color.red === next.color.red && color.green === next.color.green && color.blue === next.color.blue)
|
|
319
|
+
return next.angle;
|
|
320
|
+
var redDif = next.color.red - prev.color.red;
|
|
321
|
+
var greenDif = next.color.green - prev.color.green;
|
|
322
|
+
var blueDif = next.color.blue - prev.color.blue;
|
|
323
|
+
var redDifColor = color.red - prev.color.red;
|
|
324
|
+
var greenDifColor = color.green - prev.color.green;
|
|
325
|
+
var blueDifColor = color.blue - prev.color.blue;
|
|
326
|
+
if (((redDifColor >= 0 && redDifColor <= redDif) || (redDifColor <= 0 && redDifColor >= redDif)) &&
|
|
327
|
+
((greenDifColor >= 0 && greenDifColor <= greenDif) || (greenDifColor <= 0 && greenDifColor >= greenDif)) &&
|
|
328
|
+
((blueDifColor >= 0 && blueDifColor <= blueDif) || (blueDifColor <= 0 && blueDifColor >= blueDif))) {
|
|
329
|
+
var redCoef = ((color.red - prev.color.red) / (next.color.red - prev.color.red));
|
|
330
|
+
var greenCoef = ((color.green - prev.color.green) / (next.color.green - prev.color.green));
|
|
331
|
+
var blueCoef = ((color.blue - prev.color.blue) / (next.color.blue - prev.color.blue));
|
|
332
|
+
var coefs = [redCoef, greenCoef, blueCoef].filter(Boolean);
|
|
333
|
+
return (next.angle - prev.angle) * Math.min.apply(Math, coefs) + prev.angle;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
return undefined;
|
|
337
|
+
};
|
|
338
|
+
ConicGradient.prototype.isColorInRange = function (color) {
|
|
339
|
+
return Boolean(this.getAngleByColor(color));
|
|
340
|
+
};
|
|
341
|
+
ConicGradient.prototype.toCanvas = function (ctx, center) {
|
|
342
|
+
var gradient = ctx.createConicGradient.apply(ctx, __spreadArray([0], center, false));
|
|
343
|
+
for (var _i = 0, _a = this.colors; _i < _a.length; _i++) {
|
|
344
|
+
var color = _a[_i];
|
|
345
|
+
gradient.addColorStop(color.angle, color.color.toCSS());
|
|
346
|
+
}
|
|
347
|
+
return gradient;
|
|
348
|
+
};
|
|
349
|
+
ConicGradient.prototype.toCSS = function () {
|
|
350
|
+
var s = '';
|
|
351
|
+
for (var _i = 0, _a = this.colors; _i < _a.length; _i++) {
|
|
352
|
+
var color = _a[_i];
|
|
353
|
+
if (s)
|
|
354
|
+
s += ',';
|
|
355
|
+
s += "rgb(".concat(color.color.red, ",").concat(color.color.green, ",").concat(color.color.blue, ")");
|
|
356
|
+
}
|
|
357
|
+
s = "conic-gradient(in srgb from 0.25turn at 50% 50%, ".concat(s, ")");
|
|
358
|
+
return s;
|
|
359
|
+
};
|
|
360
|
+
return ConicGradient;
|
|
361
|
+
}());
|
|
362
|
+
exports.ConicGradient = ConicGradient;
|
|
363
|
+
});
|
|
364
|
+
define("src/colors/index", ["require", "exports", "src/colors/color", "src/colors/conic.gradient"], function (require, exports, color_2, conic_gradient_1) {
|
|
365
|
+
"use strict";
|
|
366
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
367
|
+
__exportStar(color_2, exports);
|
|
368
|
+
__exportStar(conic_gradient_1, exports);
|
|
369
|
+
});
|
|
370
|
+
define("src/index", ["require", "exports", "src/angle", "src/matrix", "src/operator", "src/utils", "src/colors/index", "src/figures/index"], function (require, exports, angle_2, matrix_3, operator_1, utils_2, colors_1, figures_1) {
|
|
371
|
+
"use strict";
|
|
372
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
373
|
+
__exportStar(angle_2, exports);
|
|
374
|
+
__exportStar(matrix_3, exports);
|
|
375
|
+
__exportStar(operator_1, exports);
|
|
376
|
+
__exportStar(utils_2, exports);
|
|
377
|
+
__exportStar(colors_1, exports);
|
|
378
|
+
__exportStar(figures_1, exports);
|
|
379
|
+
});
|
|
380
|
+
define("index", ["require", "exports", "src/index"], function (require, exports, src_1) {
|
|
381
|
+
"use strict";
|
|
382
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
383
|
+
__exportStar(src_1, exports);
|
|
384
|
+
});
|
|
385
|
+
//# sourceMappingURL=math.js.map
|
package/dist/math.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"math.js","sourceRoot":"","sources":["../src/utils.ts","../src/angle.ts","../src/figures/point.ts","../src/figures/circle.ts","../src/figures/straight-line.ts","../src/figures/index.ts","../src/matrix.ts","../src/operator.ts","../src/colors/color.ts","../src/colors/conic.gradient.ts","../src/colors/index.ts","../src/index.ts","../index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fbltd/math",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "",
|
|
5
|
-
"main": "
|
|
5
|
+
"main": "dist/math.ts",
|
|
6
|
+
"files": [
|
|
7
|
+
"dist",
|
|
8
|
+
"README.ms"
|
|
9
|
+
],
|
|
6
10
|
"scripts": {
|
|
7
|
-
"build": "node_modules/.bin/tsc",
|
|
11
|
+
"build": "rm -r dist || echo '' && node_modules/.bin/tsc",
|
|
12
|
+
"deploy": "npm run build && npm version patch && git push && npm publish",
|
|
8
13
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
9
14
|
},
|
|
10
15
|
"repository": {
|
package/bundler.config.json
DELETED
package/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './src'
|
package/src/angle.ts
DELETED
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
import {isCorrectNumber, toPositive} from "./utils";
|
|
2
|
-
|
|
3
|
-
export enum AngleUnits {
|
|
4
|
-
Deg = 0,
|
|
5
|
-
Rad = 1,
|
|
6
|
-
Turn = 2,
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
export class Angle {
|
|
11
|
-
|
|
12
|
-
// region Converters
|
|
13
|
-
static toRad(angle: number, unit: AngleUnits = AngleUnits.Deg) {
|
|
14
|
-
switch (unit) {
|
|
15
|
-
case AngleUnits.Rad:
|
|
16
|
-
return angle
|
|
17
|
-
case AngleUnits.Deg:
|
|
18
|
-
return angle * Math.PI / 180
|
|
19
|
-
case AngleUnits.Turn:
|
|
20
|
-
return Math.PI * 2 * angle
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
static toTurn(angle: number, unit: AngleUnits = AngleUnits.Deg) {
|
|
25
|
-
switch (unit) {
|
|
26
|
-
case AngleUnits.Turn:
|
|
27
|
-
return angle
|
|
28
|
-
case AngleUnits.Deg:
|
|
29
|
-
return angle / 360
|
|
30
|
-
case AngleUnits.Rad:
|
|
31
|
-
return angle / (Math.PI * 2)
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
static toDeg(angle: number, unit: AngleUnits = AngleUnits.Rad) {
|
|
36
|
-
switch (unit) {
|
|
37
|
-
case AngleUnits.Deg:
|
|
38
|
-
return angle
|
|
39
|
-
case AngleUnits.Turn:
|
|
40
|
-
return angle * 360
|
|
41
|
-
case AngleUnits.Rad:
|
|
42
|
-
return angle * 180 / Math.PI
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// endregion Converters
|
|
47
|
-
|
|
48
|
-
static toPositive(angle: number, unit: AngleUnits) {
|
|
49
|
-
switch (unit) {
|
|
50
|
-
case AngleUnits.Deg:
|
|
51
|
-
return toPositive(angle, 360)
|
|
52
|
-
case AngleUnits.Turn:
|
|
53
|
-
return toPositive(angle, 1)
|
|
54
|
-
case AngleUnits.Rad:
|
|
55
|
-
return toPositive(angle, Math.PI * 2)
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
static normalize(angle: number, unit: AngleUnits) {
|
|
60
|
-
switch (unit) {
|
|
61
|
-
// 0 - 359.9999
|
|
62
|
-
case AngleUnits.Deg:
|
|
63
|
-
return Angle.toPositive(angle, unit) % 360
|
|
64
|
-
// 0 - Math.PI * 2
|
|
65
|
-
case AngleUnits.Rad:
|
|
66
|
-
return Angle.toPositive(angle, unit) % (Math.PI * 2)
|
|
67
|
-
// 0 - 1
|
|
68
|
-
case AngleUnits.Turn:
|
|
69
|
-
return Angle.toPositive(angle, unit) % 1
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// region representation
|
|
74
|
-
static toCSS(angle: number, unit: AngleUnits) {
|
|
75
|
-
if (!isCorrectNumber(angle)) return ''
|
|
76
|
-
return `rotate(${angle}${Angle.angleUnitCorrespondence[unit]})`
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
static angleUnitCorrespondence: Record<AngleUnits, string> = {
|
|
80
|
-
[AngleUnits.Rad]: 'rad',
|
|
81
|
-
[AngleUnits.Turn]: 'turn',
|
|
82
|
-
[AngleUnits.Deg]: 'deg',
|
|
83
|
-
}
|
|
84
|
-
// endregion representation
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
|
package/src/colors/color.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export class Color {
|
|
2
|
-
constructor(public red: number, public green: number, public blue: number) {
|
|
3
|
-
this.red = Math.max(Math.min(red, 255), 0)
|
|
4
|
-
this.green = Math.max(Math.min(green, 255), 0)
|
|
5
|
-
this.blue = Math.max(Math.min(blue, 255), 0)
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
toCSS() {
|
|
9
|
-
return `rgb(${this.red}, ${this.green}, ${this.blue})`
|
|
10
|
-
}
|
|
11
|
-
}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import {Color} from "./color";
|
|
2
|
-
import {IPoint2} from "../figures";
|
|
3
|
-
|
|
4
|
-
export class ConicGradient {
|
|
5
|
-
colors: { angle: number, color: Color }[]
|
|
6
|
-
|
|
7
|
-
constructor(...colors: { angle: number, color: Color }[]) {
|
|
8
|
-
this.colors = [...colors].sort((a, b) => a.angle - b.angle)
|
|
9
|
-
this.colors.push({
|
|
10
|
-
angle: 1,
|
|
11
|
-
color: this.colors[0].color
|
|
12
|
-
})
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Получить цвет по углу от оси X по часовой стрелке
|
|
17
|
-
* @param angle единица измерения угла должна быть той же самой, что и углы всех передаваемых в констурктор цветов
|
|
18
|
-
*/
|
|
19
|
-
getColorAtAngle(angle: number) {
|
|
20
|
-
let prev = undefined
|
|
21
|
-
let next = undefined
|
|
22
|
-
for (let color of this.colors) {
|
|
23
|
-
if (color.angle === angle) return color.color
|
|
24
|
-
if (color.angle < angle) prev = color
|
|
25
|
-
if (color.angle > angle) {
|
|
26
|
-
next = color
|
|
27
|
-
break
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
if (!prev || !next) return undefined
|
|
32
|
-
|
|
33
|
-
const coef = (angle - prev.angle) / (next.angle - prev.angle)
|
|
34
|
-
|
|
35
|
-
return new Color(
|
|
36
|
-
Math.floor((next.color.red - prev.color.red) * coef + prev.color.red),
|
|
37
|
-
Math.floor((next.color.green - prev.color.green) * coef + prev.color.green),
|
|
38
|
-
Math.floor((next.color.blue - prev.color.blue) * coef + prev.color.blue),
|
|
39
|
-
)
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
getAngleByColor(color: Color) {
|
|
43
|
-
let prev: typeof this.colors[number]
|
|
44
|
-
let next = this.colors[0]
|
|
45
|
-
if (color.red === next.color.red && color.green === next.color.green && color.blue === next.color.blue) return next.angle
|
|
46
|
-
for (let i = 1; i < this.colors.length; i++) {
|
|
47
|
-
next = this.colors[i]
|
|
48
|
-
prev = this.colors[i - 1]
|
|
49
|
-
if (color.red === next.color.red && color.green === next.color.green && color.blue === next.color.blue) return next.angle
|
|
50
|
-
|
|
51
|
-
let redDif = next.color.red - prev.color.red
|
|
52
|
-
let greenDif = next.color.green - prev.color.green
|
|
53
|
-
let blueDif = next.color.blue - prev.color.blue
|
|
54
|
-
let redDifColor = color.red - prev.color.red
|
|
55
|
-
let greenDifColor = color.green - prev.color.green
|
|
56
|
-
let blueDifColor = color.blue - prev.color.blue
|
|
57
|
-
|
|
58
|
-
if (
|
|
59
|
-
((redDifColor >= 0 && redDifColor <= redDif) || (redDifColor <= 0 && redDifColor >= redDif)) &&
|
|
60
|
-
((greenDifColor >= 0 && greenDifColor <= greenDif) || (greenDifColor <= 0 && greenDifColor >= greenDif)) &&
|
|
61
|
-
((blueDifColor >= 0 && blueDifColor <= blueDif) || (blueDifColor <= 0 && blueDifColor >= blueDif))
|
|
62
|
-
) {
|
|
63
|
-
|
|
64
|
-
const redCoef = ((color.red - prev.color.red) / (next.color.red - prev.color.red))
|
|
65
|
-
const greenCoef = ((color.green - prev.color.green) / (next.color.green - prev.color.green))
|
|
66
|
-
const blueCoef = ((color.blue - prev.color.blue) / (next.color.blue - prev.color.blue))
|
|
67
|
-
const coefs = [redCoef, greenCoef, blueCoef].filter(Boolean)
|
|
68
|
-
return (next.angle - prev.angle) * Math.min(...coefs) + prev.angle
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
return undefined
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
isColorInRange(color: Color): boolean {
|
|
75
|
-
return Boolean(this.getAngleByColor(color))
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Для использования метода, углы должны быть в Turn единицах измерения
|
|
80
|
-
*/
|
|
81
|
-
toCanvas(ctx: CanvasRenderingContext2D, center: IPoint2) {
|
|
82
|
-
const gradient = ctx.createConicGradient(0, ...center as [number, number])
|
|
83
|
-
for (let color of this.colors) {
|
|
84
|
-
gradient.addColorStop(color.angle, color.color.toCSS())
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
return gradient
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Для использования метода, углы должны быть в Turn единицах измерения
|
|
92
|
-
*/
|
|
93
|
-
toCSS() {
|
|
94
|
-
let s = ''
|
|
95
|
-
|
|
96
|
-
for (let color of this.colors) {
|
|
97
|
-
if (s) s += ','
|
|
98
|
-
s += `rgb(${color.color.red},${color.color.green},${color.color.blue})`
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
s = `conic-gradient(in srgb from 0.25turn at 50% 50%, ${s})`
|
|
102
|
-
return s
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
}
|
package/src/colors/index.ts
DELETED
package/src/figures/circle.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import {IPoint2} from "./point";
|
|
2
|
-
import {IMatrix2d, Matrix2d} from "../matrix";
|
|
3
|
-
|
|
4
|
-
export class Circle {
|
|
5
|
-
constructor(public center: IPoint2, public r: number) {
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
transform(matrix: IMatrix2d) {
|
|
10
|
-
this.center = Matrix2d.apply(matrix, this.center)
|
|
11
|
-
}
|
|
12
|
-
}
|
package/src/figures/index.ts
DELETED
package/src/figures/point.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Точка/вектор
|
|
3
|
-
*/
|
|
4
|
-
export type IPoint2 = [number, number]
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Точка/вектор
|
|
8
|
-
*/
|
|
9
|
-
export class Point2 {
|
|
10
|
-
static sum(p1: IPoint2, p2: IPoint2): IPoint2 {
|
|
11
|
-
return [
|
|
12
|
-
p1[0] + p2[0],
|
|
13
|
-
p1[1] + p2[1],
|
|
14
|
-
]
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
static scale(v: IPoint2, factor: number): IPoint2 {
|
|
18
|
-
return [
|
|
19
|
-
v[0] * factor,
|
|
20
|
-
v[1] * factor,
|
|
21
|
-
]
|
|
22
|
-
}
|
|
23
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import {IPoint2} from "./point";
|
|
2
|
-
import {IMatrix2d, Matrix2d} from "../matrix";
|
|
3
|
-
|
|
4
|
-
export class StraightLine {
|
|
5
|
-
constructor(public p1: IPoint2, public p2: IPoint2) {
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
transform(matrix: IMatrix2d, transformThis = false) {
|
|
10
|
-
if (transformThis) {
|
|
11
|
-
return this
|
|
12
|
-
}
|
|
13
|
-
return new StraightLine(Matrix2d.apply(matrix, this.p1), Matrix2d.apply(matrix, this.p2))
|
|
14
|
-
}
|
|
15
|
-
}
|
package/src/index.ts
DELETED
package/src/matrix.ts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import {IPoint2} from "./figures";
|
|
2
|
-
|
|
3
|
-
export type IMatrix2d = [
|
|
4
|
-
number, number, number,
|
|
5
|
-
number, number, number,
|
|
6
|
-
]
|
|
7
|
-
|
|
8
|
-
export const identityMatrix: IMatrix2d = [1, 0, 0, 1, 0, 0]
|
|
9
|
-
|
|
10
|
-
export class Matrix2d {
|
|
11
|
-
static multiply(matrix: IMatrix2d, ...matrices: IMatrix2d[]) {
|
|
12
|
-
for (let m of matrices) {
|
|
13
|
-
matrix = [
|
|
14
|
-
matrix[0] * m[0] + matrix[2] * m[1],
|
|
15
|
-
matrix[1] * m[0] + matrix[3] * m[1],
|
|
16
|
-
matrix[0] * m[2] + matrix[2] * m[3],
|
|
17
|
-
matrix[1] * m[2] + matrix[3] * m[3],
|
|
18
|
-
matrix[0] * m[4] + matrix[2] * m[5] + matrix[4],
|
|
19
|
-
matrix[1] * m[4] + matrix[3] * m[5] + matrix[5],
|
|
20
|
-
]
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
return matrix
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
static apply(matrix: IMatrix2d, point: IPoint2): IPoint2 {
|
|
27
|
-
return [
|
|
28
|
-
matrix[0] * point[0] + matrix[2] * point[1] + matrix[4],
|
|
29
|
-
matrix[1] * point[0] + matrix[3] * point[1] + matrix[5],
|
|
30
|
-
]
|
|
31
|
-
}
|
|
32
|
-
}
|
package/src/operator.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import {IMatrix2d} from "./matrix";
|
|
2
|
-
import {Angle, AngleUnits} from "./angle";
|
|
3
|
-
|
|
4
|
-
export class Operator {
|
|
5
|
-
private static temp1: number
|
|
6
|
-
private static temp2: number
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* @param angle поворот в градусах
|
|
10
|
-
*/
|
|
11
|
-
static rotateIdentity(angle: number, unit: AngleUnits = AngleUnits.Deg): IMatrix2d {
|
|
12
|
-
angle = Angle.toRad(angle, unit)
|
|
13
|
-
this.temp1 = Math.cos(angle)
|
|
14
|
-
this.temp2 = Math.sin(angle)
|
|
15
|
-
return [
|
|
16
|
-
this.temp1,
|
|
17
|
-
this.temp2,
|
|
18
|
-
-this.temp2,
|
|
19
|
-
this.temp1,
|
|
20
|
-
0, 0
|
|
21
|
-
]
|
|
22
|
-
}
|
|
23
|
-
}
|
package/src/utils.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export function approximately(theValue: number, is: number, withPrecision: number = 1e-8) {
|
|
2
|
-
return Math.abs(theValue - is) <= withPrecision
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
export function toPositive(value: number, range: number) {
|
|
6
|
-
if (value >= 0) return Math.abs(value)
|
|
7
|
-
return Math.abs((range + value % range) % range)
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export function isCorrectNumber(value: any) {
|
|
11
|
-
let v: number = +value
|
|
12
|
-
if (!isNaN(value) && isFinite(value)) {
|
|
13
|
-
v = parseFloat(value)
|
|
14
|
-
return !isNaN(v) && isFinite(v)
|
|
15
|
-
}
|
|
16
|
-
return false
|
|
17
|
-
}
|