开发:优化最大内接矩形的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 { 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]);
}
}

Loading…
Cancel
Save