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

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.1",
4
4
  "author": "Eturnity Team",
5
5
  "main": "src/index.js",
6
6
  "private": false,
package/src/geometry.js CHANGED
@@ -955,6 +955,9 @@ export function get3DDistanceBetweenPoints(firstPoint, secondPoint) {
955
955
  export function getIndexesOfBiggestTrangle(points){
956
956
  return getIndexesOfBiggestTrangleWithFixedIndexes(points,[])
957
957
  }
958
+ export function arrayIntersection(array1,array2){
959
+ return array1.filter(value => array2.includes(value));
960
+ }
958
961
  export function getIndexesOfBiggestTrangleWithFixedIndexes(points,fixedIndexes){
959
962
  if(points.length<3){
960
963
  throw new Error("not enough points to make a triangle")
@@ -962,22 +965,47 @@ export function get3DDistanceBetweenPoints(firstPoint, secondPoint) {
962
965
  }
963
966
  let maxArea = -1
964
967
  let maxTriangle = [ 0, 1, 2]
965
- fixedIndexes=[...new Set(...fixedIndexes)].slice(0,3)
968
+ fixedIndexes=[...new Set(fixedIndexes)].slice(0,3)
966
969
  if(fixedIndexes.length==3){return fixedIndexes}
967
970
  for (let i = 0; i < points.length - 2; i++) {
968
- if(fixedIndexes.length==0 || fixedIndexes.includes(i)){
969
971
  for (let j = i + 1; j < points.length - 1; j++) {
970
- if(fixedIndexes.length<2 || fixedIndexes.includes(j)){
971
972
  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];
973
+ if(arrayIntersection(fixedIndexes,[i,j,k]).length==fixedIndexes.length){
974
+ const area = triangleArea(points[i], points[j], points[k]);
975
+ if (area > maxArea) {
976
+ maxArea = area;
977
+ maxTriangle = [i, j, k]
978
+ }
976
979
  }
977
980
  }
978
- }
981
+
979
982
  }
980
- }
983
+
984
+ }
985
+ return maxTriangle
986
+ }
987
+ export function getIndexesOfBiggestTrangleWithTwoFixedIndexes(points,fixedIndexes){
988
+ fixedIndexes=[...new Set(fixedIndexes)]
989
+ if(points.length<3 || fixedIndexes.length<3){
990
+ throw new Error("not enough points to make a triangle")
991
+ return
992
+ }
993
+ let maxArea = -1
994
+ let maxTriangle = [ 0, 1, 2]
995
+ for (let i = 0; i < points.length - 2; i++) {
996
+ for (let j = i + 1; j < points.length - 1; j++) {
997
+ for (let k = j + 1; k < points.length; k++) {
998
+ if(arrayIntersection(fixedIndexes,[i,j,k]).length==2){
999
+ const area = triangleArea(points[i], points[j], points[k]);
1000
+ if (area > maxArea) {
1001
+ maxArea = area;
1002
+ maxTriangle = [i, j, k];
1003
+ }
1004
+ }
1005
+ }
1006
+
1007
+ }
1008
+
981
1009
  }
982
1010
  return maxTriangle
983
1011
  }
@@ -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,