pimath 0.0.33 → 0.0.34
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/pi.js +6530 -1
- package/dist/pi.js.map +1 -1
- package/dist/pi.min.js +2 -0
- package/dist/pi.min.js.map +1 -0
- package/docs/assets/search.js +1 -1
- package/docs/classes/algebra.Equation.html +9 -9
- package/docs/classes/algebra.LinearSystem.html +1 -1
- package/docs/classes/algebra.Logicalset.html +2 -2
- package/docs/classes/algebra.Monom.html +37 -37
- package/docs/classes/algebra.Polynom.html +10 -10
- package/docs/classes/algebra.PolynomExpFactor.html +1 -1
- package/docs/classes/algebra.PolynomExpProduct.html +1 -1
- package/docs/classes/algebra.Rational.html +2 -2
- package/docs/classes/coefficients.Fraction.html +4 -4
- package/docs/classes/coefficients.Nthroot.html +1 -1
- package/docs/classes/geometry.Circle.html +2 -2
- package/docs/classes/geometry.Line.html +2 -2
- package/docs/classes/geometry.Point.html +1 -1
- package/docs/classes/geometry.Triangle.html +5 -5
- package/docs/classes/geometry.Vector.html +1 -1
- package/docs/classes/numeric.Numeric.html +5 -5
- package/docs/classes/shutingyard.Shutingyard.html +4 -4
- package/docs/enums/geometry.LinePropriety.html +1 -0
- package/docs/enums/shutingyard.ShutingyardMode.html +1 -1
- package/docs/enums/shutingyard.ShutingyardType.html +1 -1
- package/docs/interfaces/geometry.remarquableLines.html +1 -1
- package/docs/modules/algebra.html +1 -1
- package/docs/modules/coefficients.html +1 -1
- package/docs/modules/geometry.html +1 -1
- package/docs/modules/random.Random.html +1 -1
- package/docs/modules/random.html +1 -1
- package/docs/modules/shutingyard.html +1 -1
- package/esm/main.js +2 -0
- package/esm/main.js.map +1 -1
- package/esm/maths/algebra/equation.d.ts +62 -17
- package/esm/maths/algebra/equation.js +597 -502
- package/esm/maths/algebra/equation.js.map +1 -1
- package/esm/maths/algebra/linearSystem.js +154 -101
- package/esm/maths/algebra/linearSystem.js.map +1 -1
- package/esm/maths/algebra/logicalset.d.ts +11 -0
- package/esm/maths/algebra/logicalset.js +18 -6
- package/esm/maths/algebra/logicalset.js.map +1 -1
- package/esm/maths/algebra/monom.d.ts +144 -0
- package/esm/maths/algebra/monom.js +624 -396
- package/esm/maths/algebra/monom.js.map +1 -1
- package/esm/maths/algebra/polynom.d.ts +49 -0
- package/esm/maths/algebra/polynom.js +995 -712
- package/esm/maths/algebra/polynom.js.map +1 -1
- package/esm/maths/algebra/rational.d.ts +12 -0
- package/esm/maths/algebra/rational.js +97 -82
- package/esm/maths/algebra/rational.js.map +1 -1
- package/esm/maths/coefficients/fraction.d.ts +18 -0
- package/esm/maths/coefficients/fraction.js +390 -332
- package/esm/maths/coefficients/fraction.js.map +1 -1
- package/esm/maths/coefficients/nthroot.d.ts +3 -0
- package/esm/maths/coefficients/nthroot.js +48 -33
- package/esm/maths/coefficients/nthroot.js.map +1 -1
- package/esm/maths/expressions/numexp.js +11 -3
- package/esm/maths/expressions/numexp.js.map +1 -1
- package/esm/maths/expressions/polynomexp.bkp.js +93 -93
- package/esm/maths/expressions/polynomexp.bkp.js.map +1 -1
- package/esm/maths/expressions/polynomexp.js +22 -9
- package/esm/maths/expressions/polynomexp.js.map +1 -1
- package/esm/maths/geometry/circle.d.ts +18 -6
- package/esm/maths/geometry/circle.js +139 -42
- package/esm/maths/geometry/circle.js.map +1 -1
- package/esm/maths/geometry/line.d.ts +9 -2
- package/esm/maths/geometry/line.js +245 -188
- package/esm/maths/geometry/line.js.map +1 -1
- package/esm/maths/geometry/point.d.ts +12 -0
- package/esm/maths/geometry/point.js +121 -73
- package/esm/maths/geometry/point.js.map +1 -1
- package/esm/maths/geometry/triangle.d.ts +22 -0
- package/esm/maths/geometry/triangle.js +197 -158
- package/esm/maths/geometry/triangle.js.map +1 -1
- package/esm/maths/geometry/vector.d.ts +4 -0
- package/esm/maths/geometry/vector.js +139 -115
- package/esm/maths/geometry/vector.js.map +1 -1
- package/esm/maths/numeric.d.ts +17 -0
- package/esm/maths/numeric.js +40 -0
- package/esm/maths/numeric.js.map +1 -1
- package/esm/maths/random/randomCore.js +15 -15
- package/esm/maths/random/randomCore.js.map +1 -1
- package/esm/maths/random/rndFraction.d.ts +3 -0
- package/esm/maths/random/rndFraction.js +19 -16
- package/esm/maths/random/rndFraction.js.map +1 -1
- package/esm/maths/random/rndHelpers.d.ts +17 -0
- package/esm/maths/random/rndHelpers.js +20 -0
- package/esm/maths/random/rndHelpers.js.map +1 -1
- package/esm/maths/random/rndMonom.d.ts +3 -0
- package/esm/maths/random/rndMonom.js +33 -26
- package/esm/maths/random/rndMonom.js.map +1 -1
- package/esm/maths/random/rndPolynom.d.ts +3 -0
- package/esm/maths/random/rndPolynom.js +49 -37
- package/esm/maths/random/rndPolynom.js.map +1 -1
- package/esm/maths/shutingyard.d.ts +21 -0
- package/esm/maths/shutingyard.js +86 -9
- package/esm/maths/shutingyard.js.map +1 -1
- package/package.json +2 -2
- package/public/index.html +47 -0
- package/src/maths/algebra/equation.ts +142 -128
- package/src/maths/geometry/circle.ts +168 -75
- package/src/maths/geometry/line.ts +1 -1
- package/src/maths/geometry/point.ts +25 -2
- package/src/maths/numeric.ts +15 -0
- package/tests/geometry/circle.test.ts +33 -0
- package/tsconfig.json +2 -2
- package/webpack-production-min.config.js +26 -0
- package/webpack-production.config.js +1 -1
- package/dev/pi.js +0 -5392
- package/dev/pi.js.map +0 -1
|
@@ -11,35 +11,30 @@ class PolynomExpFactor {
|
|
|
11
11
|
this._powerAsInteger = true;
|
|
12
12
|
this._forceParenthesis = true;
|
|
13
13
|
}
|
|
14
|
-
_forceParenthesis;
|
|
15
14
|
get forceParenthesis() {
|
|
16
15
|
return this._forceParenthesis;
|
|
17
16
|
}
|
|
18
17
|
set forceParenthesis(value) {
|
|
19
18
|
this._forceParenthesis = value;
|
|
20
19
|
}
|
|
21
|
-
_fn;
|
|
22
20
|
get fn() {
|
|
23
21
|
return this._fn;
|
|
24
22
|
}
|
|
25
23
|
set fn(value) {
|
|
26
24
|
this._fn = value;
|
|
27
25
|
}
|
|
28
|
-
_powerAsInteger;
|
|
29
26
|
get powerAsInteger() {
|
|
30
27
|
return this._powerAsInteger;
|
|
31
28
|
}
|
|
32
29
|
set powerAsInteger(value) {
|
|
33
30
|
this._powerAsInteger = value;
|
|
34
31
|
}
|
|
35
|
-
_polynom;
|
|
36
32
|
get polynom() {
|
|
37
33
|
return this._polynom;
|
|
38
34
|
}
|
|
39
35
|
set polynom(value) {
|
|
40
36
|
this._polynom = value;
|
|
41
37
|
}
|
|
42
|
-
_degree;
|
|
43
38
|
get degree() {
|
|
44
39
|
return this._degree;
|
|
45
40
|
}
|
|
@@ -49,16 +44,21 @@ class PolynomExpFactor {
|
|
|
49
44
|
get tex() {
|
|
50
45
|
let tex;
|
|
51
46
|
if (this._degree.isOne() && (this._fn !== undefined || !this._forceParenthesis)) {
|
|
47
|
+
// If degree is one, no need to add the parenthesis.
|
|
52
48
|
tex = this._polynom.tex;
|
|
53
49
|
}
|
|
54
50
|
else {
|
|
51
|
+
// the degree is not one, add the parenthesis.
|
|
55
52
|
if (this._powerAsInteger && !this._degree.isRelative()) {
|
|
53
|
+
// the degree is a fraction and we want natural powers => use sqrt.
|
|
56
54
|
tex = `\\sqrt${this._degree.denominator !== 2 ? `[ ${this._degree.denominator} ]` : ''}{ ${this._polynom.tex} }^{ ${this._degree.numerator} }`;
|
|
57
55
|
}
|
|
58
56
|
else if (this.isCoefficient && this.firstCoefficient.isNatural()) {
|
|
57
|
+
// the value is a natural number (eg 3, 7, ...)
|
|
59
58
|
tex = this._polynom.tex + this._texDegree;
|
|
60
59
|
}
|
|
61
60
|
else {
|
|
61
|
+
// In any other case, add the parenthesis by default
|
|
62
62
|
tex = `\\left( ${this._polynom.tex} \\right)${this._texDegree}`;
|
|
63
63
|
}
|
|
64
64
|
}
|
|
@@ -68,6 +68,7 @@ class PolynomExpFactor {
|
|
|
68
68
|
return tex;
|
|
69
69
|
}
|
|
70
70
|
get isCoefficient() {
|
|
71
|
+
// TODO: Maybe reduce the coefficient if it isn't of degree one.
|
|
71
72
|
return this._polynom.degree().isZero();
|
|
72
73
|
}
|
|
73
74
|
get firstCoefficient() {
|
|
@@ -101,28 +102,24 @@ class PolynomExpProduct {
|
|
|
101
102
|
this._positive = true;
|
|
102
103
|
this._asPositiveDegree = true;
|
|
103
104
|
}
|
|
104
|
-
_fn;
|
|
105
105
|
get fn() {
|
|
106
106
|
return this._fn;
|
|
107
107
|
}
|
|
108
108
|
set fn(value) {
|
|
109
109
|
this._fn = value;
|
|
110
110
|
}
|
|
111
|
-
_factors;
|
|
112
111
|
get factors() {
|
|
113
112
|
return this._factors;
|
|
114
113
|
}
|
|
115
114
|
set factors(value) {
|
|
116
115
|
this._factors = value;
|
|
117
116
|
}
|
|
118
|
-
_positive;
|
|
119
117
|
get positive() {
|
|
120
118
|
return this._positive;
|
|
121
119
|
}
|
|
122
120
|
set positive(value) {
|
|
123
121
|
this._positive = value;
|
|
124
122
|
}
|
|
125
|
-
_asPositiveDegree;
|
|
126
123
|
get asPositiveDegree() {
|
|
127
124
|
return this._asPositiveDegree;
|
|
128
125
|
}
|
|
@@ -131,7 +128,9 @@ class PolynomExpProduct {
|
|
|
131
128
|
}
|
|
132
129
|
get tex() {
|
|
133
130
|
let parenthesis = this._factors.length > 1;
|
|
131
|
+
// Default value
|
|
134
132
|
let tex = this._factors.map(factor => factor.setForceParenthesis(parenthesis).tex).join(' \\cdot ');
|
|
133
|
+
// Change the value in some cases...
|
|
135
134
|
if (this._asPositiveDegree) {
|
|
136
135
|
const numerators = this._factors.filter(x => x.degree.isPositive()), denominators = this._factors.filter(x => x.degree.isNegative());
|
|
137
136
|
let numeratorsAsTex, denominatorsAsTex;
|
|
@@ -146,6 +145,7 @@ class PolynomExpProduct {
|
|
|
146
145
|
parenthesis = numerators.length > 1;
|
|
147
146
|
numeratorsAsTex = numerators.map(factor => factor.setForceParenthesis(parenthesis).tex);
|
|
148
147
|
}
|
|
148
|
+
// Change all denominators degrees to positive.
|
|
149
149
|
denominators.map(x => x.degree.opposed());
|
|
150
150
|
if (denominators.length === 1) {
|
|
151
151
|
denominatorsAsTex = [denominators[0].setForceParenthesis(false).tex];
|
|
@@ -154,10 +154,12 @@ class PolynomExpProduct {
|
|
|
154
154
|
parenthesis = denominators.length > 1;
|
|
155
155
|
denominatorsAsTex = denominators.map(factor => factor.setForceParenthesis(parenthesis).tex);
|
|
156
156
|
}
|
|
157
|
+
// restore all degrees to negative again.
|
|
157
158
|
denominators.map(x => x.degree.opposed());
|
|
158
159
|
tex = `\\dfrac{ ${numeratorsAsTex.join(' \\cdot ')} }{ ${denominatorsAsTex.join(' \\cdot ')} }`;
|
|
159
160
|
}
|
|
160
161
|
}
|
|
162
|
+
// Apply the modification
|
|
161
163
|
if (this._fn !== undefined && this._fn.name !== undefined && this._fn.name !== '') {
|
|
162
164
|
tex = `${this._fn.tex}\\left( ${tex} \\right)`;
|
|
163
165
|
}
|
|
@@ -198,7 +200,12 @@ class PolynomExpProduct {
|
|
|
198
200
|
return this;
|
|
199
201
|
}
|
|
200
202
|
integrate(letter) {
|
|
203
|
+
// Handle this kind of case:
|
|
204
|
+
// A * f' * F^n
|
|
205
|
+
// A * f' / F^n, n != 1
|
|
206
|
+
// A * f_1 * f_2 * f_3, where (f_1 * f_2)' = f_3
|
|
201
207
|
if (this._factors.length === 2) {
|
|
208
|
+
// Check polynoms degree: one must of one degree less than the other.
|
|
202
209
|
let d1 = this._factors[0].polynom.degree(letter).value, d2 = this._factors[1].polynom.degree(letter).value;
|
|
203
210
|
if (d1 === d2 + 1) {
|
|
204
211
|
return this._integrateWithInternalDerivative(this._factors[0], this._factors[1], letter);
|
|
@@ -214,9 +221,15 @@ class PolynomExpProduct {
|
|
|
214
221
|
return this;
|
|
215
222
|
}
|
|
216
223
|
_integrateWithInternalDerivative(P, Pinternal, letter) {
|
|
224
|
+
// Get the internal derivative
|
|
217
225
|
let internalDerivative = P.polynom.clone().derivative(letter);
|
|
226
|
+
// Get the factor.
|
|
218
227
|
let { quotient, reminder } = Pinternal.polynom.clone().euclidian(internalDerivative);
|
|
219
228
|
if (reminder.isZero() && quotient.degree(letter).isZero()) {
|
|
229
|
+
// All the conditions are done. Actual situation is
|
|
230
|
+
// (4x-10)(x^2-5x+7)^9
|
|
231
|
+
// P1 = (x^2-5x+7), P2 = (2x-5)
|
|
232
|
+
// => 1/10 * quotient * (x^2-5x+7)^10
|
|
220
233
|
if (P.degree.isEqual(-1)) {
|
|
221
234
|
return (new PolynomExpProduct(new PolynomExpFactor(quotient, 1), new PolynomExpFactor(P.polynom.clone(), 1, {
|
|
222
235
|
name: 'ln', tex: '\\ln', fn: (x) => Math.log(x)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polynomexp.js","sourceRoot":"","sources":["../../../src/maths/expressions/polynomexp.ts"],"names":[],"mappings":";;;AAAA,wCAAuD;AACvD,kDAA8D;AAI9D,MAAa,gBAAgB;IACzB,YAAY,OAA2B,EAAE,MAA4B,EAAE,YAAyC;QAC5G,IAAI,CAAC,QAAQ,GAAG,IAAI,iBAAO,CAAC,OAAO,CAAC,CAAA;QACpC,IAAI,CAAC,OAAO,GAAG,IAAI,uBAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QAC9D,IAAI,CAAC,GAAG,GAAG,YAAY,CAAA;QACvB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAA;QAC3B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAA;IACjC,CAAC;
|
|
1
|
+
{"version":3,"file":"polynomexp.js","sourceRoot":"","sources":["../../../src/maths/expressions/polynomexp.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,23 +3,37 @@ import { Fraction } from "../coefficients";
|
|
|
3
3
|
import { Equation } from "../algebra";
|
|
4
4
|
import { Line } from "./line";
|
|
5
5
|
export declare class Circle {
|
|
6
|
+
constructor(...values: unknown[]);
|
|
6
7
|
private _center;
|
|
8
|
+
get center(): Point;
|
|
7
9
|
private _squareRadius;
|
|
10
|
+
get squareRadius(): Fraction;
|
|
8
11
|
private _cartesian;
|
|
12
|
+
get cartesian(): Equation;
|
|
9
13
|
private _exists;
|
|
10
|
-
constructor(...values: unknown[]);
|
|
11
|
-
get center(): Point;
|
|
12
14
|
get exists(): boolean;
|
|
13
|
-
get squareRadius(): Fraction;
|
|
14
15
|
get radius(): {
|
|
15
16
|
tex: string;
|
|
16
17
|
display: string;
|
|
18
|
+
value: number;
|
|
17
19
|
};
|
|
18
20
|
get tex(): string;
|
|
19
21
|
get developed(): string;
|
|
20
22
|
get display(): string;
|
|
21
|
-
|
|
23
|
+
/**
|
|
24
|
+
* Get the relative position between circle and line. It corresponds to the number of intersection.
|
|
25
|
+
* @param {Line} L
|
|
26
|
+
* @returns {number}
|
|
27
|
+
*/
|
|
28
|
+
relativePosition: (L: Line) => number;
|
|
29
|
+
lineIntersection: (L: Line) => Point[];
|
|
30
|
+
tangents: (P: Point | Fraction) => Line[];
|
|
31
|
+
isPointOnCircle: (P: Point) => Boolean;
|
|
32
|
+
getPointsOnCircle: (numberIsInteger?: boolean) => Point[];
|
|
22
33
|
clone(): Circle;
|
|
34
|
+
private _tangentsThroughOnePointOnTheCircle;
|
|
35
|
+
private _tangentsThroughOnePointOutsideTheCircle;
|
|
36
|
+
private _tangentsWithSlope;
|
|
23
37
|
private _reset;
|
|
24
38
|
private parse;
|
|
25
39
|
private _calculateCartesian;
|
|
@@ -28,6 +42,4 @@ export declare class Circle {
|
|
|
28
42
|
private _parseCenterAndPointThrough;
|
|
29
43
|
private _parseEquation;
|
|
30
44
|
private _parseThroughtThreePoints;
|
|
31
|
-
relativePosition: (L: Line) => number;
|
|
32
|
-
lineIntersection: (L: Line) => Point[];
|
|
33
45
|
}
|
|
@@ -4,14 +4,126 @@ exports.Circle = void 0;
|
|
|
4
4
|
const point_1 = require("./point");
|
|
5
5
|
const coefficients_1 = require("../coefficients");
|
|
6
6
|
const algebra_1 = require("../algebra");
|
|
7
|
+
const line_1 = require("./line");
|
|
7
8
|
const vector_1 = require("./vector");
|
|
8
9
|
const triangle_1 = require("./triangle");
|
|
10
|
+
const numeric_1 = require("../numeric");
|
|
9
11
|
class Circle {
|
|
10
|
-
_center;
|
|
11
|
-
_squareRadius;
|
|
12
|
-
_cartesian;
|
|
13
|
-
_exists;
|
|
14
12
|
constructor(...values) {
|
|
13
|
+
/**
|
|
14
|
+
* Get the relative position between circle and line. It corresponds to the number of intersection.
|
|
15
|
+
* @param {Line} L
|
|
16
|
+
* @returns {number}
|
|
17
|
+
*/
|
|
18
|
+
this.relativePosition = (L) => {
|
|
19
|
+
let distance = L.distanceTo(this.center), radius = Math.sqrt(this._squareRadius.value);
|
|
20
|
+
if (distance.value - radius > 0.0000000001) {
|
|
21
|
+
return 0; // external
|
|
22
|
+
}
|
|
23
|
+
else if (Math.abs(distance.value - radius) < 0.0000000001) {
|
|
24
|
+
return 1; // tangent
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
return 2; // external
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
this.lineIntersection = (L) => {
|
|
31
|
+
let intersectionPoints = [], solX;
|
|
32
|
+
if (this._cartesian === null) {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
const equX = this._cartesian.clone(), lineX = L.equation.clone().isolate('x'), lineY = L.equation.clone().isolate('y');
|
|
36
|
+
if (lineX instanceof algebra_1.Equation && lineY instanceof algebra_1.Equation) {
|
|
37
|
+
equX.replaceBy('y', lineY.right).simplify();
|
|
38
|
+
equX.solve();
|
|
39
|
+
for (let x of equX.solutions) {
|
|
40
|
+
if (x.exact === false && isNaN(x.value)) {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
solX = new coefficients_1.Fraction(x.exact === false ? x.value : x.exact);
|
|
44
|
+
intersectionPoints.push(new point_1.Point(solX.clone(), lineY.right.evaluate(solX)));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return intersectionPoints;
|
|
48
|
+
};
|
|
49
|
+
this.tangents = (P) => {
|
|
50
|
+
if (P instanceof coefficients_1.Fraction) {
|
|
51
|
+
return this._tangentsWithSlope(P);
|
|
52
|
+
}
|
|
53
|
+
else if (this.isPointOnCircle(P)) {
|
|
54
|
+
return this._tangentsThroughOnePointOnTheCircle(P);
|
|
55
|
+
}
|
|
56
|
+
else if (this.center.distanceTo(P).value > this.radius.value) {
|
|
57
|
+
//TODO: Must check it's outside the circle
|
|
58
|
+
return this._tangentsThroughOnePointOutsideTheCircle(P);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
console.log('No tangents as the point is inside !');
|
|
62
|
+
}
|
|
63
|
+
return [];
|
|
64
|
+
};
|
|
65
|
+
this.isPointOnCircle = (P) => {
|
|
66
|
+
return this._cartesian.test({ x: P.x, y: P.y });
|
|
67
|
+
};
|
|
68
|
+
this.getPointsOnCircle = (numberIsInteger) => {
|
|
69
|
+
if (numberIsInteger === undefined) {
|
|
70
|
+
numberIsInteger = false;
|
|
71
|
+
}
|
|
72
|
+
// It means searching for pythagorician triples that make a perfect square.
|
|
73
|
+
// (x-4)^2 + (y+3)^2 = 15
|
|
74
|
+
let triplets = numeric_1.Numeric.pythagoricianTripletsWithTarget(this._squareRadius.value, true);
|
|
75
|
+
let points = [], pt;
|
|
76
|
+
triplets.forEach(triplet => {
|
|
77
|
+
// Allow positive / negative values
|
|
78
|
+
// x-a = t => x = a + t
|
|
79
|
+
// x-a = -t => x = a - t
|
|
80
|
+
for (let k of [[1, 1], [-1, 1], [-1, -1], [1, -1]]) {
|
|
81
|
+
pt = new point_1.Point(this.center.x.clone().add(k[0] * triplet[0]), this.center.y.clone().add(k[1] * triplet[1]));
|
|
82
|
+
// Check if the point is not already in points.
|
|
83
|
+
if (!pt.isInListOfPoints(points)) {
|
|
84
|
+
points.push(pt);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
return points;
|
|
89
|
+
};
|
|
90
|
+
this._tangentsThroughOnePointOnTheCircle = (P) => {
|
|
91
|
+
let CT = new vector_1.Vector(this._center, P);
|
|
92
|
+
return [new line_1.Line(P, CT, line_1.LinePropriety.Perpendicular)];
|
|
93
|
+
};
|
|
94
|
+
this._tangentsThroughOnePointOutsideTheCircle = (P) => {
|
|
95
|
+
// y = mx + h
|
|
96
|
+
// px, py => h = -m px + py => mx - y -m.px + py = 0 =>
|
|
97
|
+
// Centre: cx, cy, radius: r
|
|
98
|
+
// (m.cx - cy -m.px + py)^2 = r^2 * (m^2 + 1)
|
|
99
|
+
// (m(cx-py) - (cy - py))^2 = r^2 * (m^2 + 1)
|
|
100
|
+
let cx_px = this.center.x.clone().subtract(P.x), cy_py = this.center.y.clone().subtract(P.y), polyLeft = new algebra_1.Polynom('x'), polyRight = new algebra_1.Polynom('x^2+1');
|
|
101
|
+
polyLeft.multiply(cx_px).subtract(cy_py).pow(2);
|
|
102
|
+
polyRight.multiply(this.squareRadius);
|
|
103
|
+
let equ = new algebra_1.Equation(polyLeft, polyRight);
|
|
104
|
+
equ.moveLeft().simplify().solve();
|
|
105
|
+
return equ.solutions.map(sol => {
|
|
106
|
+
// h = -m px + py
|
|
107
|
+
let h, equ = new algebra_1.Equation('y', 'x');
|
|
108
|
+
if (sol.exact instanceof coefficients_1.Fraction) {
|
|
109
|
+
h = P.x.clone().opposed().multiply(sol.exact).add(P.y);
|
|
110
|
+
equ.right.multiply(sol.exact).add(h);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
h = P.x.clone().opposed().multiply(sol.value).add(P.y);
|
|
114
|
+
equ.right.multiply(sol.value).add(h);
|
|
115
|
+
}
|
|
116
|
+
return new line_1.Line(equ);
|
|
117
|
+
});
|
|
118
|
+
};
|
|
119
|
+
this._tangentsWithSlope = (slope) => {
|
|
120
|
+
// d(C;t)=r => ac1+bc2 + x = +- sqrt(a^2 + b^2)*r
|
|
121
|
+
// x = -ac1-bc2 +- sqrt(a^2 + b^2)*r
|
|
122
|
+
// y = a/bx + h => ax-by + H = 0
|
|
123
|
+
const a = slope.numerator, b = -slope.denominator, c1 = this._center.x.clone(), c2 = this._center.y.clone(), r = this._squareRadius;
|
|
124
|
+
let sq = this._squareRadius.clone().multiply(slope.numerator ** 2 + slope.denominator ** 2), x1 = c1.clone().multiply(a).opposed().subtract(c2.clone().multiply(b)).add(sq.clone().sqrt()), x2 = c1.clone().multiply(a).opposed().subtract(c2.clone().multiply(b)).subtract(sq.clone().sqrt());
|
|
125
|
+
return [new line_1.Line(a, b, x1), new line_1.Line(a, b, x2)];
|
|
126
|
+
};
|
|
15
127
|
this._exists = false;
|
|
16
128
|
if (values !== undefined) {
|
|
17
129
|
this.parse(...values);
|
|
@@ -20,23 +132,28 @@ class Circle {
|
|
|
20
132
|
get center() {
|
|
21
133
|
return this._center;
|
|
22
134
|
}
|
|
23
|
-
get exists() {
|
|
24
|
-
return this._exists;
|
|
25
|
-
}
|
|
26
135
|
get squareRadius() {
|
|
27
136
|
return this._squareRadius;
|
|
28
137
|
}
|
|
138
|
+
get cartesian() {
|
|
139
|
+
return this._cartesian;
|
|
140
|
+
}
|
|
141
|
+
get exists() {
|
|
142
|
+
return this._exists;
|
|
143
|
+
}
|
|
29
144
|
get radius() {
|
|
30
145
|
if (this._squareRadius.isSquare()) {
|
|
31
146
|
return {
|
|
32
147
|
tex: this._squareRadius.clone().sqrt().tex,
|
|
33
148
|
display: this._squareRadius.clone().sqrt().display,
|
|
149
|
+
value: this._squareRadius.clone().sqrt().value
|
|
34
150
|
};
|
|
35
151
|
}
|
|
36
152
|
else {
|
|
37
153
|
return {
|
|
38
154
|
tex: `\\sqrt{${this._squareRadius.tex}}`,
|
|
39
|
-
display: `sqrt(${this._squareRadius.display})
|
|
155
|
+
display: `sqrt(${this._squareRadius.display})`,
|
|
156
|
+
value: this._squareRadius.clone().sqrt().value
|
|
40
157
|
};
|
|
41
158
|
}
|
|
42
159
|
return this._squareRadius;
|
|
@@ -65,12 +182,10 @@ class Circle {
|
|
|
65
182
|
get developed() {
|
|
66
183
|
return this._cartesian.tex;
|
|
67
184
|
}
|
|
185
|
+
// TODO: reformat code for better display.
|
|
68
186
|
get display() {
|
|
69
187
|
return this._cartesian.display;
|
|
70
188
|
}
|
|
71
|
-
get cartesian() {
|
|
72
|
-
return this._cartesian;
|
|
73
|
-
}
|
|
74
189
|
clone() {
|
|
75
190
|
this._center = this._center.clone();
|
|
76
191
|
this._squareRadius = this._squareRadius.clone();
|
|
@@ -85,6 +200,13 @@ class Circle {
|
|
|
85
200
|
return this;
|
|
86
201
|
}
|
|
87
202
|
parse(...values) {
|
|
203
|
+
// Data can be given in these formats:
|
|
204
|
+
// one value, a string -> make it an Equation
|
|
205
|
+
// one value, an Equation
|
|
206
|
+
// one value, a circle -> clone it
|
|
207
|
+
// two values: two points (center and pointThrough)
|
|
208
|
+
// two values: point and Fraction (center and radius)
|
|
209
|
+
// three values: Point, Fraction, Boolean (center, square radius, true)
|
|
88
210
|
this._reset();
|
|
89
211
|
if (typeof values[0] === 'string') {
|
|
90
212
|
this._parseEquation(new algebra_1.Equation(values[0]));
|
|
@@ -108,8 +230,10 @@ class Circle {
|
|
|
108
230
|
this._parseCenterAndRadius(values[0], values[1], (typeof values[2] === "boolean") ? values[2] : false);
|
|
109
231
|
}
|
|
110
232
|
}
|
|
233
|
+
// Calculate once the different values.
|
|
111
234
|
if (this._exists) {
|
|
112
235
|
this._calculateCartesian();
|
|
236
|
+
// If the square radius is zero or positive, the circle exists.
|
|
113
237
|
if (this._squareRadius !== undefined && this._squareRadius.isNegative()) {
|
|
114
238
|
this._exists = false;
|
|
115
239
|
}
|
|
@@ -145,9 +269,12 @@ class Circle {
|
|
|
145
269
|
}
|
|
146
270
|
_parseEquation(equ) {
|
|
147
271
|
this._exists = false;
|
|
272
|
+
// Move everything to the left.
|
|
148
273
|
equ.moveLeft();
|
|
149
274
|
if (equ.degree('x').value === 2 && equ.degree('y').value === 2) {
|
|
275
|
+
// Both must be of degree 2.
|
|
150
276
|
let x2 = equ.left.monomByDegree(2, 'x'), y2 = equ.left.monomByDegree(2, 'y'), x1, y1, c;
|
|
277
|
+
// Both square monoms must have the same coefficient.
|
|
151
278
|
if (x2.coefficient.isEqual(y2.coefficient)) {
|
|
152
279
|
equ.divide(x2.coefficient);
|
|
153
280
|
x1 = equ.left.monomByDegree(1, 'x');
|
|
@@ -161,6 +288,7 @@ class Circle {
|
|
|
161
288
|
this._exists = true;
|
|
162
289
|
}
|
|
163
290
|
else {
|
|
291
|
+
// The circle is not a valid circle
|
|
164
292
|
this._center = null;
|
|
165
293
|
this._squareRadius = null;
|
|
166
294
|
this._exists = false;
|
|
@@ -173,37 +301,6 @@ class Circle {
|
|
|
173
301
|
this.parse(mAB.intersection(mAC).point, A);
|
|
174
302
|
return this;
|
|
175
303
|
}
|
|
176
|
-
relativePosition = (L) => {
|
|
177
|
-
let distance = L.distanceTo(this.center), radius = Math.sqrt(this._squareRadius.value);
|
|
178
|
-
if (distance.value - radius > 0.0000000001) {
|
|
179
|
-
return 0;
|
|
180
|
-
}
|
|
181
|
-
else if (Math.abs(distance.value - radius) < 0.0000000001) {
|
|
182
|
-
return 1;
|
|
183
|
-
}
|
|
184
|
-
else {
|
|
185
|
-
return 2;
|
|
186
|
-
}
|
|
187
|
-
};
|
|
188
|
-
lineIntersection = (L) => {
|
|
189
|
-
let intersectionPoints = [], solX;
|
|
190
|
-
if (this._cartesian === null) {
|
|
191
|
-
return [];
|
|
192
|
-
}
|
|
193
|
-
const equX = this._cartesian.clone(), lineX = L.equation.clone().isolate('x'), lineY = L.equation.clone().isolate('y');
|
|
194
|
-
if (lineX instanceof algebra_1.Equation && lineY instanceof algebra_1.Equation) {
|
|
195
|
-
equX.replaceBy('y', lineY.right).simplify();
|
|
196
|
-
equX.solve();
|
|
197
|
-
for (let x of equX.solutions) {
|
|
198
|
-
if (x.exact === false && isNaN(x.value)) {
|
|
199
|
-
continue;
|
|
200
|
-
}
|
|
201
|
-
solX = new coefficients_1.Fraction(x.exact === false ? x.value : x.exact);
|
|
202
|
-
intersectionPoints.push(new point_1.Point(solX.clone(), lineY.right.evaluate(solX)));
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
return intersectionPoints;
|
|
206
|
-
};
|
|
207
304
|
}
|
|
208
305
|
exports.Circle = Circle;
|
|
209
306
|
//# sourceMappingURL=circle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circle.js","sourceRoot":"","sources":["../../../src/maths/geometry/circle.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"circle.js","sourceRoot":"","sources":["../../../src/maths/geometry/circle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This class works for 2d line in a plane.
|
|
3
|
+
*/
|
|
1
4
|
import { Fraction } from "../coefficients";
|
|
2
5
|
import { Vector } from "./vector";
|
|
3
6
|
import { Point } from "./point";
|
|
4
7
|
import { Equation } from "../algebra";
|
|
5
|
-
declare enum LinePropriety {
|
|
8
|
+
export declare enum LinePropriety {
|
|
6
9
|
None = 0,
|
|
7
10
|
Parallel = "parallel",
|
|
8
11
|
Perpendicular = "perpendicular",
|
|
@@ -43,6 +46,11 @@ export declare class Line {
|
|
|
43
46
|
set d(value: Vector);
|
|
44
47
|
get slope(): Fraction;
|
|
45
48
|
get height(): Fraction;
|
|
49
|
+
/**
|
|
50
|
+
* Parse data to a line
|
|
51
|
+
* @param {any} values
|
|
52
|
+
* @returns {Line}
|
|
53
|
+
*/
|
|
46
54
|
parse: (...values: unknown[]) => Line;
|
|
47
55
|
parseEquation: (equ: Equation) => Line;
|
|
48
56
|
parseByCoefficient: (a: Fraction | number, b: Fraction | number, c: Fraction | number) => Line;
|
|
@@ -71,4 +79,3 @@ export declare class Line {
|
|
|
71
79
|
getValueAtY: (value: Fraction | number) => Fraction;
|
|
72
80
|
canonicalAsFloatCoefficient(decimals: number): string;
|
|
73
81
|
}
|
|
74
|
-
export {};
|