Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 14

Поворот изображения на форме

21.07.2009, 10:41. Показов 3543. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые программисты , у меня возникла проблема поворота изображения на заданый угол , дело в том что в принцепе теоретически понятно как делать , в консоли сделал вот код:
C++
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include<conio.h>
#include<stdio.h>
#include <windows.h>
 
class PGF{
double a[4][2], n, ax, ay, axn,ayn,axn1,axn2,ayn1,ayn2, cx, cy,  i;
double r;
int nf;
public:
void Vibor();
void Vvod();
void Perem();
void Izm_raz();
void Vrash();
void Vivod();
};
void main()
{ PGF a;
clrscr();
a.Vibor();
a.Vvod();
a.Vivod();
a.Perem();
a.Vivod();
a.Izm_raz();
a.Vivod();
a.Vrash();
a.Vivod();
}
//выбор фигуры
void PGF::Vibor()
{
cout<<endl;
 
cout<<"Выберите фигуру: круг-1, квадрат-2, прямоугольник-3";
cout<<endl;
cin>>nf;
}
//создание
void PGF::Vvod()
{
if (nf==1)
{ cout<<endl;cout<<"Введите параметры круга \n";
cout<<" cx=";cin>>cx;cout<<" cy=";cin>>cy;cout<<" r=";cin>>r;
cout<<endl;
}
if (nf==2)
{
cout<<endl;cout<<"Введите параметры квадрата ";cout<<endl;
cout<<"Координаты центра:\n cx=";cin>>cx;
cout<<" cy=";cin>>cy;
cout<<"Вектор от центра до вершины:\n";
cout<<" ax=";cin>>ax;cout<<" ay=";cin>>ay;
}
if (nf==3)
{
cout<<endl;cout<<"Введите параметры прямоугольника";cout<<endl;
cout<<"Координаты центра:\n cx=";cin>>cx;
cout<<" cy=";cin>>cy;
cout<<"Вектор от центра до вершины:\n";
cout<<" ax=";cin>>ax;cout<<" ay=";cin>>ay;
}
}
//вывод
void PGF::Vivod()
{
cout<<"Параметры фигуры";
cout<<endl;
if (nf==1)
{cout<<endl;cout<<"cx="<<cx<<" cy="<<cy<<" r="<<r;
cout<<endl;
}
if (nf==2)
{
cout<<endl;
cout<<"cx="<<cx<<" cy="<<cy<<" ax="<<ax<<" ay="<<ay;
cout<<endl;cout<<endl;
}
if (nf==3)
{
cout<<endl;
cout<<"cx="<<cx<<" cy="<<cy<<" ax="<<ax<<" ay="<<ay;
cout<<endl;
}
}
//перемещение на плоскости
void PGF::Perem()
{ int sx,sy;
cout<<"Введите координаты смещения фигуры ";
cout <<endl;
cout<<"Смещение по X= ";cin>>sx;
cout<<"Смещение по Y= ";cin>>sy;
cx=cx+sx;cy=cy+sy;
ax=ax+sx;ay=ay+sy;
}
//изменение размеров
void PGF::Izm_raz()
{
double s,Ax,Ay,Bx,By,Cx,Cy,k,d,AB,BC;
if (nf==1)
{
cout<<"Коэффициент изменения радиуса круга= ";
cout<<endl;
cin>>k;
r=r*k;
}
if (nf==2)
{
cout<<"Коэффициент изменения расстояния до вершины квадрата= ";
cout<<endl;
cin>>k;
ax=ax-cx;
ay=ay-cy;
ax=ax*k;
ay=ay*k;
ax=ax+cx;
ay=ay+cy;
}
if (nf==3)
{
cout<<"Коэффициент изменения расстояния до вершины прямоугольника= ";
cout<<endl;
cin>>k;
ax=ax-cx;
ay=ay-cy;
ax=ax*k;
ay=ay*k;
ax=ax+cx;
ay=ay+cy;
}
}
void PGF::Vrash()
{ double f,co,si;
cout<<"Угол поворота фигуры ";
cin>>f;
f=f*M_PI/180;
if(nf==2 || nf==3)
{
ax=ax-cx;
ay=ay-cy;
co=cos(f);
si=sin(f);
axn1=ax*co;
axn2=ay*si;
axn=axn1-axn2;
ayn1=ax*si;
ayn2=ay*co;
ayn=ayn1+ayn2;
ax=axn+cx;
ay=ayn+cy;
}
 
}
а на форму удалось только нанести изображения и систему координат вот код:
C++
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
#include <vcl.h>
#pragma hdrstop
 #include <math.h>
 
#include "Unitpractica.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
float pi = 3.14159265358979323846;
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::RadioButton4Click(TObject *Sender)
{
 Image1->Canvas->Ellipse(220, 220, 300, 300);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton3Click(TObject *Sender)
{
    Image1->Canvas->MoveTo(300, 200);
    Image1->Canvas->LineTo(300, 300);
    Image1->Canvas->LineTo(400, 200);
    Image1->Canvas->LineTo(300, 200);
                
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton2Click(TObject *Sender)
{
Image1->Canvas->Rectangle(210, 220, 310, 300);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton1Click(TObject *Sender)
{
Image1->Canvas->MoveTo(250,290);
 Image1->Canvas->LineTo(390, 280);
        
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
       Image1->Canvas->MoveTo(200, 100);
 Image1->Canvas->TextOutA(193, 130,"Y");
    Image1->Canvas->LineTo(200,410 );
    Image1->Canvas->TextOutA(195,400,"0" );
     Image1->Canvas->LineTo(400, 400);
   Image1->Canvas->TextOutA(400, 400,"X");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton1Exit(TObject *Sender)
{
Image1->Picture=NULL;
Image1->Canvas->MoveTo(200, 100);
 Image1->Canvas->TextOutA(193, 130,"Y");
    Image1->Canvas->LineTo(200,410 );
    Image1->Canvas->TextOutA(195,400,"0" );
     Image1->Canvas->LineTo(400, 400);
   Image1->Canvas->TextOutA(400, 400,"X");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton2Exit(TObject *Sender)
{
Image1->Picture=NULL;
Image1->Canvas->MoveTo(200, 100);
 Image1->Canvas->TextOutA(193, 130,"Y");
    Image1->Canvas->LineTo(200,410 );
    Image1->Canvas->TextOutA(195,400,"0" );
     Image1->Canvas->LineTo(400, 400);
   Image1->Canvas->TextOutA(400, 400,"X");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton3Exit(TObject *Sender)
{
Image1->Picture=NULL;
Image1->Canvas->MoveTo(200, 100);
 Image1->Canvas->TextOutA(193, 130,"Y");
    Image1->Canvas->LineTo(200,410 );
    Image1->Canvas->TextOutA(195,400,"0" );
     Image1->Canvas->LineTo(400, 400);
   Image1->Canvas->TextOutA(400, 400,"X");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioButton4Exit(TObject *Sender)
{
Image1->Picture=NULL;
Image1->Canvas->MoveTo(200, 100);
 Image1->Canvas->TextOutA(193, 130,"Y");
    Image1->Canvas->LineTo(200,410 );
    Image1->Canvas->TextOutA(195,400,"0" );
     Image1->Canvas->LineTo(400, 400);
   Image1->Canvas->TextOutA(400, 400,"X");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();        
}
//---------------------------------------------------------------------------
а как сделать чтобы в edit водить нужное значение поворота и при нажатии кнопки поворачивалось изображение пока не понятно , можете помочь как это реализовать , илипомогите переделать код из консоли для формы а то форму тока начал изучать читая книгу Архангельского(по многим советам программистов) и пока освоил тока основу , помогите пожалуйста
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.07.2009, 10:41
Ответы с готовыми решениями:

Поворот изображения
Я знаю, что много раз эта тема уже поднималась и находил старые посты, но так и не смог в них разобраться. Суть задания проста. Нужно,...

Поворот изображения
Доброго всем времени суток. Хотел бы узнать как можно реализовать поворот изображения как в браузере Safari. Заранее благодарен.

Поворот изображения в 3D.
Кто знает как повернуть изображение и Image по 3 координатам?

11
2923 / 844 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
21.07.2009, 10:47
я только начал изучать с++ и у меня вот какой к тебе вопрос, ты рисуешь фигуру да???
0
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 14
21.07.2009, 10:47  [ТС]
вот как выглядит программа
Миниатюры
Поворот изображения на форме  
0
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 14
21.07.2009, 10:50  [ТС]
фигура рисуется при выборе одного из RadioBattona
0
2923 / 844 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
21.07.2009, 10:50
а почему оно у тебя не поворачивает, ты перерисовываешь ее после нажатия на кнопку
0
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 14
21.07.2009, 10:57  [ТС]
вот с перерисовкой проблемы, как перерисовать изображение при нажатии по кнопке на заданый угол (который записываем в edit ) относительно точки 0 . вот у мну в чём проблема, на форме как это реализовать? в консоли разобрался , а вот с формой ... затруднения пока
0
2923 / 844 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
21.07.2009, 11:02
ну а как ты туда выводил то что у тебя там уже нарисовано, наверное надо тем же макаром.

Добавлено через 1 минуту 7 секунд
если у тебя переменной которая отвечает за поворот сразу присвоить угол поворота, то фигура нарисуется уже повернутой
0
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 14
21.07.2009, 11:09  [ТС]
в Image я рисовал фигуры простым заданием точки , и нет у мну переменой отвечающей за поворот фигуры на форме как видно из кода
0
2923 / 844 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
21.07.2009, 11:14
да код сильно длинный, по этому я в него не вникал, ты лучше на словах скажи как ты собираешься поворачивать, то есть как ты будешь искать точки при повороте???
я тебе спрашиваю если сразу задать эти точки , то как поведет себя фигура, она будет повернутая или нет???
0
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 14
21.07.2009, 11:31  [ТС]
таким макаром я поворачивал в консоли , пользуясь знанием из геометрии о повороте фигуры
x = r * cos( α )
y = r * sin( α )
написал вот такое

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{ double f,co,si;
cout<<"Угол поворота фигуры ";
cin>>f;
f=f*M_PI/180;
if(nf==2 || nf==3)
{
ax=ax-cx;
ay=ay-cy;
co=cos(f);
si=sin(f);
axn1=ax*co;
axn2=ay*si;
axn=axn1-axn2;
ayn1=ax*si;
ayn2=ay*co;
ayn=ayn1+ayn2;
ax=axn+cx;
ay=ayn+cy;
Ну как ты прдлагаешь сразу задать точки , то представь ситуацию вдруг захочеться повернуть фигуру сначала на 45 градусов потом на 16 и так до хрен знает скольки , представь какой код получиться если буду задавать сразу эти точки для каждого градуса , по боле чем я написал в консоле
0
2923 / 844 / 324
Регистрация: 30.04.2009
Сообщений: 2,633
21.07.2009, 11:33
да нет я просто хочу узнать если сразу задать то фигура поворачивается или нет????
0
0 / 0 / 0
Регистрация: 02.06.2009
Сообщений: 14
21.07.2009, 12:59  [ТС]
в принцепе если задать цикл на кнопку
примерно так :
C++
1
2
3
4
5
6
7
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (Edit1->Text==90 )
{
   Image1->Canvas->MoveTo(100,100);
 Image1->Canvas->LineTo(200, 400);
}
только проблема с координатами надо подбирать , а так в принцепе можно , но ещё раз говорю описывать для каждого градуса это пепец
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.07.2009, 12:59
Помогаю со студенческими работами здесь

Поворот изображения в Image
Необходимо по нажатию на кнопку поворачивать изображение в Image на 180 градусов. Подскажите как это осуществить в C++ Builder. Вот нашел...

Поворот изображения на 90 градусов!
Как повернуть изображения Image на 90 градусов? Подскажите кому не трудно! За ранее спасибо!

Поворот изображения относительно любой ночки
Есть код, который поворачивает изображение на заданный угол. Поворот происходит относительно центра, помогите пожалуйста переписать так,...

Поворот изображения на определенный угол. (Canvas)
Ребята, помогите пожалуйста дописать функцию поворота изображения на определенный градус. По какой формуле нужно перестраивать пиксели? ...

Поворот изображения вокруг опорной точки
Доброго времени суток остановился на моменте: необходимо развернуть изображение,в winapi есть setworldtransform,но мне она не подходит так...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru