gpt4 book ai didi

c++ - 矩形近似算法

转载 作者:太空狗 更新时间:2023-10-29 20:46:00 25 4
gpt4 key购买 nike

我有一个不到 32 个绝对矩形大小的枚举,我需要给定尺寸并在我的枚举中找到最佳近似值。

有没有比我用大量嵌套的 ifelse 编写的意大利面条代码更好(即更易读和可维护)的方法?

目前我刚刚:

enum imgOptsScale {
//Some relative scales
w005h005 = 0x8,
w010h010 = 0x9,
w020h020 = 0xA,
w040h040 = 0xB,
w070h070 = 0xC,
w100h100 = 0xD,
w150h150 = 0xE,
w200h200 = 0xF,
w320h320 = 0x10,
w450h450 = 0x11,
w200h010 = 0x12,
w200h020 = 0x13,
w200h070 = 0x14,
w010h200 = 0x15,
w020h200 = 0x16,
w070h200 = 0x17
};
imgOptsScale getClosestSizeTo(int width, int height);

而且我认为在我进一步编写代码之前我会寻求帮助。我应该强调远离过于复杂的库的偏见,尽管我对算法比应该在资源受限系统上运行的容器更感兴趣。

最佳答案

我想我会用一些结构数组来解决这个问题,一个用于水平测量,一个用于垂直测量。

读取数组以找到下一个更大的大小,并返回相应的键。从这两个键构建最终的框度量。 (因为 32 只允许 5 位,这可能不是很理想——你可能需要水平 2.5 位和垂直 2.5 位,但我这里的简单方法需要 6 位——水平 3 位,垂直 3 位. 你可以从其中一个列表中删除一半的元素(也可以调整 << 3)如果你对自由度较低的维度之一没有问题。如果你希望两个维度都得到更好的表示,这可能需要足够的返工,这种方法可能不适合。)

未经测试的伪代码:

struct dimen {
int x;
int key;
}

struct dimen horizontal[] = { { .x = 10, .key = 0 },
{ .x = 20, .key = 1 },
{ .x = 50, .key = 2 },
{ .x = 90, .key = 3 },
{ .x = 120, .key = 4 },
{ .x = 200, .key = 5 },
{ .x = 300, .key = 6 },
{ .x = 10000, .key = 7 }};

struct dimen vertical[] = { { .x = 10, .key = 0 },
{ .x = 20, .key = 1 },
{ .x = 50, .key = 2 },
{ .x = 90, .key = 3 },
{ .x = 120, .key = 4 },
{ .x = 200, .key = 5 },
{ .x = 300, .key = 6 },
{ .x = 10000, .key = 7 }};

/* returns 0-63 as written */
int getClosestSizeTo(int width, int height) {
int horizontal_key = find_just_larger(horizontal, width);
int vertical_key = find_just_larger(vertical, height);
return (horizontal_kee << 3) & vertical_key;
}

int find_just_larger(struct dimen* d, size) {
int ret = d.key;
while(d.x < size) {
d++;
ret = d.key;
}
return ret;
}

关于c++ - 矩形近似算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9236458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com