我的程序的输入是半径为100的圆的蓝色区域内的(x,y)整数坐标。我想将输入坐标从蓝色区域缩放到红色区域,保持x和y的比例。
(链接到Desmos绘图:
https://www.desmos.com/calculator/61f4y2r7r4
)
我知道如何用一维来做这件事-
this answer
提供了有关执行线性缩放的良好概述。我试图将这种方法分别应用于x轴和y轴。下面是我为图像建模而编写的一些示例代码。
#include <math.h>
#include <stdio.h>
#define RADIUS 100
static int find_point_on_circumference(int val) {
return sqrt(RADIUS * RADIUS - val * val);
}
static int scale(int val, int min_old, int max_old, int min_new, int max_new) {
return (max_old == min_old)
? val
: (((val - min_old) * (max_new - min_new)) / (max_old - min_old) + min_new);
}
int main() {
int x = 15;
int y = 96;
int boundary_old_x = 10;
int boundary_old_y = 10;
int boundary_new_x = 30;
int boundary_new_y = 20;
int new_x = scale(
x,
boundary_old_x,
find_point_on_circumference(y),
boundary_new_x,
find_point_on_circumference(y));
int new_y = scale(
y,
boundary_old_y,
find_point_on_circumference(x),
boundary_new_y,
find_point_on_circumference(x));
if (sqrt(new_x * new_x + new_y * new_y) <= RADIUS) {
printf("SUCCESS\n");
} else {
printf("FAIL\n");
}
return 0;
}
对于这个特定的输入(15,96),结果在圆之外。我可以看出原因是我的max-x界小于min-x界。我只是不确定首先应该如何正确地应用这种缩放。