@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
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(
|
|
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
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
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
|
-
|
|
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,
|