Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
 Аватар для Liori
4 / 4 / 5
Регистрация: 30.08.2012
Сообщений: 155

Нарисовать прямоугольник, который вращается вокруг своего центра (код не работает правильно)

31.05.2015, 22:29. Показов 2602. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мой код не работает правильно. Помогите, как это реализовать?

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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include "math.h"
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int x=0,y=0,Angle=0;
int x1,x2,x3,x4,y1,y2,y3,y4;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::PaintBox1Paint(TObject *Sender)
{
 
Canvas->Brush->Color = clBlue;
x=(200+600+200+600)/4;
y=(200+200+400+400)/4;
Canvas->Rectangle(200,200,600,400);
}
//---------------------------------------------------------------------------
 
 
void TForm1::Rectangle(int Angle)
{
    x1 = (200-x)*cos(Angle) - (200-y)*sin(Angle)+x;
    y1 = (200-x)*sin(Angle) + (200-y)*cos(Angle)+y;
    x2 =  (600-x)*cos(Angle) - (200-y)*sin(Angle)+x;
    y2 =  (600-x)*sin(Angle) + (200-y)*cos(Angle)+y;
    x3 =  (200-x)*cos(Angle) - (400-y)*sin(Angle)+x;
    y3 = (200-x)*sin(Angle) + (400-y)*cos(Angle)+y;
    x4 = (600-x)*cos(Angle) - (400-y)*sin(Angle)+x;
    y4 = (600-x)*sin(Angle) + (400-y)*cos(Angle)+y;
    Canvas->Rectangle(x1,y1,x4,y4);
}
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Angle+=5;
Canvas->Brush->Color=clBlue;
Rectangle(Angle);
 
}
//---------------------------------------------------------------------------
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.05.2015, 22:29
Ответы с готовыми решениями:

Рисунок, Анимация: Нарисовать отрезок который вращается вокруг своего центра
Нарисовать отрезок который вращается вокруг своего центра.

Построить квадрат, который вращается вокруг своего центра на угол a
помогите понять условие задачи а то я не до конца ее понимаю вот задание: Построить квадрат, который вращается вокруг своего центра на...

Получить на экране прямоугольник, который оборачивается в плоскости экрана вокруг своего центра
Получить на экране прямоугольник, который оборачивается в плоскости экрана вокруг своего центра. Скорость движения (частота смены кадров)...

7
place status here
 Аватар для gunslinger
3185 / 2219 / 640
Регистрация: 20.07.2013
Сообщений: 6,000
01.06.2015, 00:58
Лучший ответ Сообщение было отмечено Liori как решение

Решение

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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
  DoubleBuffered = 1;
  Timer1->Interval = 100;
}
//---------------------------------------------------------------------------
void rectangle(TCanvas *canvas, TColor pen_color, TColor brush_color, int x1, int y1, int x2, int y2, double angle)
{
  angle *= M_PI/180;
  canvas->Pen->Color = pen_color;
  canvas->Brush->Color = brush_color;
  int half_difx = abs(x2-x1)/2, half_dify = abs(y2-y1)/2, r = sqrt(half_difx * half_difx + half_dify * half_dify);
  int minx = x1 < x2 ? x1 : x2, miny = y1 < y2 ? y1 : y2;
  TPoint center = TPoint(minx+half_difx, miny+half_dify);
  double angle2 = atan(1.*half_dify / half_difx);
  canvas->MoveTo(center.x - r*cos(angle2 + angle), center.y + r*sin(angle2 + angle));
  canvas->LineTo(center.x + r*cos(angle2 - angle), center.y + r*sin(angle2 - angle));
  canvas->LineTo(center.x + r*cos(angle2 + angle), center.y - r*sin(angle2 + angle));
  canvas->LineTo(center.x - r*cos(angle2 - angle), center.y - r*sin(angle2 - angle));
  canvas->LineTo(center.x - r*cos(angle2 + angle), center.y + r*sin(angle2 + angle));
  canvas->FloodFill(center.x, center.y, canvas->Pixels[center.x][center.y], fsSurface);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  Refresh();
  static double angle = 0;
  rectangle(Canvas, clBlack, clBlue, 100, 300, 400, 100, angle++);
}
//---------------------------------------------------------------------------
Миниатюры
Нарисовать прямоугольник, который вращается вокруг своего центра (код не работает правильно)  
1
01.06.2015, 11:09

Не по теме:

Призываю в тему BumerangSP. У него может остаться алгоритм как раз вот такого вращения.

0
 Аватар для Liori
4 / 4 / 5
Регистрация: 30.08.2012
Сообщений: 155
01.06.2015, 11:45  [ТС]
gunslinger, спасибо огромное! Может подскажите еще, как сделать так, чтобы прямоугольник не мигал при вращении?
0
01.06.2015, 11:56

Не по теме:

Цитата Сообщение от SatanaXIII Посмотреть сообщение
Призываю в тему BumerangSP.
Обычно другие сатану вызывают, а не он их :D

0
 Аватар для BumerangSP
4311 / 1423 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
01.06.2015, 12:43
SatanaXIII, хых, нету у меня Я использовал OpenGL, там есть уже такая готовая штука как glRotatef(...). Да и ответ в теме уже дан.
0
place status here
 Аватар для gunslinger
3185 / 2219 / 640
Регистрация: 20.07.2013
Сообщений: 6,000
01.06.2015, 19:31
Liori, так как двойная буферизация уже включена, то попробуй (в данной реализации) увеличить интервал таймера (заодно, как следствие, и [пропорционально] приращение угла вращения).
0
02.06.2015, 23:45

Не по теме:

Цитата Сообщение от _Dimon_ Посмотреть сообщение
Обычно другие
Фиг его вызовешь, он приходит, когда заблагорассудится. :)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.06.2015, 23:45
Помогаю со студенческими работами здесь

Анимация: правильный треугольник с медианами вращается вокруг своего центра
вывести анимацию &quot;правильный треугольник с медианами вращается вокруг своего центра&quot;

Блок схема (прямоугольник вращающийся вокруг своего центра)
Помогите нарисовать алгоритм uses Graph,Crt; type TPoints=array of integer; const nSteps=32; rx=50; ry=30; ...

Графика.Построить прямоугольник, который вращается вокруг своей вершины
Построить прямоугольник, который вращается в плоскости экрана вокруг одной из своих вершин. Помогите пожалуйста, никак не...

Изобразить на экране прямоугольник, вращающийся в плоскости экрана вокруг своего центра
Помогите плиз, срочно нужно сделать задачку.:) Изобразить на экране прямоугольник, вращающийся в плоскости экрана вокруг своего центра....

Изобразить на экране прямоугольник, вращающийся в плоскости экрана вокруг своего центра
Здравствуйте. Помогите решить задачу. Изобразить на экране прямоугольник, вращающийся в плоскости экрана вокруг своего центра. Центр...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru