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

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

21.07.2009, 10:41. Показов 3496. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru