@eturnity/eturnity_maths 7.4.0-splitLine.1 → 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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/geometry.js +28 -12
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eturnity/eturnity_maths",
3
- "version": "7.4.0-splitLine.1",
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,29 +952,38 @@ 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
958
  export function arrayIntersection(array1,array2){
959
959
  return array1.filter(value => array2.includes(value));
960
960
  }
961
- export function getIndexesOfBiggestTrangleWithFixedIndexes(points,fixedIndexes){
961
+ export function getIndexesOfBiggestTriangleWithFixedIndexes(points,fixedIndexes,preferedIndexes=[]){
962
962
  if(points.length<3){
963
963
  throw new Error("not enough points to make a triangle")
964
964
  return
965
965
  }
966
+ let preferedAndFixedIndexes=[...fixedIndexes,...preferedIndexes]
967
+ preferedAndFixedIndexes=[...new Set(preferedAndFixedIndexes)]
966
968
  let maxArea = -1
969
+ let maxNumberOfPreferedOrFixedIndexes = -1
967
970
  let maxTriangle = [ 0, 1, 2]
968
971
  fixedIndexes=[...new Set(fixedIndexes)].slice(0,3)
969
972
  if(fixedIndexes.length==3){return fixedIndexes}
973
+ //if(preferedAndFixedIndexes.length==3){return preferedAndFixedIndexes}
970
974
  for (let i = 0; i < points.length - 2; i++) {
971
975
  for (let j = i + 1; j < points.length - 1; j++) {
972
976
  for (let k = j + 1; k < points.length; k++) {
973
977
  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
+ 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
+ }
978
987
  }
979
988
  }
980
989
  }
@@ -984,22 +993,29 @@ export function get3DDistanceBetweenPoints(firstPoint, secondPoint) {
984
993
  }
985
994
  return maxTriangle
986
995
  }
987
- export function getIndexesOfBiggestTrangleWithTwoFixedIndexes(points,fixedIndexes){
996
+ export function getIndexesOfBiggestTriangleWithTwoFixedIndexes(points,fixedIndexes,preferedIndexes=[]){
988
997
  fixedIndexes=[...new Set(fixedIndexes)]
998
+ let preferedAndFixedIndexes=[...fixedIndexes,...preferedIndexes]
999
+ preferedAndFixedIndexes=[...new Set(preferedAndFixedIndexes)]
989
1000
  if(points.length<3 || fixedIndexes.length<3){
990
1001
  throw new Error("not enough points to make a triangle")
991
1002
  return
992
1003
  }
993
1004
  let maxArea = -1
1005
+ let maxNumberOfPreferedOrFixedIndexes = -1
994
1006
  let maxTriangle = [ 0, 1, 2]
995
1007
  for (let i = 0; i < points.length - 2; i++) {
996
1008
  for (let j = i + 1; j < points.length - 1; j++) {
997
1009
  for (let k = j + 1; k < points.length; k++) {
998
1010
  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];
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
+ }
1003
1019
  }
1004
1020
  }
1005
1021
  }