Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
Jensen
0 / 0 / 0
Регистрация: 24.09.2013
Сообщений: 35
1

Повернуть фигуры на 30 градусов

14.03.2016, 17:06. Просмотров 1373. Ответов 12
Метки нет (Все метки)

Всем доброго времени суток, помогите пожалуйста разобраться. Как повернуть треугольник, квадрат на 30 градусов. Вот сам код:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
Procedure TForm1.Button1Click(Sender: TObject); 
var 
pol: array[0..2] of TPoint; 
begin 
pol[0].x:= 10; 
pol[0].y:= 20; 
pol[1].x:= 70;
pol[1].y:= 20;
pol[2].x:= 70;
pol[2].y:= 70;
 
with Image1.Canvas do
begin
Brush.Style:= bsClear;
Pen.Color:= clRed;
Polygon(pol);
end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
with Image1.Canvas do
begin
Brush.Style:= bsClear;
Pen.Color:= clGreen;
Rectangle(200, 200, 250, 250);
end;
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
with Image1.Canvas do
begin
Brush.Style:= bsClear;
Pen.Color:= clBlue;
Ellipse(170, 170, 100, 100);
end;
end;
 
procedure TForm1.Button4Click(Sender: TObject);
var
x,y,z: uint;
cnv: TBitmap;
begin
cnv:= TBitmap.Create;
cnv.Assign(Image1.Picture.Bitmap);
for X:=0 to image1.picture.width-2 do
for Y:=0 to image1.picture.Height-2 do
begin
z:= image1.Canvas.Pixels[x,y];
cnv.Canvas.Pixels[y,x]:= z;
end;
Image1.Picture.Bitmap.Assign(cnv);
cnv.Free;
end;
end.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2016, 17:06
Ответы с готовыми решениями:

Графика, повернуть рисунок на 90 градусов
Привет всем.Есть код узора,помогите пожалуйста этот узор повернуть на 90...

Повернуть заголовок StringGrid на 90 градусов
Подскажите, как можно одновременно сделать заголовок повернутым на 90 градусов...

Повернуть матрицу на 90 градусов по часовой стрелке.
Сформировать матрицу 7х7 элементов, заполненную рандомно. Вывести ее на экран,...

Вывести текст на канву вертикально (повернуть на 90 градусов)
Я рисую на канве в delphi, мне необходимо вывести текст вертикально (повернуть...

Повернуть на 90 градусов
Мне нужно, чтоб записи таблицы отображались справа от полей, а не как это...

12
Puporev
Модератор
55478 / 42579 / 29428
Регистрация: 18.05.2008
Сообщений: 100,728
14.03.2016, 17:47 2
Цитата Сообщение от Jensen Посмотреть сообщение
Как повернуть треугольник, квадрат на 30 градусов
Вокруг чего повернуть?
0
Jensen
0 / 0 / 0
Регистрация: 24.09.2013
Сообщений: 35
14.03.2016, 17:54  [ТС] 3
Просто чтоб сама фигура поворачивалась при нажати на кнопку
0
mss
2634 / 2258 / 276
Регистрация: 24.12.2010
Сообщений: 13,725
14.03.2016, 18:44 4
Цитата Сообщение от Jensen Посмотреть сообщение
Просто чтоб сама фигура поворачивалась
вокруг Луны ?
вокруг табуретки ?
0
Puporev
14.03.2016, 18:45
  #5

Не по теме:

К лесу задом, к ТС передом...

0
ROS88
128 / 128 / 98
Регистрация: 10.03.2015
Сообщений: 542
14.03.2016, 19:02 6
Посмотри следующий материал:
Удалена ссылка на ресурс, не отвечающий правилам форума.
Матрица поворота. Вращения точки (объекта) на плоскости.
0
Jensen
0 / 0 / 0
Регистрация: 24.09.2013
Сообщений: 35
14.03.2016, 19:02  [ТС] 7
Как в примере она поворачивается на 45 градусов. Точно так же только на 30
0
mss
2634 / 2258 / 276
Регистрация: 24.12.2010
Сообщений: 13,725
14.03.2016, 19:06 8
Цитата Сообщение от Jensen Посмотреть сообщение
Как в примере она поворачивается
А пример для кого дан, для Пушкина ?
0
ROS88
128 / 128 / 98
Регистрация: 10.03.2015
Сообщений: 542
14.03.2016, 19:09 9
Цитата Сообщение от Jensen Посмотреть сообщение
Как в примере
Не совсем понятно о каком пример идет речь. Если о примере, который содержится по выше сказанной ссылке, то там осуществляется поворот прямоугольника на угол 30 градусов!!!
0
Jensen
0 / 0 / 0
Регистрация: 24.09.2013
Сообщений: 35
14.03.2016, 21:39  [ТС] 10
Ошибся, на 45 градусов надо повернуть
0
Puporev
Модератор
55478 / 42579 / 29428
Регистрация: 18.05.2008
Сообщений: 100,728
15.03.2016, 09:25 11
Цитата Сообщение от Jensen Посмотреть сообщение
Как в примере она поворачивается на 45 градусов. Точно так же только на 30
Так в примере поворот вокруг заданный точки. А у тебя? Ну если совсем плохой, то не отвечай.
0
CheshireesCat
86 / 82 / 43
Регистрация: 02.05.2015
Сообщений: 761
15.03.2016, 23:11 12
Полагаю ТС'у надо вращать вокруг центра фигуры..
0
NIKOLAYY
820 / 718 / 339
Регистрация: 22.09.2012
Сообщений: 4,995
15.03.2016, 23:27 13
Самый простой код что успел накидать:
Фигура типа треугольника, на создание фигуры указываем поворот ее!
На кнопки это простое движение.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Math, Buttons;
 
type
  TForm1 = class(TForm)
    Image1: TImage;
    procedure FormCreate(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    procedure POVOROT_FIGURI;
    { Public declarations }
  end;
 
const
  Widline = 3; //толщина линий фигуры
  R = 60; //радиус фигуры
var
  Form1: TForm1;
 
  X1, Y1: Extended; //первая точка на окружности
  X2, Y2: Extended; //вторая точка на окружности
  X3, Y3: Extended; //третья точка на окружности
 
  //запоминаем координаты, чтоб потом стереть линии
  SX1, SY1: Extended;
  SX2, SY2: Extended;
  SX3, SY3: Extended;
 
  nx, ny: Integer; //начальные точки центра окружности по X и Y
 
  angle1, angle2, angle3: Integer; //угол
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  angle1 := 70; //угол-1, 90
  nx := 150; //начальная точка по x-координате
  ny := 100; //начальная точка по y-координате
  
  POVOROT_FIGURI; //нарисуем сразу
end;
 
procedure TForm1.POVOROT_FIGURI;
begin
  Image1.Canvas.Pen.Width := Widline; //толщина линий
 
  //заливка
    with Image1.Canvas do
  begin
    Brush.Color := clWhite;
    FillRect(Rect(0, 0, ClipRect.Right, ClipRect.Bottom));
  end;
  Image1.Canvas.Pen.Color:= clBlue;
 
  //остальные корректируются от него уже
  X1 := nx + R * cos(DegToRad(angle1));
  Y1 := ny - R * sin(DegToRad(angle1));
  Image1.Canvas.MoveTo(nx, ny); //начальные координаты линии, центр имаги
  Image1.Canvas.LineTo(Round(X1), Round(Y1)); //конечные координаты линии
 
  angle2 := angle1 + 130; //угол-2, 220
  X2 := nx + R * cos(DegToRad(angle2));
  Y2 := ny - R * sin(DegToRad(angle2));
  Image1.Canvas.MoveTo(nx, ny); //начальные координаты линии, центр имаги
  Image1.Canvas.LineTo(Round(X2), Round(Y2)); //конечные координаты линии
 
  angle3 := angle1 + 230; //угол-3, 320
  X3 := nx + R * cos(DegToRad(angle3));
  Y3 := ny - R * sin(DegToRad(angle3));
  Image1.Canvas.MoveTo(nx, ny); //начальные координаты линии, центр имаги
  Image1.Canvas.LineTo(Round(X3), Round(Y3)); //конечные координаты линии
 
  //соединение точек на окружности в линиии, первая линия
  Image1.Canvas.MoveTo(Round(X1), Round(Y1));
  //начальные координаты линии, центр имаги
  Image1.Canvas.LineTo(Round(X2), Round(Y2)); //конечные координаты линии
 
  //вторая линия
  Image1.Canvas.MoveTo(Round(X1), Round(Y1));
  //начальные координаты линии, центр имаги
  Image1.Canvas.LineTo(Round(X3), Round(Y3)); //конечные координаты линии
 
end;
 
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    37:
      begin
        nx:= nx - 10;
        POVOROT_FIGURI;
      end;
 
    39:
      begin
        nx:= nx + 10;
        POVOROT_FIGURI;
      end;
 
      40:
      begin
        ny:= ny + 10;
        POVOROT_FIGURI;
      end;
 
      38:
      begin
        ny:= ny - 10;
        POVOROT_FIGURI;
      end;
 
      90: //Z
     begin
        POVOROT_FIGURI;
        Inc(angle1, 10); //поворот влево
      end;
 
     88: //X
     begin
        Dec(angle1, 10); //поворот вправо
        POVOROT_FIGURI;
      end;
  end;
end;
 
end.
0
15.03.2016, 23:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2016, 23:27

Повернуть фигуру на 90 градусов
у меня есть фигуры, заданные двумерными булевыми массивами по типу такого: var...

Повернуть шрифт на 90 градусов
подскажите, есть ли возможность повернуть на 90 градусов текст, поверх...

TextView повернуть на 90 градусов
есть textView его нужно повернуть на 90 градусов поворачиваю ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru