2010-11-23 82 views
1

我有一組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

你已經做了什麼?你目前的算法是什麼? – 2010-11-23 05:50:46

+0

@Alastair:請找到上面的代碼... – 2010-11-23 06:02:24

回答

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 

在你的榜樣,由128和S1替換X0 64

一個例子:

前:

alt text

後:

alt text

HTH!