@eturnity/eturnity_maths 7.4.0-splitLine.2 → 7.10.0
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
|
@@ -151,9 +151,14 @@ export function get3DDistanceBetweenPoints(firstPoint, secondPoint) {
|
|
|
151
151
|
}
|
|
152
152
|
|
|
153
153
|
export function getDegree(H, I, J) {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
154
|
+
let distanceFunction = get3DDistanceBetweenPoints
|
|
155
|
+
if(H.z==undefined || I.z==undefined || J.z==undefined || isNaN(H.z) || isNaN(I.z) || isNaN(J.z) ){
|
|
156
|
+
distanceFunction=getDistanceBetweenPoints
|
|
157
|
+
}
|
|
158
|
+
const a = distanceFunction(H, I)
|
|
159
|
+
const b = distanceFunction(I, J)
|
|
160
|
+
const c = distanceFunction(H, J)
|
|
161
|
+
|
|
157
162
|
|
|
158
163
|
let angle = (Math.acos((a * a + b * b - c * c) / (2 * a * b)) * 180) / Math.PI
|
|
159
164
|
|
|
@@ -952,76 +957,32 @@ export function get3DDistanceBetweenPoints(firstPoint, secondPoint) {
|
|
|
952
957
|
let area = vectorLength(product)/2
|
|
953
958
|
return area
|
|
954
959
|
}
|
|
955
|
-
export function
|
|
956
|
-
return
|
|
957
|
-
}
|
|
958
|
-
export function arrayIntersection(array1,array2){
|
|
959
|
-
return array1.filter(value => array2.includes(value));
|
|
960
|
+
export function getIndexesOfBiggestTrangle(points){
|
|
961
|
+
return getIndexesOfBiggestTrangleWithFixedIndexes(points,[])
|
|
960
962
|
}
|
|
961
|
-
export function
|
|
963
|
+
export function getIndexesOfBiggestTrangleWithFixedIndexes(points,fixedIndexes){
|
|
962
964
|
if(points.length<3){
|
|
963
965
|
throw new Error("not enough points to make a triangle")
|
|
964
966
|
return
|
|
965
967
|
}
|
|
966
|
-
let preferedAndFixedIndexes=[...fixedIndexes,...preferedIndexes]
|
|
967
|
-
preferedAndFixedIndexes=[...new Set(preferedAndFixedIndexes)]
|
|
968
968
|
let maxArea = -1
|
|
969
|
-
let maxNumberOfPreferedOrFixedIndexes = -1
|
|
970
969
|
let maxTriangle = [ 0, 1, 2]
|
|
971
|
-
fixedIndexes=[...new Set(fixedIndexes)].slice(0,3)
|
|
970
|
+
fixedIndexes=[...new Set(...fixedIndexes)].slice(0,3)
|
|
972
971
|
if(fixedIndexes.length==3){return fixedIndexes}
|
|
973
|
-
//if(preferedAndFixedIndexes.length==3){return preferedAndFixedIndexes}
|
|
974
972
|
for (let i = 0; i < points.length - 2; i++) {
|
|
973
|
+
if(fixedIndexes.length==0 || fixedIndexes.includes(i)){
|
|
975
974
|
for (let j = i + 1; j < points.length - 1; j++) {
|
|
975
|
+
if(fixedIndexes.length<2 || fixedIndexes.includes(j)){
|
|
976
976
|
for (let k = j + 1; k < points.length; k++) {
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
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
|
-
}
|
|
977
|
+
const area = triangleArea(points[i], points[j], points[k]);
|
|
978
|
+
if (area > maxArea) {
|
|
979
|
+
maxArea = area;
|
|
980
|
+
maxTriangle = [i, j, k];
|
|
988
981
|
}
|
|
989
982
|
}
|
|
990
|
-
|
|
983
|
+
}
|
|
991
984
|
}
|
|
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
|
-
|
|
985
|
+
}
|
|
1025
986
|
}
|
|
1026
987
|
return maxTriangle
|
|
1027
988
|
}
|
|
@@ -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,
|