интерактивное рисование кривой - PullRequest
1 голос
/ 23 ноября 2010

У меня есть набор из x координат x = {0,32,64, ... 256} и y = {2,6,4 ....}, я нанесу график вдоль оси x_y, затем перетащуточка от 128 до 64 вдоль оси x, теперь я хочу, чтобы левая сторона точки была сжата, а правая сторона была увеличена. Как я могу пересчитать координаты графика в 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;
     }

1 Ответ

1 голос
/ 23 ноября 2010

Вам нужны две системы 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.

Один пример:

До:

alt text

После:

alt text

НТН!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...