diff --git a/src/Add-on/testEntity/LargestInteriorRectangle.ts b/src/Add-on/testEntity/LargestInteriorRectangle.ts index 85baf3177..010238bcc 100644 --- a/src/Add-on/testEntity/LargestInteriorRectangle.ts +++ b/src/Add-on/testEntity/LargestInteriorRectangle.ts @@ -9,25 +9,27 @@ import { arrayPushArray, arraySortByNumber } from "../../Nest/Common/ArrayExt"; import { Max } from '../../Nest/Common/Util'; import { FuzzyFactory } from '../../csg/core/FuzzyFactory'; +/** [area maxXIndex maxYIndex xCount yCount,width,height] */ +export type RectData = [number, number, number, number, number, number, number]; /** * 获取面积最大的矩形 * @param rects * @returns */ -function GetMaxAreaFn(rects: [number, number, number, number, number][]): number +function GetMaxAreaFn(rects: RectData[]): number { return Max(rects, (t1, t2) => t2[0] > t1[0]); } -function GetMaxWidthFn(rects: [number, number, number, number, number][]): number +function GetMaxWidthFn(rects: RectData[]): number { - return Max(rects, (t1, t2) => t2[1] > t1[1]); + return Max(rects, (t1, t2) => t2[5] > t1[5]); } -function GetMaxHeightFn(rects: [number, number, number, number, number][]): number +function GetMaxHeightFn(rects: RectData[]): number { - return Max(rects, (t1, t2) => t2[2] > t1[2]); + return Max(rects, (t1, t2) => t2[6] > t1[6]); } @@ -80,7 +82,7 @@ export class LargestInteriorRectangle /** 可以自定义过滤函数,以便过滤掉某些不需要的矩形,当返回true时,我们会过滤它 */ FilterRectFn: (width: number, height: number) => boolean; - GetMaxRectIndexFn: (rects: [number, number, number, number, number][]) => number = GetMaxAreaFn; + GetMaxRectIndexFn: (rects: RectData[]) => number = GetMaxAreaFn; static GetMaxAreaFn = GetMaxAreaFn; @@ -283,8 +285,8 @@ export class LargestInteriorRectangle } } - //area maxXIndex maxYIndex xcount ycount - let rects: [number, number, number, number, number][] = []; + //area maxXIndex maxYIndex xcount ycount,width,height + let rects: RectData[] = []; for (let j = 0; j < n; j++) // 对于每一列,使用基于柱状图的方法 { @@ -332,7 +334,7 @@ export class LargestInteriorRectangle //面积小于最小允许面积 if (area < this.MinArea) continue; - rects.push([area, down[i], j, xCount, yCount]); + rects.push([area, down[i], j, xCount, yCount, width, height]); } }