开发:优化最大内接矩形的API

pull/2521/MERGE
ChenX 10 months ago
parent 03c632aaa3
commit 42a5766a1f

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

Loading…
Cancel
Save