@eturnity/eturnity_maths 7.4.0-splitLine.0 → 7.4.0-splitLine.2

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.0",
3
+ "version": "7.4.0-splitLine.2",
4
4
  "author": "Eturnity Team",
5
5
  "main": "src/index.js",
6
6
  "private": false,
package/src/geometry.js CHANGED
@@ -952,32 +952,76 @@ export function get3DDistanceBetweenPoints(firstPoint, secondPoint) {
952
952
  let area = vectorLength(product)/2
953
953
  return area
954
954
  }
955
- export function getIndexesOfBiggestTrangle(points){
956
- return getIndexesOfBiggestTrangleWithFixedIndexes(points,[])
955
+ export function getIndexesOfBiggestTriangle(points){
956
+ return getIndexesOfBiggestTriangleWithFixedIndexes(points,[])
957
957
  }
958
- export function getIndexesOfBiggestTrangleWithFixedIndexes(points,fixedIndexes){
958
+ export function arrayIntersection(array1,array2){
959
+ return array1.filter(value => array2.includes(value));
960
+ }
961
+ export function getIndexesOfBiggestTriangleWithFixedIndexes(points,fixedIndexes,preferedIndexes=[]){
959
962
  if(points.length<3){
960
963
  throw new Error("not enough points to make a triangle")
961
964
  return
962
965
  }
966
+ let preferedAndFixedIndexes=[...fixedIndexes,...preferedIndexes]
967
+ preferedAndFixedIndexes=[...new Set(preferedAndFixedIndexes)]
963
968
  let maxArea = -1
969
+ let maxNumberOfPreferedOrFixedIndexes = -1
964
970
  let maxTriangle = [ 0, 1, 2]
965
- fixedIndexes=[...new Set(...fixedIndexes)].slice(0,3)
971
+ fixedIndexes=[...new Set(fixedIndexes)].slice(0,3)
966
972
  if(fixedIndexes.length==3){return fixedIndexes}
973
+ //if(preferedAndFixedIndexes.length==3){return preferedAndFixedIndexes}
967
974
  for (let i = 0; i < points.length - 2; i++) {
968
- if(fixedIndexes.length==0 || fixedIndexes.includes(i)){
969
975
  for (let j = i + 1; j < points.length - 1; j++) {
970
- if(fixedIndexes.length<2 || fixedIndexes.includes(j)){
971
976
  for (let k = j + 1; k < points.length; k++) {
972
- const area = triangleArea(points[i], points[j], points[k]);
973
- if (area > maxArea) {
974
- maxArea = area;
975
- maxTriangle = [i, j, 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
+ }
976
988
  }
977
989
  }
978
- }
990
+
979
991
  }
980
- }
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
+
981
1025
  }
982
1026
  return maxTriangle
983
1027
  }
@@ -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,