gpt4 book ai didi

c++ - 如何使新给定坐标与旧坐标成比例?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:39:52 24 4
gpt4 key购买 nike

我有一些对象。它有一些原始的宽度和高度。我得到了新的宽度和高度。如何采用新的给定的宽度和高度来反对原始宽度和高度? (假设我们有一个正方形 1000x1000 并给出了一些所需的最大可能坐标,比如 1900x1200 什么算法会产生 1200x1200?或者在其他情况下,我们有 1000x1000 原件,并给定 400x600 它将返回 400x400...)

所以我开始尝试创建一些可以运行但失败的代码:

void resize_coefs(const int & original_w, const int & original_h, int & new_w, int & new_h)
{
double VW = new_w;
double VH = new_h;

double rw = original_w/VW;
double rh = original_h/VH;
if (rw>=rh){
new_h = VH;
new_w = rh*new_w + 2;

}
else
{
new_w = VW;
new_h= rw*new_h;
}
}

最佳答案

这样做:

  1. 计算宽度的比例因子。
  2. 计算高度的比例因子。
  3. 使用最小的缩放因子来缩放宽度和高度。

示例代码:

void resize_coefs(const int original_w, const int original_h, int & new_w, int & new_h)
{
double scale = std::min(
((double) new_w) / original_w ,
((double) new_h) / original_h );
new_w = std::min( scale * original_w, new_w );
new_h = std::min( scale * original_h, new_h );
}

由于可能存在舍入误差,建议在缩放后检查 new_wnew_h 是否仍在范围内。

编辑:这是一个只对整数运算做同样事情的版本,使用 Kerrek 在他的回答中提供的提示。很难看出它遵循完全相同的逻辑。

void resize_coefs(const int original_w, const int original_h, int & new_w, int & new_h)
{
int num, den;
if (new_w * original_h < new_h * original_w) {
num = new_w;
den = original_w;
} else {
num = new_h;
den = original_h;
}
new_w = original_w * num / den;
new_h = original_h * num / den;
}

关于c++ - 如何使新给定坐标与旧坐标成比例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8172213/

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