@eturnity/eturnity_maths 7.4.0-splitLine.2 → 7.10.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eturnity/eturnity_maths",
3
- "version": "7.4.0-splitLine.2",
3
+ "version": "7.10.0",
4
4
  "author": "Eturnity Team",
5
5
  "main": "src/index.js",
6
6
  "private": false,
package/src/geometry.js CHANGED
@@ -151,9 +151,14 @@ export function get3DDistanceBetweenPoints(firstPoint, secondPoint) {
151
151
  }
152
152
 
153
153
  export function getDegree(H, I, J) {
154
- const a = get3DDistanceBetweenPoints(H, I)
155
- const b = get3DDistanceBetweenPoints(I, J)
156
- const c = get3DDistanceBetweenPoints(H, J)
154
+ let distanceFunction = get3DDistanceBetweenPoints
155
+ if(H.z==undefined || I.z==undefined || J.z==undefined || isNaN(H.z) || isNaN(I.z) || isNaN(J.z) ){
156
+ distanceFunction=getDistanceBetweenPoints
157
+ }
158
+ const a = distanceFunction(H, I)
159
+ const b = distanceFunction(I, J)
160
+ const c = distanceFunction(H, J)
161
+
157
162
 
158
163
  let angle = (Math.acos((a * a + b * b - c * c) / (2 * a * b)) * 180) / Math.PI
159
164
 
@@ -952,76 +957,32 @@ export function get3DDistanceBetweenPoints(firstPoint, secondPoint) {
952
957
  let area = vectorLength(product)/2
953
958
  return area
954
959
  }
955
- export function getIndexesOfBiggestTriangle(points){
956
- return getIndexesOfBiggestTriangleWithFixedIndexes(points,[])
957
- }
958
- export function arrayIntersection(array1,array2){
959
- return array1.filter(value => array2.includes(value));
960
+ export function getIndexesOfBiggestTrangle(points){
961
+ return getIndexesOfBiggestTrangleWithFixedIndexes(points,[])
960
962
  }
961
- export function getIndexesOfBiggestTriangleWithFixedIndexes(points,fixedIndexes,preferedIndexes=[]){
963
+ export function getIndexesOfBiggestTrangleWithFixedIndexes(points,fixedIndexes){
962
964
  if(points.length<3){
963
965
  throw new Error("not enough points to make a triangle")
964
966
  return
965
967
  }
966
- let preferedAndFixedIndexes=[...fixedIndexes,...preferedIndexes]
967
- preferedAndFixedIndexes=[...new Set(preferedAndFixedIndexes)]
968
968
  let maxArea = -1
969
- let maxNumberOfPreferedOrFixedIndexes = -1
970
969
  let maxTriangle = [ 0, 1, 2]
971
- fixedIndexes=[...new Set(fixedIndexes)].slice(0,3)
970
+ fixedIndexes=[...new Set(...fixedIndexes)].slice(0,3)
972
971
  if(fixedIndexes.length==3){return fixedIndexes}
973
- //if(preferedAndFixedIndexes.length==3){return preferedAndFixedIndexes}
974
972
  for (let i = 0; i < points.length - 2; i++) {
973
+ if(fixedIndexes.length==0 || fixedIndexes.includes(i)){
975
974
  for (let j = i + 1; j < points.length - 1; j++) {
975
+ if(fixedIndexes.length<2 || fixedIndexes.includes(j)){
976
976
  for (let k = j + 1; k < points.length; k++) {
977
- if(arrayIntersection(fixedIndexes,[i,j,k]).length==fixedIndexes.length){
978
- const numberOfPreferedOrFixedIndexes = arrayIntersection(preferedAndFixedIndexes,[i,j,k]).length
979
-
980
- if(numberOfPreferedOrFixedIndexes >= maxNumberOfPreferedOrFixedIndexes){
981
- const area = triangleArea(points[i], points[j], points[k]);
982
- if (area > maxArea || (numberOfPreferedOrFixedIndexes > maxNumberOfPreferedOrFixedIndexes && (maxArea+1)/(area+1)<4 )) {
983
- maxArea = area
984
- maxNumberOfPreferedOrFixedIndexes = numberOfPreferedOrFixedIndexes
985
- maxTriangle = [i, j, k]
986
- }
987
- }
977
+ const area = triangleArea(points[i], points[j], points[k]);
978
+ if (area > maxArea) {
979
+ maxArea = area;
980
+ maxTriangle = [i, j, k];
988
981
  }
989
982
  }
990
-
983
+ }
991
984
  }
992
-
993
- }
994
- return maxTriangle
995
- }
996
- export function getIndexesOfBiggestTriangleWithTwoFixedIndexes(points,fixedIndexes,preferedIndexes=[]){
997
- fixedIndexes=[...new Set(fixedIndexes)]
998
- let preferedAndFixedIndexes=[...fixedIndexes,...preferedIndexes]
999
- preferedAndFixedIndexes=[...new Set(preferedAndFixedIndexes)]
1000
- if(points.length<3 || fixedIndexes.length<3){
1001
- throw new Error("not enough points to make a triangle")
1002
- return
1003
- }
1004
- let maxArea = -1
1005
- let maxNumberOfPreferedOrFixedIndexes = -1
1006
- let maxTriangle = [ 0, 1, 2]
1007
- for (let i = 0; i < points.length - 2; i++) {
1008
- for (let j = i + 1; j < points.length - 1; j++) {
1009
- for (let k = j + 1; k < points.length; k++) {
1010
- if(arrayIntersection(fixedIndexes,[i,j,k]).length==2){
1011
- const numberOfPreferedOrFixedIndexes = arrayIntersection(preferedAndFixedIndexes,[i,j,k]).length
1012
- if(numberOfPreferedOrFixedIndexes >= maxNumberOfPreferedOrFixedIndexes){
1013
- const area = triangleArea(points[i], points[j], points[k]);
1014
- if (area > maxArea || (numberOfPreferedOrFixedIndexes > maxNumberOfPreferedOrFixedIndexes && (maxArea+1)/(area+1)<4 )) {
1015
- maxArea = area
1016
- maxNumberOfPreferedOrFixedIndexes = numberOfPreferedOrFixedIndexes
1017
- maxTriangle = [i, j, k];
1018
- }
1019
- }
1020
- }
1021
- }
1022
-
1023
- }
1024
-
985
+ }
1025
986
  }
1026
987
  return maxTriangle
1027
988
  }
@@ -87,7 +87,7 @@ export function updateComputedGeometryPolygon(polygon) {
87
87
  if(polygon.layer=="moduleField"){
88
88
  let trimedOutline=[]
89
89
  if(polygon.panels.length>0){
90
- trimedOutline = getConcaveOutline(polygon.panels,polygon.panels[0].outline)
90
+ trimedOutline = getConcaveOutline(polygon.panels,polygon.panels[0].outline)
91
91
  trimedOutline = trimedOutline.map(p=>{return{
92
92
  x:p.x,
93
93
  y:p.y,