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.
Files changed (111) hide show
  1. package/dist/pi.js +6530 -1
  2. package/dist/pi.js.map +1 -1
  3. package/dist/pi.min.js +2 -0
  4. package/dist/pi.min.js.map +1 -0
  5. package/docs/assets/search.js +1 -1
  6. package/docs/classes/algebra.Equation.html +9 -9
  7. package/docs/classes/algebra.LinearSystem.html +1 -1
  8. package/docs/classes/algebra.Logicalset.html +2 -2
  9. package/docs/classes/algebra.Monom.html +37 -37
  10. package/docs/classes/algebra.Polynom.html +10 -10
  11. package/docs/classes/algebra.PolynomExpFactor.html +1 -1
  12. package/docs/classes/algebra.PolynomExpProduct.html +1 -1
  13. package/docs/classes/algebra.Rational.html +2 -2
  14. package/docs/classes/coefficients.Fraction.html +4 -4
  15. package/docs/classes/coefficients.Nthroot.html +1 -1
  16. package/docs/classes/geometry.Circle.html +2 -2
  17. package/docs/classes/geometry.Line.html +2 -2
  18. package/docs/classes/geometry.Point.html +1 -1
  19. package/docs/classes/geometry.Triangle.html +5 -5
  20. package/docs/classes/geometry.Vector.html +1 -1
  21. package/docs/classes/numeric.Numeric.html +5 -5
  22. package/docs/classes/shutingyard.Shutingyard.html +4 -4
  23. package/docs/enums/geometry.LinePropriety.html +1 -0
  24. package/docs/enums/shutingyard.ShutingyardMode.html +1 -1
  25. package/docs/enums/shutingyard.ShutingyardType.html +1 -1
  26. package/docs/interfaces/geometry.remarquableLines.html +1 -1
  27. package/docs/modules/algebra.html +1 -1
  28. package/docs/modules/coefficients.html +1 -1
  29. package/docs/modules/geometry.html +1 -1
  30. package/docs/modules/random.Random.html +1 -1
  31. package/docs/modules/random.html +1 -1
  32. package/docs/modules/shutingyard.html +1 -1
  33. package/esm/main.js +2 -0
  34. package/esm/main.js.map +1 -1
  35. package/esm/maths/algebra/equation.d.ts +62 -17
  36. package/esm/maths/algebra/equation.js +597 -502
  37. package/esm/maths/algebra/equation.js.map +1 -1
  38. package/esm/maths/algebra/linearSystem.js +154 -101
  39. package/esm/maths/algebra/linearSystem.js.map +1 -1
  40. package/esm/maths/algebra/logicalset.d.ts +11 -0
  41. package/esm/maths/algebra/logicalset.js +18 -6
  42. package/esm/maths/algebra/logicalset.js.map +1 -1
  43. package/esm/maths/algebra/monom.d.ts +144 -0
  44. package/esm/maths/algebra/monom.js +624 -396
  45. package/esm/maths/algebra/monom.js.map +1 -1
  46. package/esm/maths/algebra/polynom.d.ts +49 -0
  47. package/esm/maths/algebra/polynom.js +995 -712
  48. package/esm/maths/algebra/polynom.js.map +1 -1
  49. package/esm/maths/algebra/rational.d.ts +12 -0
  50. package/esm/maths/algebra/rational.js +97 -82
  51. package/esm/maths/algebra/rational.js.map +1 -1
  52. package/esm/maths/coefficients/fraction.d.ts +18 -0
  53. package/esm/maths/coefficients/fraction.js +390 -332
  54. package/esm/maths/coefficients/fraction.js.map +1 -1
  55. package/esm/maths/coefficients/nthroot.d.ts +3 -0
  56. package/esm/maths/coefficients/nthroot.js +48 -33
  57. package/esm/maths/coefficients/nthroot.js.map +1 -1
  58. package/esm/maths/expressions/numexp.js +11 -3
  59. package/esm/maths/expressions/numexp.js.map +1 -1
  60. package/esm/maths/expressions/polynomexp.bkp.js +93 -93
  61. package/esm/maths/expressions/polynomexp.bkp.js.map +1 -1
  62. package/esm/maths/expressions/polynomexp.js +22 -9
  63. package/esm/maths/expressions/polynomexp.js.map +1 -1
  64. package/esm/maths/geometry/circle.d.ts +18 -6
  65. package/esm/maths/geometry/circle.js +139 -42
  66. package/esm/maths/geometry/circle.js.map +1 -1
  67. package/esm/maths/geometry/line.d.ts +9 -2
  68. package/esm/maths/geometry/line.js +245 -188
  69. package/esm/maths/geometry/line.js.map +1 -1
  70. package/esm/maths/geometry/point.d.ts +12 -0
  71. package/esm/maths/geometry/point.js +121 -73
  72. package/esm/maths/geometry/point.js.map +1 -1
  73. package/esm/maths/geometry/triangle.d.ts +22 -0
  74. package/esm/maths/geometry/triangle.js +197 -158
  75. package/esm/maths/geometry/triangle.js.map +1 -1
  76. package/esm/maths/geometry/vector.d.ts +4 -0
  77. package/esm/maths/geometry/vector.js +139 -115
  78. package/esm/maths/geometry/vector.js.map +1 -1
  79. package/esm/maths/numeric.d.ts +17 -0
  80. package/esm/maths/numeric.js +40 -0
  81. package/esm/maths/numeric.js.map +1 -1
  82. package/esm/maths/random/randomCore.js +15 -15
  83. package/esm/maths/random/randomCore.js.map +1 -1
  84. package/esm/maths/random/rndFraction.d.ts +3 -0
  85. package/esm/maths/random/rndFraction.js +19 -16
  86. package/esm/maths/random/rndFraction.js.map +1 -1
  87. package/esm/maths/random/rndHelpers.d.ts +17 -0
  88. package/esm/maths/random/rndHelpers.js +20 -0
  89. package/esm/maths/random/rndHelpers.js.map +1 -1
  90. package/esm/maths/random/rndMonom.d.ts +3 -0
  91. package/esm/maths/random/rndMonom.js +33 -26
  92. package/esm/maths/random/rndMonom.js.map +1 -1
  93. package/esm/maths/random/rndPolynom.d.ts +3 -0
  94. package/esm/maths/random/rndPolynom.js +49 -37
  95. package/esm/maths/random/rndPolynom.js.map +1 -1
  96. package/esm/maths/shutingyard.d.ts +21 -0
  97. package/esm/maths/shutingyard.js +86 -9
  98. package/esm/maths/shutingyard.js.map +1 -1
  99. package/package.json +2 -2
  100. package/public/index.html +47 -0
  101. package/src/maths/algebra/equation.ts +142 -128
  102. package/src/maths/geometry/circle.ts +168 -75
  103. package/src/maths/geometry/line.ts +1 -1
  104. package/src/maths/geometry/point.ts +25 -2
  105. package/src/maths/numeric.ts +15 -0
  106. package/tests/geometry/circle.test.ts +33 -0
  107. package/tsconfig.json +2 -2
  108. package/webpack-production-min.config.js +26 -0
  109. package/webpack-production.config.js +1 -1
  110. package/dev/pi.js +0 -5392
  111. package/dev/pi.js.map +0 -1
@@ -1,16 +1,109 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Point = void 0;
4
+ /**
5
+ * Vector module contains everything necessary to handle 2d or 3d vectors.
6
+ * @module Vector
7
+ */
4
8
  const coefficients_1 = require("../coefficients");
9
+ const line_1 = require("./line");
10
+ const vector_1 = require("./vector");
11
+ /**
12
+ * Helper class - a way to identify an object {x: number, y: number}
13
+ */
5
14
  class PointXY {
6
- x;
7
- y;
8
15
  }
9
16
  class Point {
10
- _x;
11
- _y;
12
- _exist;
13
17
  constructor(...values) {
18
+ // ------------------------------------------
19
+ // Creation / parsing functions
20
+ // ------------------------------------------
21
+ this.parse = (...values) => {
22
+ // Initialize the value.
23
+ this.zero();
24
+ // Nothing is given
25
+ if (values.length === 0) {
26
+ return this;
27
+ }
28
+ // One element is given - might be already a point !
29
+ if (values.length === 1) {
30
+ // it's already a point - clone it
31
+ if (values[0] instanceof Point) {
32
+ this._x = values[0].x.clone();
33
+ this._y = values[0].y.clone();
34
+ return this;
35
+ }
36
+ // Value is given as string, comma separated.
37
+ if (typeof values[0] === 'string') {
38
+ let xy = values[0].split(',');
39
+ if (xy.length === 2) {
40
+ this._x = new coefficients_1.Fraction(xy[0]).reduce();
41
+ this._y = new coefficients_1.Fraction(xy[1]).reduce();
42
+ return this;
43
+ }
44
+ }
45
+ // Value given as an object with {x: value, y: value}
46
+ if (values[0] instanceof PointXY) {
47
+ this._x = new coefficients_1.Fraction(values[0].x).reduce();
48
+ this._y = new coefficients_1.Fraction(values[0].y).reduce();
49
+ return this;
50
+ }
51
+ else {
52
+ return this.zero();
53
+ }
54
+ }
55
+ if (values.length === 2) {
56
+ this._x = new coefficients_1.Fraction(values[0]).reduce();
57
+ this._y = new coefficients_1.Fraction(values[1]).reduce();
58
+ return this;
59
+ }
60
+ return this;
61
+ };
62
+ this.clone = () => {
63
+ this._x = this._x.clone();
64
+ this._y = this._y.clone();
65
+ return this;
66
+ };
67
+ this.zero = () => {
68
+ this._x = new coefficients_1.Fraction(null);
69
+ this._y = new coefficients_1.Fraction(null);
70
+ return this;
71
+ };
72
+ this.origin = () => {
73
+ this.zero();
74
+ return this;
75
+ };
76
+ this.middleOf = (P1, P2) => {
77
+ this._x = P1.x.clone().add(P2.x).divide(2);
78
+ this._y = P1.y.clone().add(P2.y).divide(2);
79
+ return this;
80
+ };
81
+ // ------------------------------------------
82
+ // Display functions
83
+ // ------------------------------------------
84
+ this.texValues = (numberOfDigits) => {
85
+ let pts = [];
86
+ pts.push(this._x.value.toFixed(numberOfDigits === undefined ? 2 : numberOfDigits));
87
+ pts.push(this._y.value.toFixed(numberOfDigits === undefined ? 2 : numberOfDigits));
88
+ return `\\left(${pts.join(';')}\\right)`;
89
+ };
90
+ this.distanceTo = (item) => {
91
+ let value = 0, fraction = new coefficients_1.Fraction(), tex = '';
92
+ if (item instanceof line_1.Line) {
93
+ return item.distanceTo(this);
94
+ }
95
+ else if (item instanceof Point) {
96
+ let V = new vector_1.Vector(this, item);
97
+ value = V.norm;
98
+ fraction = V.normSquare.sqrt();
99
+ tex = V.normSquare.isSquare() ? fraction.tex : `\\sqrt{\\dfrac{ ${V.normSquare.numerator} }{ ${V.normSquare.denominator} }}`;
100
+ }
101
+ return { value, fraction, tex };
102
+ };
103
+ this.isInListOfPoints = (list) => {
104
+ const keyList = list.map(x => x.key);
105
+ return keyList.includes(this.key);
106
+ };
14
107
  this._x = new coefficients_1.Fraction().zero();
15
108
  this._y = new coefficients_1.Fraction().zero();
16
109
  if (values !== undefined) {
@@ -19,6 +112,9 @@ class Point {
19
112
  return this;
20
113
  }
21
114
  ;
115
+ // ------------------------------------------
116
+ // Getter and setter
117
+ // ------------------------------------------
22
118
  get x() {
23
119
  return this._x;
24
120
  }
@@ -43,74 +139,26 @@ class Point {
43
139
  pts.push(this._y.tex);
44
140
  return `(${pts.join(';')})`;
45
141
  }
46
- parse = (...values) => {
47
- this.zero();
48
- if (values.length === 0) {
49
- return this;
50
- }
51
- if (values.length === 1) {
52
- if (values[0] instanceof Point) {
53
- this._x = values[0].x.clone();
54
- this._y = values[0].y.clone();
55
- return this;
56
- }
57
- if (typeof values[0] === 'string') {
58
- let xy = values[0].split(',');
59
- if (xy.length === 2) {
60
- this._x = new coefficients_1.Fraction(xy[0]).reduce();
61
- this._y = new coefficients_1.Fraction(xy[1]).reduce();
62
- return this;
63
- }
64
- }
65
- if (values[0] instanceof PointXY) {
66
- this._x = new coefficients_1.Fraction(values[0].x).reduce();
67
- this._y = new coefficients_1.Fraction(values[0].y).reduce();
68
- return this;
69
- }
70
- else {
71
- return this.zero();
72
- }
73
- }
74
- if (values.length === 2) {
75
- this._x = new coefficients_1.Fraction(values[0]).reduce();
76
- this._y = new coefficients_1.Fraction(values[1]).reduce();
77
- return this;
78
- }
79
- return this;
80
- };
81
- clone = () => {
82
- this._x = this._x.clone();
83
- this._y = this._y.clone();
84
- return this;
85
- };
86
- zero = () => {
87
- this._x = new coefficients_1.Fraction(null);
88
- this._y = new coefficients_1.Fraction(null);
89
- return this;
90
- };
91
- origin = () => {
92
- this.zero();
93
- return this;
94
- };
95
- middleOf = (P1, P2) => {
96
- this._x = P1.x.clone().add(P2.x).divide(2);
97
- this._y = P1.y.clone().add(P2.y).divide(2);
98
- return this;
99
- };
100
- texValues = (numberOfDigits) => {
101
- let pts = [];
102
- pts.push(this._x.value.toFixed(numberOfDigits === undefined ? 2 : numberOfDigits));
103
- pts.push(this._y.value.toFixed(numberOfDigits === undefined ? 2 : numberOfDigits));
104
- return `\\left(${pts.join(';')}\\right)`;
105
- };
106
- static pmatrix = (a, b, c) => {
107
- if (c === undefined) {
108
- return `\\begin{pmatrix} ${a.tex ? a.tex : a} \\\\ ${b.tex ? b.tex : b} \\end{pmatrix}`;
109
- }
110
- else {
111
- return `\\begin{pmatrix} ${a.tex ? a.tex : a} \\\\ ${b.tex ? b.tex : b} \\\\ ${c.tex ? c.tex : c} \\end{pmatrix}`;
112
- }
113
- };
142
+ get key() {
143
+ return `${this.x.display};${this.y.display}`;
144
+ }
114
145
  }
115
146
  exports.Point = Point;
147
+ // ------------------------------------------
148
+ // Mathematical operations
149
+ // ------------------------------------------
150
+ // ------------------------------------------
151
+ // Vector functions
152
+ // ------------------------------------------
153
+ // ------------------------------------------
154
+ // Static functions
155
+ // ------------------------------------------
156
+ Point.pmatrix = (a, b, c) => {
157
+ if (c === undefined) {
158
+ return `\\begin{pmatrix} ${a.tex ? a.tex : a} \\\\ ${b.tex ? b.tex : b} \\end{pmatrix}`;
159
+ }
160
+ else {
161
+ return `\\begin{pmatrix} ${a.tex ? a.tex : a} \\\\ ${b.tex ? b.tex : b} \\\\ ${c.tex ? c.tex : c} \\end{pmatrix}`;
162
+ }
163
+ };
116
164
  //# sourceMappingURL=point.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"point.js","sourceRoot":"","sources":["../../../src/maths/geometry/point.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"point.js","sourceRoot":"","sources":["../../../src/maths/geometry/point.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,kDAAwC;AACxC,iCAA4B;AAC5B,qCAAgC;AAEhC;;GAEG;AACH,MAAM,OAAO;CAGZ;AAED,MAAa,KAAK;IAKd,YAAY,GAAG,MAAiB;QAgDhC,6CAA6C;QAC7C,+BAA+B;QAC/B,6CAA6C;QAC7C,UAAK,GAAG,CAAC,GAAG,MAAiB,EAAS,EAAE;YACpC,wBAAwB;YACxB,IAAI,CAAC,IAAI,EAAE,CAAC;YAEZ,mBAAmB;YACnB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrB,OAAO,IAAI,CAAC;aACf;YAED,oDAAoD;YACpD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrB,kCAAkC;gBAClC,IAAI,MAAM,CAAC,CAAC,CAAC,YAAY,KAAK,EAAE;oBAC5B,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAA;oBAC7B,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAA;oBAC7B,OAAO,IAAI,CAAA;iBACd;gBAED,6CAA6C;gBAC7C,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;oBAC/B,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;oBAC7B,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;wBACjB,IAAI,CAAC,EAAE,GAAG,IAAI,uBAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAA;wBACtC,IAAI,CAAC,EAAE,GAAG,IAAI,uBAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAA;wBACtC,OAAO,IAAI,CAAA;qBACd;iBACJ;gBAED,qDAAqD;gBACrD,IAAG,MAAM,CAAC,CAAC,CAAC,YAAY,OAAO,EAAC;oBACxB,IAAI,CAAC,EAAE,GAAG,IAAI,uBAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAA;oBAC5C,IAAI,CAAC,EAAE,GAAG,IAAI,uBAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAA;oBAChD,OAAO,IAAI,CAAA;iBACd;qBAAM;oBACH,OAAO,IAAI,CAAC,IAAI,EAAE,CAAA;iBACrB;aACJ;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrB,IAAI,CAAC,EAAE,GAAG,IAAI,uBAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAA;gBAC1C,IAAI,CAAC,EAAE,GAAG,IAAI,uBAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAA;gBAC1C,OAAO,IAAI,CAAA;aACd;YAED,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC;QAEF,UAAK,GAAG,GAAU,EAAE;YAChB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;YACzB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;YAEzB,OAAO,IAAI,CAAA;QACf,CAAC,CAAA;QAED,SAAI,GAAG,GAAU,EAAE;YACf,IAAI,CAAC,EAAE,GAAG,IAAI,uBAAQ,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,CAAC,EAAE,GAAG,IAAI,uBAAQ,CAAC,IAAI,CAAC,CAAC;YAC7B,OAAO,IAAI,CAAC;QAChB,CAAC,CAAA;QAED,WAAM,GAAG,GAAU,EAAE;YACjB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QAChB,CAAC,CAAA;QAED,aAAQ,GAAG,CAAC,EAAS,EAAE,EAAS,EAAS,EAAE;YACvC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAE3C,OAAO,IAAI,CAAC;QAChB,CAAC,CAAA;QACD,6CAA6C;QAC7C,oBAAoB;QACpB,6CAA6C;QAC7C,cAAS,GAAG,CAAC,cAAsB,EAAU,EAAE;YAC3C,IAAI,GAAG,GAAG,EAAE,CAAC;YAEb,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;YACnF,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;YAEnF,OAAO,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAA;QAC5C,CAAC,CAAA;QAoBD,eAAU,GAAG,CAAC,IAAe,EAAsD,EAAE;YACjF,IAAI,KAAK,GAAG,CAAC,EAAE,QAAQ,GAAG,IAAI,uBAAQ,EAAE,EAAE,GAAG,GAAG,EAAE,CAAA;YAElD,IAAG,IAAI,YAAY,WAAI,EAAC;gBACpB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;aAC/B;iBAAK,IAAG,IAAI,YAAY,KAAK,EAAC;gBAC3B,IAAI,CAAC,GAAG,IAAI,eAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;gBAE9B,KAAK,GAAG,CAAC,CAAC,IAAI,CAAA;gBACd,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,CAAA;gBAC9B,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAA,CAAC,CAAA,QAAQ,CAAC,GAAG,CAAA,CAAC,CAAA,mBAAmB,CAAC,CAAC,UAAU,CAAC,SAAS,OAAO,CAAC,CAAC,UAAU,CAAC,WAAW,KAAK,CAAA;aAC3H;YACD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAA;QACnC,CAAC,CAAA;QAKD,qBAAgB,GAAG,CAAC,IAAa,EAAW,EAAE;YAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,CAAC,GAAG,CAAC,CAAA;YAElC,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACrC,CAAC,CAAA;QA7KG,IAAI,CAAC,EAAE,GAAG,IAAI,uBAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,EAAE,GAAG,IAAI,uBAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QAEhC,IAAI,MAAM,KAAK,SAAS,EAAE;YACtB,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC;SACzB;QAED,OAAO,IAAI,CAAA;IACf,CAAC;IAAA,CAAC;IAEF,6CAA6C;IAC7C,oBAAoB;IACpB,6CAA6C;IAC7C,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,EAAE,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,CAAC,KAAe;QACjB,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;IACpB,CAAC;IAED,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,EAAE,CAAC;IACnB,CAAC;IAED,IAAI,CAAC,CAAC,KAAe;QACjB,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;IACpB,CAAC;IAED,IAAI,GAAG;QACH,IAAI,GAAG,GAAG,EAAE,CAAC;QAEb,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACtB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAEtB,OAAO,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAA;IAC5C,CAAC;IAED,IAAI,OAAO;QACP,IAAI,GAAG,GAAG,EAAE,CAAC;QAEb,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACtB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAEtB,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA;IAC/B,CAAC;IAyHD,IAAI,GAAG;QACL,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;IAClD,CAAC;;AA9KD,sBAoLC;AA1CG,6CAA6C;AAC7C,0BAA0B;AAC1B,6CAA6C;AAE7C,6CAA6C;AAC7C,mBAAmB;AACnB,6CAA6C;AAE7C,6CAA6C;AAC7C,mBAAmB;AACnB,6CAA6C;AACtC,aAAO,GAAG,CAAC,CAAM,EAAE,CAAM,EAAE,CAAO,EAAU,EAAE;IACjD,IAAI,CAAC,KAAK,SAAS,EAAE;QACjB,OAAO,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC;KAC3F;SAAM;QACH,OAAO,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC;KACrH;AACL,CAAC,CAAC"}
@@ -53,10 +53,32 @@ export declare class Triangle {
53
53
  'AC': Line;
54
54
  };
55
55
  get remarquables(): remarquableLines;
56
+ /**
57
+ * Parse values to a triangle. Supported formats:
58
+ * Point, Point, Point
59
+ * x1, y1, x2, y2, x3, y3
60
+ * TODO: Something else ?
61
+ * @param values
62
+ */
56
63
  parse: (...values: any) => Triangle;
64
+ /**
65
+ * Clone the Triangle class
66
+ */
57
67
  clone: () => Triangle;
68
+ /**
69
+ * Generate the Line object for the three segments of the triangle
70
+ */
58
71
  private _updateTriangle;
72
+ /**
73
+ * Get the Point class for the given name
74
+ * @param ptName
75
+ */
59
76
  private getPointByName;
77
+ /**
78
+ * Get the vector for the segment given by name.
79
+ * @param ptName1
80
+ * @param ptName2
81
+ */
60
82
  private getSegment;
61
83
  private _calculateRemarquableLines;
62
84
  private _calculateBisectors;
@@ -7,18 +7,209 @@ const vector_1 = require("./vector");
7
7
  const line_1 = require("./line");
8
8
  const equation_1 = require("../algebra/equation");
9
9
  class Triangle {
10
- _A;
11
- _B;
12
- _C;
13
- _lines;
14
- _middles;
15
- _remarquables;
16
10
  constructor(...values) {
11
+ // ------------------------------------------
12
+ // Creation / parsing functions
13
+ // ------------------------------------------
14
+ /**
15
+ * Parse values to a triangle. Supported formats:
16
+ * Point, Point, Point
17
+ * x1, y1, x2, y2, x3, y3
18
+ * TODO: Something else ?
19
+ * @param values
20
+ */
21
+ this.parse = (...values) => {
22
+ if (values.length === 6) {
23
+ // Check if all values are number or fractions.
24
+ let v = values.map((x) => new fraction_1.Fraction(x));
25
+ return this.parse(new point_1.Point(v[0], v[1]), new point_1.Point(v[2], v[3]), new point_1.Point(v[4], v[5]));
26
+ }
27
+ else if (values.length === 3) {
28
+ // Possibilities:
29
+ // - Three points (or part of points, only dict for example, or array (TODO: Add the array syntax for point)
30
+ // - Three lines
31
+ // - Three lines as text.
32
+ if (values.filter((x) => typeof x === 'string').length === 3) {
33
+ return this.parse(...values.map((x) => new line_1.Line(x)));
34
+ }
35
+ else if (values.filter((x) => x instanceof line_1.Line).length === 3) {
36
+ // We have three lines
37
+ this._lines = {
38
+ 'AB': values[0],
39
+ 'BC': values[1],
40
+ 'AC': values[2]
41
+ };
42
+ // Get the intersection points -> build the triangle using these intersection points.
43
+ let intersect = values[0].intersection(values[1]);
44
+ if (intersect.hasIntersection) {
45
+ this._B = intersect.point.clone();
46
+ }
47
+ else {
48
+ return this;
49
+ }
50
+ intersect = values[1].intersection(values[2]);
51
+ if (intersect.hasIntersection) {
52
+ this._C = intersect.point.clone();
53
+ }
54
+ else {
55
+ return this;
56
+ }
57
+ intersect = values[2].intersection(values[0]);
58
+ if (intersect.hasIntersection) {
59
+ this._A = intersect.point.clone();
60
+ }
61
+ else {
62
+ return this;
63
+ }
64
+ }
65
+ else {
66
+ // At least, one of the value is not a point.
67
+ if (values.filter((x) => (x instanceof point_1.Point)).length < 3) {
68
+ return this.parse(new point_1.Point(values[0]), new point_1.Point(values[1]), new point_1.Point(values[2]));
69
+ }
70
+ // We have three points.
71
+ this._A = values[0].clone();
72
+ this._B = values[1].clone();
73
+ this._C = values[2].clone();
74
+ this._lines = {
75
+ 'AB': new line_1.Line(this._A, this._B),
76
+ 'BC': new line_1.Line(this._B, this._C),
77
+ 'AC': new line_1.Line(this._A, this._C)
78
+ };
79
+ }
80
+ }
81
+ else if (values.length === 1) {
82
+ if (values[0] instanceof Triangle) {
83
+ return values[0].clone();
84
+ }
85
+ }
86
+ this._updateTriangle();
87
+ return this;
88
+ };
89
+ /**
90
+ * Clone the Triangle class
91
+ */
92
+ this.clone = () => {
93
+ this._A = this._A.clone();
94
+ this._B = this._B.clone();
95
+ this._C = this._C.clone();
96
+ this._lines = {
97
+ 'AB': this._lines.AB.clone(),
98
+ 'BC': this._lines.BC.clone(),
99
+ 'AC': this._lines.AC.clone()
100
+ };
101
+ this._updateTriangle();
102
+ return this;
103
+ };
104
+ // ------------------------------------------
105
+ // Triangle operations and properties
106
+ // ------------------------------------------
107
+ /**
108
+ * Generate the Line object for the three segments of the triangle
109
+ */
110
+ this._updateTriangle = () => {
111
+ this._middles = {
112
+ 'AB': new point_1.Point().middleOf(this._A, this._B),
113
+ 'AC': new point_1.Point().middleOf(this._A, this._C),
114
+ 'BC': new point_1.Point().middleOf(this._B, this._C)
115
+ };
116
+ this._remarquables = this._calculateRemarquableLines();
117
+ };
118
+ /**
119
+ * Get the Point class for the given name
120
+ * @param ptName
121
+ */
122
+ this.getPointByName = (ptName) => {
123
+ switch (ptName.toUpperCase()) {
124
+ case 'A':
125
+ return this._A;
126
+ case 'B':
127
+ return this._B;
128
+ case 'C':
129
+ return this._C;
130
+ }
131
+ // Something went wrong ! Return the first point
132
+ return this._A;
133
+ };
134
+ /**
135
+ * Get the vector for the segment given by name.
136
+ * @param ptName1
137
+ * @param ptName2
138
+ */
139
+ this.getSegment = (ptName1, ptName2) => {
140
+ return new vector_1.Vector(this.getPointByName(ptName1), this.getPointByName(ptName2));
141
+ };
142
+ this._calculateRemarquableLines = () => {
143
+ let remarquables = {
144
+ 'medians': {
145
+ 'A': new line_1.Line(this._A, this._middles.BC),
146
+ 'B': new line_1.Line(this._B, this._middles.AC),
147
+ 'C': new line_1.Line(this._C, this._middles.AB),
148
+ 'intersection': null
149
+ },
150
+ 'mediators': {
151
+ 'AB': new line_1.Line(this._middles.AB, new vector_1.Vector(this._A, this._B).normal()),
152
+ 'AC': new line_1.Line(this._middles.AC, new vector_1.Vector(this._A, this._C).normal()),
153
+ 'BC': new line_1.Line(this._middles.BC, new vector_1.Vector(this._B, this._C).normal()),
154
+ 'intersection': null
155
+ },
156
+ 'heights': {
157
+ 'A': new line_1.Line(this._A, new vector_1.Vector(this._B, this._C).normal()),
158
+ 'B': new line_1.Line(this._B, new vector_1.Vector(this._A, this._C).normal()),
159
+ 'C': new line_1.Line(this._C, new vector_1.Vector(this._A, this._B).normal()),
160
+ 'intersection': null
161
+ },
162
+ 'bisectors': {
163
+ 'A': this._calculateBisectors('A'),
164
+ 'B': this._calculateBisectors('B'),
165
+ 'C': this._calculateBisectors('C'),
166
+ 'intersection': null
167
+ }
168
+ };
169
+ // As it's a triangle, we assume the lines are intersecting and aren't parallel or superposed.
170
+ remarquables.medians.intersection = remarquables.medians.A.intersection(remarquables.medians.B).point;
171
+ remarquables.mediators.intersection = remarquables.mediators.AB.intersection(remarquables.mediators.BC).point;
172
+ remarquables.heights.intersection = remarquables.heights.A.intersection(remarquables.heights.B).point;
173
+ remarquables.bisectors.intersection = remarquables.bisectors.A.intersection(remarquables.bisectors.B).point;
174
+ // Everything was calculated for the remarquable lines.
175
+ return remarquables;
176
+ };
177
+ this._calculateBisectors = (pt) => {
178
+ let tlines = this.lines, d1, d2;
179
+ if (pt === 'A') {
180
+ d1 = tlines.AB;
181
+ d2 = tlines.AC;
182
+ }
183
+ else if (pt === 'B') {
184
+ d1 = tlines.AB;
185
+ d2 = tlines.BC;
186
+ }
187
+ else if (pt === 'C') {
188
+ d1 = tlines.BC;
189
+ d2 = tlines.AC;
190
+ }
191
+ let b1 = new line_1.Line(new equation_1.Equation(d1.equation.left.clone().multiply(d2.n.simplify().norm), d2.equation.left.clone().multiply(d1.n.simplify().norm)).reorder(true).simplify()), b2 = new line_1.Line(new equation_1.Equation(d1.equation.left.clone().multiply(d2.n.simplify().norm), d2.equation.left.clone().multiply(d1.n.simplify().norm).opposed()).reorder(true).simplify());
192
+ // Must determine which bisectors is in the triangle
193
+ if (pt === 'A') {
194
+ return b1.hitSegment(this.B, this.C) ? b1 : b2;
195
+ }
196
+ if (pt === 'B') {
197
+ return b1.hitSegment(this.A, this.C) ? b1 : b2;
198
+ }
199
+ if (pt === 'C') {
200
+ return b1.hitSegment(this.B, this.A) ? b1 : b2;
201
+ }
202
+ // Default returns the first bisector
203
+ return b1;
204
+ };
17
205
  if (values.length > 0) {
18
206
  this.parse(...values);
19
207
  }
20
208
  return this;
21
209
  }
210
+ // ------------------------------------------
211
+ // Getter and setters
212
+ // ------------------------------------------
22
213
  get A() {
23
214
  return this._A;
24
215
  }
@@ -73,158 +264,6 @@ class Triangle {
73
264
  get remarquables() {
74
265
  return this._remarquables;
75
266
  }
76
- parse = (...values) => {
77
- if (values.length === 6) {
78
- let v = values.map((x) => new fraction_1.Fraction(x));
79
- return this.parse(new point_1.Point(v[0], v[1]), new point_1.Point(v[2], v[3]), new point_1.Point(v[4], v[5]));
80
- }
81
- else if (values.length === 3) {
82
- if (values.filter((x) => typeof x === 'string').length === 3) {
83
- return this.parse(...values.map((x) => new line_1.Line(x)));
84
- }
85
- else if (values.filter((x) => x instanceof line_1.Line).length === 3) {
86
- this._lines = {
87
- 'AB': values[0],
88
- 'BC': values[1],
89
- 'AC': values[2]
90
- };
91
- let intersect = values[0].intersection(values[1]);
92
- if (intersect.hasIntersection) {
93
- this._B = intersect.point.clone();
94
- }
95
- else {
96
- return this;
97
- }
98
- intersect = values[1].intersection(values[2]);
99
- if (intersect.hasIntersection) {
100
- this._C = intersect.point.clone();
101
- }
102
- else {
103
- return this;
104
- }
105
- intersect = values[2].intersection(values[0]);
106
- if (intersect.hasIntersection) {
107
- this._A = intersect.point.clone();
108
- }
109
- else {
110
- return this;
111
- }
112
- }
113
- else {
114
- if (values.filter((x) => (x instanceof point_1.Point)).length < 3) {
115
- return this.parse(new point_1.Point(values[0]), new point_1.Point(values[1]), new point_1.Point(values[2]));
116
- }
117
- this._A = values[0].clone();
118
- this._B = values[1].clone();
119
- this._C = values[2].clone();
120
- this._lines = {
121
- 'AB': new line_1.Line(this._A, this._B),
122
- 'BC': new line_1.Line(this._B, this._C),
123
- 'AC': new line_1.Line(this._A, this._C)
124
- };
125
- }
126
- }
127
- else if (values.length === 1) {
128
- if (values[0] instanceof Triangle) {
129
- return values[0].clone();
130
- }
131
- }
132
- this._updateTriangle();
133
- return this;
134
- };
135
- clone = () => {
136
- this._A = this._A.clone();
137
- this._B = this._B.clone();
138
- this._C = this._C.clone();
139
- this._lines = {
140
- 'AB': this._lines.AB.clone(),
141
- 'BC': this._lines.BC.clone(),
142
- 'AC': this._lines.AC.clone()
143
- };
144
- this._updateTriangle();
145
- return this;
146
- };
147
- _updateTriangle = () => {
148
- this._middles = {
149
- 'AB': new point_1.Point().middleOf(this._A, this._B),
150
- 'AC': new point_1.Point().middleOf(this._A, this._C),
151
- 'BC': new point_1.Point().middleOf(this._B, this._C)
152
- };
153
- this._remarquables = this._calculateRemarquableLines();
154
- };
155
- getPointByName = (ptName) => {
156
- switch (ptName.toUpperCase()) {
157
- case 'A':
158
- return this._A;
159
- case 'B':
160
- return this._B;
161
- case 'C':
162
- return this._C;
163
- }
164
- return this._A;
165
- };
166
- getSegment = (ptName1, ptName2) => {
167
- return new vector_1.Vector(this.getPointByName(ptName1), this.getPointByName(ptName2));
168
- };
169
- _calculateRemarquableLines = () => {
170
- let remarquables = {
171
- 'medians': {
172
- 'A': new line_1.Line(this._A, this._middles.BC),
173
- 'B': new line_1.Line(this._B, this._middles.AC),
174
- 'C': new line_1.Line(this._C, this._middles.AB),
175
- 'intersection': null
176
- },
177
- 'mediators': {
178
- 'AB': new line_1.Line(this._middles.AB, new vector_1.Vector(this._A, this._B).normal()),
179
- 'AC': new line_1.Line(this._middles.AC, new vector_1.Vector(this._A, this._C).normal()),
180
- 'BC': new line_1.Line(this._middles.BC, new vector_1.Vector(this._B, this._C).normal()),
181
- 'intersection': null
182
- },
183
- 'heights': {
184
- 'A': new line_1.Line(this._A, new vector_1.Vector(this._B, this._C).normal()),
185
- 'B': new line_1.Line(this._B, new vector_1.Vector(this._A, this._C).normal()),
186
- 'C': new line_1.Line(this._C, new vector_1.Vector(this._A, this._B).normal()),
187
- 'intersection': null
188
- },
189
- 'bisectors': {
190
- 'A': this._calculateBisectors('A'),
191
- 'B': this._calculateBisectors('B'),
192
- 'C': this._calculateBisectors('C'),
193
- 'intersection': null
194
- }
195
- };
196
- remarquables.medians.intersection = remarquables.medians.A.intersection(remarquables.medians.B).point;
197
- remarquables.mediators.intersection = remarquables.mediators.AB.intersection(remarquables.mediators.BC).point;
198
- remarquables.heights.intersection = remarquables.heights.A.intersection(remarquables.heights.B).point;
199
- remarquables.bisectors.intersection = remarquables.bisectors.A.intersection(remarquables.bisectors.B).point;
200
- return remarquables;
201
- };
202
- _calculateBisectors = (pt) => {
203
- let tlines = this.lines, d1, d2;
204
- if (pt === 'A') {
205
- d1 = tlines.AB;
206
- d2 = tlines.AC;
207
- }
208
- else if (pt === 'B') {
209
- d1 = tlines.AB;
210
- d2 = tlines.BC;
211
- }
212
- else if (pt === 'C') {
213
- d1 = tlines.BC;
214
- d2 = tlines.AC;
215
- }
216
- let b1 = new line_1.Line(new equation_1.Equation(d1.equation.left.clone().multiply(d2.n.simplify().norm), d2.equation.left.clone().multiply(d1.n.simplify().norm)).reorder(true).simplify()), b2 = new line_1.Line(new equation_1.Equation(d1.equation.left.clone().multiply(d2.n.simplify().norm), d2.equation.left.clone().multiply(d1.n.simplify().norm).opposed()).reorder(true).simplify());
217
- if (pt === 'A') {
218
- return b1.hitSegment(this.B, this.C) ? b1 : b2;
219
- }
220
- if (pt === 'B') {
221
- return b1.hitSegment(this.A, this.C) ? b1 : b2;
222
- }
223
- if (pt === 'C') {
224
- return b1.hitSegment(this.B, this.A) ? b1 : b2;
225
- }
226
- return b1;
227
- };
228
267
  }
229
268
  exports.Triangle = Triangle;
230
269
  //# sourceMappingURL=triangle.js.map