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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2012, 22:32   #1
stas45rus
Пользователь
 
Регистрация: 26.08.2011
Сообщений: 46
По умолчанию Поворот фигуры Pascal

помогите пжл повернуть квадрат на 45 градусов в любую сторону относительно своего центра расположения.
Код:
PROGRAM Zadanie_4b;
Uses Crt,Graph;
VAR
  gd,gm,n,m:Integer;
  Mas:Array[1..5] Of PointType;
BEGIN
  ClrScr;
  gd:=Detect;
  InitGraph(gd,gm,'');
  Mas[1].x:=200; Mas[1].y:=200;
  Mas[2].x:=500; Mas[2].y:=200;
  Mas[3].x:=500; Mas[3].y:=500;
  Mas[4].x:=200; Mas[4].y:=500;
  Mas[5]:=Mas[1];
  SetColor(4);
  {Построение многоугольника}
  DrawPoly(5,Mas);
  {Стиль заполнения}
  SetFillStyle(1,4);
  FloodFill(250,250,4);
  ??????????????????????
  Readln;
  CloseGraph;
END.
stas45rus вне форума Ответить с цитированием
Старый 12.05.2012, 22:37   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

http://www.bymath.net/studyguide/angeo/sec/angeo1.htm
Имхо, лучше хранить квадрат по-другому:
точка - центр координат;
"радиус" - расстояние до вершины;
угол - угол между горизонталью и "радиусом".
Тогда памяти нужно меньше и поворачивать удобнее, но сложнее логика отрисовки.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 12.05.2012, 22:53   #3
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Нужно для начала вывести формулу для расчёта координатов 4 точек квадрата в которой будет задействован угол.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 12.05.2012, 22:58   #4
stas45rus
Пользователь
 
Регистрация: 26.08.2011
Сообщений: 46
По умолчанию

не могу понять.
stas45rus вне форума Ответить с цитированием
Старый 12.05.2012, 23:04   #5
stas45rus
Пользователь
 
Регистрация: 26.08.2011
Сообщений: 46
По умолчанию

ну хотя бы примерные формулы дайте
stas45rus вне форума Ответить с цитированием
Старый 12.05.2012, 23:08   #6
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

А что, геометрию еще не проходили?
Ты в каком классе?
s-andriano вне форума Ответить с цитированием
Старый 12.05.2012, 23:09   #7
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

советую ТС почитать книги о 2д играх!
Там описывают метод поворота фигур, путём использования матриц! причём операций над матрицами можно не только повернуть, но и масштабировать и перемещать фигуру по координатной плоскости!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 12.05.2012, 23:12   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Простенький пример (код для дельфи, но суть будет понятна):
Код:
var
a, b: array[1..4, 1..2] of integer;
i, j, r: integer;
begin
r := 400;
a[1, 1] := 100;
a[1, 2] := 50;
a[2, 1] := a[1, 1] + r;
a[2, 2] := a[1, 2];
a[3, 1] := a[2, 1];
a[3, 2] := a[2, 2] + r;
a[4, 1] := a[1, 1];
a[4, 2] := a[3, 2];
for i := 1 to 1000 do
begin
canvas.Pen.Color:=i*25;
canvas.moveto(a[4, 1], a[4, 2]);
for j := 1 to 4 do
canvas.lineto(a[j, 1], a[j, 2]);
for j := 1 to 4 do
begin
b[j, 1] := round(a[j, 1] + (a[j mod 4 + 1, 1] - a[j, 1]) * 0.9);
b[j, 2] := round(a[j, 2] + (a[j mod 4 + 1, 2] - a[j, 2]) * 0.9);
end;
a := b;
end;
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 13.05.2012, 00:03   #9
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

как уже было сказано используйте матрицы трансформации
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 13.05.2012, 12:28   #10
denisbrain
Форумчанин
 
Регистрация: 29.05.2011
Сообщений: 449
По умолчанию

Цитата:
Сообщение от stas45rus Посмотреть сообщение
помогите пжл повернуть квадрат на 45 градусов в любую сторону относительно своего центра расположения.
Код:
PROGRAM Zadanie_4b;
Uses Crt,Graph;
VAR
  gd,gm,n,m:Integer;
  Mas:Array[1..5] Of PointType;
BEGIN
  ClrScr;
  gd:=Detect;
  InitGraph(gd,gm,'');
  Mas[1].x:=200; Mas[1].y:=200;
  Mas[2].x:=500; Mas[2].y:=200;
  Mas[3].x:=500; Mas[3].y:=500;
  Mas[4].x:=200; Mas[4].y:=500;
  Mas[5]:=Mas[1];
  SetColor(4);
  {Построение многоугольника}
  DrawPoly(5,Mas);
  {Стиль заполнения}
  SetFillStyle(1,4);
  FloodFill(250,250,4);
  ??????????????????????
  Readln;
  CloseGraph;
END.


Код:
Procedure Povorot(var Val:TMyObject;cx,cy:integer;a:integer);
var i:integer;n:integer;
    d1:real; // расстояние от точки cx,cy до точки объекта
    a1:real; // текущий угол наклона
    x1,y1:integer; // новый угол поворота
begin
  n:=val.n;

     d1:=Dlina(point(val.cx,val.cy),point(cx,cy));
     a1:=Ugol(point(val.cx,val.cy),point(cx,cy));
// перетаскиваем центр тяжести объекта
     val.cx:=cx+round(d1*cos(a1+a*pi/180));
     val.cy:=cy+round(d1*sin(a1+a*pi/180));

  for I:=0 to n-1 do begin
     d1:=Dlina(point(val.m[i].x,val.m[i].y),point(cx,cy));
     a1:=Ugol(point(val.m[i].x,val.m[i].y),point(cx,cy));
     x1:=cx+Round(d1*cos(a1+a*pi/180));
     y1:=cy+Round(d1*sin(a1+a*pi/180));
     val.m[i].X:=x1;
     val.m[i].y:=y1;
  end;
     val.m[n].X:=val.m[0].X;
     val.m[n].y:=val.m[0].y;
end;
http://netsoftware.ucoz.ru/load/pros...delphi/1-1-0-7
задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype
denisbrain вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поворот фигуры firefox0013 Общие вопросы C/C++ 3 30.11.2011 18:36
Движение одной фигуры,вслед изменения высоты другой фигуры. 7vlad37 Microsoft Office Excel 3 21.07.2011 18:01
поворот изображения на форме (либо поворот файла с картинкой) mystiql Microsoft Office Access 2 21.06.2011 22:03
площадь фигуры ограниченной эллипсом Pascal lirikoff Помощь студентам 0 20.05.2011 21:24
Работа с изображением.Поворот.Поиск фигуры. Sheril Общие вопросы по Java, Java SE, Kotlin 0 30.04.2011 12:02