我有一组x坐标x = {0,32,64,... 256}和y = {2,6,4 ....},我将沿着x_y轴绘制图形,然后我拖动沿x轴的点128到64,现在我希望点的左侧被压缩,右侧被放大。我怎样才能在C中重新计算图的坐标。 任何帮助表示赞赏。这是我的代码......
int arr_x[]={32,64,96,128,160,192,224,256};
int arr_y[]={7,12,8,6,14,22,18,24};
int x1=64,x2=128; //drag x2 to x1
int min_val=abs(arr_x[0]-x2);
int idx=0;
for (int i = 1; i < 8; i++)
{
if ((abs(arr_x[i] -x2)) < min_val)
{
min_val = abs(arr_x[i] - x2);
idx = i;
}
}
float r;//ratio for compression and enlarge
if(x2>x1)
{
arr_x[idx]=x2;
r=(float)x2/x1;
for(int i=0;i<=idx;i++)
{
arr_x[i]=arr_x[i]*r;
}
for(int i=idx+1;i<8;i++)
{
arr_x[i]=arr_x[i]/r;
}
}
else
{
arr_x[idx]=x2;
r=(float)x1/x2;
for(int i=0;i<=idx;i++)
{
arr_x[i]=arr_x[i]*r;
}
for(int i=idx+1;i<8;i++)
{
arr_x[i]=arr_x[i]/r;
}
答案 0 :(得分:1)
您需要两个coodinate系统以避免混淆。一个在屏幕上(S),一个在你的轴上(X)。两者都来自{0 ... 256}
移动一个轴点时需要计算屏幕坐标。
假设您将点X0移动到位置S1。
So, if X < X0 the screen coordinate for X is (X * S1/X0)
If X > X0 the screen coordinate for X is ((256-S1)/(256-X0))*(X-X0)+S1
在您的示例中,将X0替换为128,将S1替换为64.
一个例子:
之前:
之后:
HTH!