Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2011, 18:12   #1
SuGarIm
Новичок
Джуниор
 
Регистрация: 29.04.2011
Сообщений: 2
Печаль Вращение прямоугольника!!!!

Мне необходимо изобразить прямоугольник, вращающийся вокруг одной из своих вершин в плоскости экрана на си++билдер.
наррисовала я его через координаты, вычислила радиус окружности, по которой он будет вращаться, углы, а как привязать ко всему этому стороны-не знаю))))
SuGarIm вне форума Ответить с цитированием
Старый 29.04.2011, 18:56   #2
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

поворачивайте каждую вершину относительно той из вершин, вокруг которой идёт вращение, и рисуйте прямоугольник.
вот паскалевский код, на с++ сами перенесёте.
Код:
Uses Graph,Crt;
procedure MyDelay(HundSecond : longInt);
var
  Ticks      : LongInt  absolute 0:$46c;
begin
  HundSecond:=round(HundSecond * 0.185) +Ticks;
  repeat  until (Ticks>HundSecond);
end;

procedure DrawRectRotate(x0, y0, a, b : integer; Ugol : double;
                         LineColor : integer);
var x1,y1,x2,y2, x3,y3 : integer;
begin
  setcolor(LineColor);
  x1 := round(x0 + a * cos(Ugol*pi/180));
  y1 := round(y0 + a * sin(Ugol*pi/180));
  Line(x0, y0, x1, y1);

  x2 := round(x1 + b * cos((Ugol-270)*pi/180));
  y2 := round(y1 + b * sin((Ugol-270)*pi/180));
  Line(x1, y1, x2, y2);

  x3 := round(x0 + b * cos((Ugol-270)*pi/180));
  y3 := round(y0 + b * sin((Ugol-270)*pi/180));
  Line(x0, y0, x3, y3);

  Line(x2, y2, x3, y3);

end;

var GraphDriver, GraphMode,
   i : integer;
   x0, y0 : integer;
   Ang : integer;
begin
  GraphDriver := detect;
  InitGraph(GraphDriver, GraphMode, '..\BGI');
  x0 := 250;
  y0 := 200;
  setcolor(15);
  Ang := 0;

  repeat
    DrawRectRotate(x0, y0, 100, 50, Ang, 15);
    MyDelay(5);
    {сотрём - просто выведем фигуру цветом 0}
    DrawRectRotate(x0, y0, 100, 50, Ang, 0);
    Ang := Ang + 2;
  until KeyPressed;
  CloseGraph;
end.

Последний раз редактировалось _-Re@l-_; 29.04.2011 в 18:58.
_-Re@l-_ вне форума Ответить с цитированием
Старый 02.05.2011, 20:27   #3
SuGarIm
Новичок
Джуниор
 
Регистрация: 29.04.2011
Сообщений: 2
По умолчанию

Спасибо большое, попробовала, тока че-то он не так вращает, и стороны увеличивает, мож я че-нид не то делаю???вот то что я накалякала, пожалуйста, посмотрите, что исправить????
void __fastcall TForm1::FormPaint(TObject *Sender)
{ q=3.14;
int a=100;int b=50;
for (int i=0;i<300;i=i+2)
{ Canvas->Pen->Color=clYellow;
Canvas->MoveTo(x+a*cos(i*q/180),y+a*sin(i*q/180)); //int i=0;
Canvas->LineTo(x+a*cos(i*q/180),y+50+a*sin(i*q/180));
Canvas->LineTo(x+100+b*cos((i-270)*q/180),y+50+b*sin((i-270)*q/180));
Canvas->LineTo(x+100+b*cos((i-270)*q/180),y+b*sin((i-270)*q/180));
Canvas->LineTo(x+a*cos((i)*q/180),y+sin((i)*q/180)*a);

Sleep(150);

Canvas->Pen->Color=clBtnFace;
Canvas->MoveTo(x+a*cos(i*q/180),y+a*sin(i*q/180)); //int i=0;
Canvas->LineTo(x+a*cos(i*q/180),y+50+a*sin(i*q/180));
Canvas->LineTo(x+100+b*cos((i-270)*q/180),y+50+b*sin((i-270)*q/180));
Canvas->LineTo(x+100+b*cos((i-270)*q/180),y+b*sin((i-270)*q/180));
Canvas->LineTo(x+a*cos((i)*q/180),y+sin((i)*q/180)*a);
}

}
SuGarIm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисование прямоугольника в С# vedro-compota C# (си шарп) 4 19.12.2010 10:19
Вращение прямоугольника.QBASIC wepp Помощь студентам 6 18.05.2010 15:54
Вращение прямоугольника Ponaroshku Паскаль, Turbo Pascal, PascalABC.NET 11 03.11.2009 09:22
Вращение прямоугольника Ponaroshku Общие вопросы Delphi 0 25.05.2009 23:09
Стороны прямоугольника Caragius Microsoft Office Excel 8 27.12.2008 03:02