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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2011, 16:12   #1
Николая Ленин
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 39
По умолчанию Поворот полигона

Здравствуйте, у меня есть полигон, построенный по точкам из мемо. Как мне осуществить его поворот на какой-то угол? Заранее спасибо!
Николая Ленин вне форума Ответить с цитированием
Старый 01.06.2011, 16:21   #2
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Поворачивайте координаты всех углов по отдельности относительно центра(центр - на вашей совести), и получите повёрнутый полигон.
_-Re@l-_ вне форума Ответить с цитированием
Старый 01.06.2011, 16:26   #3
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

http://programmersforum.ru/showthread.php?t=154236
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 01.06.2011, 16:42   #4
Николая Ленин
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 39
По умолчанию

Swarog, а если у нас заранее не известно, сколько и где будут точки в полигона? как тот твой код подогнать под задачу?
Николая Ленин вне форума Ответить с цитированием
Старый 01.06.2011, 17:09   #5
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Math;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Button1Click(Sender: TObject);
  private
   PolyArr: array of tpoint;
   Center: Tpoint;
   procedure Draw();
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Draw;
begin
 Canvas.Rectangle(0,0,Width,Height);
 canvas.Polygon(PolyArr);

end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
 i: integer;
begin
 if button = mbLeft then
  begin
   i := length(PolyArr);
   SetLength (PolyArr,i + 1);
   PolyArr[i].X := x;
   PolyArr[i].Y := y;
  end
 else
  begin
   Center.X := x;
   Center.Y := y;
  end;
 Draw;
end;

procedure TForm1.Button1Click(Sender: TObject);

procedure Rotate(var d,center: Tpoint; Fi: real);
 var tx: real;
 begin
  // сначала перенос
  d.x := d.x - center.x;
  d.y := d.y - center.y;
  // поворот
  tx := d.x;
  d.x := round(tx * cos(fi) +  d.y * sin(fi));
  d.y := round(-tx * sin(fi) + d.y * cos(fi));
  // перенос обратно на место
  d.x := d.x + center.x;
  d.y := d.y + center.y;
 end;
var f: real;
  var I: integer;
begin
 f := 5;
 f := DegToRad(f);
 for i := 0 to length(PolyArr) - 1 do Rotate(polyarr[i],center,f);
 Draw;
end;

end.
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 01.06.2011, 22:16   #6
Николая Ленин
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 39
По умолчанию

Что делает этот код? Что он вообще крутит? Прямоугольник неподвижный, который рисуется
Николая Ленин вне форума Ответить с цитированием
Старый 02.06.2011, 07:09   #7
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

при щелчке левой клавишей маши по форме добавляется точка в полигон, при щелчке правой кнопкой мыши по форма определяется центр поворота, на форме еще есть кнопка при нажатии на кнопку осуществляется поворот полигона вокруг определенного центра на угол 5градусов. проект рабочий вчера игрался с ним
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 02.06.2011, 13:32   #8
Николая Ленин
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 39
По умолчанию

Swarog, Разобрался! Большое спасибо!
Не подскажешь ещё, как копировать тот полигон, который нарисовали?
Николая Ленин вне форума Ответить с цитированием
Старый 02.06.2011, 15:56   #9
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

Если я вас правильно понял то создаем новый массив точек и копируем точки
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 02.06.2011, 23:05   #10
Николая Ленин
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 39
По умолчанию

Сделать так, чтобы в каком-то другом месте появился такой же полигон и тот не исчез
Николая Ленин вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поворот изображения на форме (либо поворот файла с картинкой) mystiql Microsoft Office Access 2 21.06.2011 22:03
Поворот эллипса. Kingdom_Reborn Помощь студентам 1 21.10.2010 15:54
площадь полигона boomeer Помощь студентам 5 17.10.2010 14:17
СИ поворот belii0987 Помощь студентам 2 23.06.2010 10:22
Рисование затекстурированного полигона в OpenGL. Вадим Буренков Мультимедиа в Delphi 2 17.08.2009 16:22