@eturnity/eturnity_maths 7.16.0-qa-dev03.1 → 7.16.0-qa-dev03.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 +1 -1
- package/src/geometry.js +39 -3
package/package.json
CHANGED
package/src/geometry.js
CHANGED
|
@@ -987,7 +987,12 @@ export function getIndexesOfBiggestTriangleWithFixedIndexes(points,fixedIndexes,
|
|
|
987
987
|
if(numberOfPreferedOrFixedIndexes > maxNumberOfPreferedOrFixedIndexes){
|
|
988
988
|
maxArea = -1
|
|
989
989
|
}
|
|
990
|
-
|
|
990
|
+
let area = triangleArea(points[i], points[j], points[k])
|
|
991
|
+
const selectedIndexes = preferedAndFixedIndexes.filter(i=>points[i].selected)
|
|
992
|
+
//give advantages to connected area
|
|
993
|
+
if(areConsecutiveIndexes(i,j,k,points.length) && isMiddleIndexPartOf(i,j,k,selectedIndexes)){
|
|
994
|
+
area=area*1.2
|
|
995
|
+
}
|
|
991
996
|
if (area >= maxArea) {
|
|
992
997
|
maxArea = area
|
|
993
998
|
maxNumberOfPreferedOrFixedIndexes = numberOfPreferedOrFixedIndexes
|
|
@@ -1021,7 +1026,13 @@ export function getIndexesOfBiggestTriangleWithTwoFixedIndexes(points,fixedIndex
|
|
|
1021
1026
|
if(numberOfPreferedOrFixedIndexes > maxNumberOfPreferedOrFixedIndexes){
|
|
1022
1027
|
maxArea = -1
|
|
1023
1028
|
}
|
|
1024
|
-
|
|
1029
|
+
let area = triangleArea(points[i], points[j], points[k])
|
|
1030
|
+
|
|
1031
|
+
//give advantages to connected area
|
|
1032
|
+
const selectedIndexes = preferedAndFixedIndexes.filter(i=>points[i].selected)
|
|
1033
|
+
if(areConsecutiveIndexes(i,j,k,points.length) && isMiddleIndexPartOf(i,j,k,selectedIndexes)){
|
|
1034
|
+
area=area*1.2
|
|
1035
|
+
}
|
|
1025
1036
|
if (area > maxArea) {
|
|
1026
1037
|
maxArea = area
|
|
1027
1038
|
maxNumberOfPreferedOrFixedIndexes = numberOfPreferedOrFixedIndexes
|
|
@@ -1036,4 +1047,29 @@ export function getIndexesOfBiggestTriangleWithTwoFixedIndexes(points,fixedIndex
|
|
|
1036
1047
|
}
|
|
1037
1048
|
return maxTriangle
|
|
1038
1049
|
}
|
|
1039
|
-
|
|
1050
|
+
function isMiddleIndexPartOf(i,j,k,indexes){
|
|
1051
|
+
let midIndex=j
|
|
1052
|
+
if(i==0 && j!=1){
|
|
1053
|
+
midIndex = k
|
|
1054
|
+
}else if(i==0 && j==1 && k!=2){
|
|
1055
|
+
midIndex = i
|
|
1056
|
+
}
|
|
1057
|
+
return indexes.includes(midIndex)
|
|
1058
|
+
}
|
|
1059
|
+
function areConsecutiveIndexes(index1, index2, index3, totalVertices) {
|
|
1060
|
+
// Sort the indexes
|
|
1061
|
+
const sortedIndexes = [index1, index2, index3].sort()
|
|
1062
|
+
|
|
1063
|
+
// Check if the indexes form a continuous sequence
|
|
1064
|
+
if (sortedIndexes[2] - sortedIndexes[0] === 2) {
|
|
1065
|
+
return true // If consecutive
|
|
1066
|
+
}
|
|
1067
|
+
|
|
1068
|
+
// Special case: If the sorted indexes wrap around from the last vertex to the first
|
|
1069
|
+
if ((sortedIndexes[0] === 0 && sortedIndexes[1] === totalVertices - 2 && sortedIndexes[2] === totalVertices - 1) ||
|
|
1070
|
+
(sortedIndexes[0] === 0 && sortedIndexes[1] === 1 && sortedIndexes[2] === totalVertices - 1)) {
|
|
1071
|
+
return true
|
|
1072
|
+
}
|
|
1073
|
+
|
|
1074
|
+
return false // If not consecutive
|
|
1075
|
+
}
|