pixel - 如何最小化两个整数,使其乘积小于某个值?

标签 pixel resolution square

给定两个整数,如何最小化它们,使它们的乘积小于其他值,同时保持它们的相对比率?

这就是形式问题。实际问题是这样的:我的宽度/高度像素分辨率包含随机值(任一维度为 1 到 8192 之间的任意值)。我想调整值对,以便它们的乘积不超过像素总数(例如:1000000),并且我需要确保调整后的分辨率的长宽比保持不变(例如:1.7777)。

最简单的方法是运行一个循环,每次从宽度中减去 1,调整高度以匹配长宽比,直到它们的乘积低于阈值。例如:

int wid = 1920;
int hei = 1080;
float aspect = wid / (float)hei;
int maxPixels = 1000000;
while (wid * hei > maxPixels)
{
    wid -= 1;
    hei = wid / aspect;
}

当然必须有一种更具分析性的方法来解决这个问题吗?

最佳答案

编辑:误读了原来的问题。

表达问题的另一种方式是使用 WH最大的是什么ab这样a/b = W/Ha*b < C哪里C是你的极限。

为此,请找到 D = gcd(W,H)W 的最大公约数和H 。最大公分母通常是使用欧几里得算法找到的。

设置x = W/Dy = H/D ,这是具有相同比率的最小解。

产生C下的最大值,从 F*x*F*y <= C 的不等式开始其中 F 是 x 的比例因子和y

代数:

F^2 <= C/(x*y)

F <= sqrt(C/(x*y))

由于我们希望 F 是整数并且严格小于上面的值,

F = floor(sqrt(C/(x*y)))

这将为您提供新的解决方案 A = x*FB = y*F哪里A*B < CA/B = W/H .

关于pixel - 如何最小化两个整数,使其乘积小于某个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60591602/

相关文章:

java - 如何访问 getPixel 中的数组?

winforms - 更改应用程序中所有控件的字体大小(win 窗体)

qt - QML 适合所有分辨率的屏幕

ios - Square 的 CardCase 应用程序如何自动填充地址簿中的用户详细信息?

java函数确定具有给定宽度的图像的高度?

html - 如何根据文本内容动态设置html表格列的宽度?

image - MATLAB 如何将轴坐标转换为像素坐标?

Android xhdpi密度和分辨率

android - 'offscreen fragments being brought back to life' 和 'no direct control over animations' 是什么意思?

python - 如何使用 twinx 并仍然获得方形图