2013-02-27 2 views
1

Я хочу написать программу C для поворота точек внутри прямоугольника.Вращение Несколько точек внутри прямоугольника

В моей программе центр прямоугольника является точкой поворота, а размеры прямоугольника - 320x480. Предполагая, что одна из вершин прямоугольника находится в начале координат, точка поворота равна (160,240).

Теперь, чтобы повернуть точки (px, py) внутри прямоугольника относительно оси (ox, oy), я использую следующие формулы -

p'x = cos(theta) * (px-ox) - sin(theta) * (py-oy) + ox 

p'y = sin(theta) * (px-ox) + cos(theta) * (py-oy) + oy 

Однако, когда я пытаюсь повернуть точки на 90 градусов, все точки отображаются на прямую.

Можно ли решить эту проблему?

theta2=90; 


     theta1=abs(theta2*3.1415926)/180; 

     if(theta2>0) 
     { 
      for(int tc=0;tc<rstruct2->nrows;tc++) 
      { 
       rstruct2->xcol[tc]=round((rstruct2->xcol[tc]-160)*cos(theta1)-sin(theta1)*(rstruct2->ycol[tc]-240)+160); 

       rstruct2->ycol[tc]=round((rstruct2->xcol[tc]-160)*sin(theta1)+cos(theta1)*(rstruct2->ycol[tc]-240)+240); 


      } 
     } 
     else 
     { 
      for(int tc=0;tc<rstruct2->nrows;tc++) 
      { 
       rstruct2->xcol[tc]=round(160+(rstruct2->xcol[tc]-160)*cos(theta1)+(rstruct2->ycol[tc]-240)*sin(theta1)); 

       rstruct2->ycol[tc]=round(240+(-rstruct2->xcol[tc]-160)*sin(theta1)+(rstruct2->ycol[tc]-240)*cos(theta1)); 


      } 
     } 
+1

1. Является ли это C++ или C? Они разные. 2. Можем ли мы увидеть ваш код? (Это, скорее всего, ответит 1.) – BoBTFish

+0

@BoBTFish это c –

+0

Хорошо, я удалил тег 'C++'. – BoBTFish

ответ

4

Ваш у вращения использует модифицированную х-значение, но вам нужно использовать базовое значение - использовать временную переменную, например:

double x_tmp = round((rstruct2->xcol[tc]-160)*cos(theta1)-sin(theta1)*(rstruct2->ycol[tc]-240)+160); 
double y_tmp = round((rstruct2->xcol[tc]-160)*sin(theta1)+cos(theta1)*(rstruct2->ycol[tc]-240)+240); 

rstruct2->xcol[tc] = x_tmp; 
rstruct2->ycol[tc] = y_tmp; 
Смежные вопросы