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

Движение тела по окружности

02.06.2015, 22:59. Показов 2787. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста реализовать данную программу на с++ Builder. Нарисовать квадрат, который в каждый момент своего движения касается одной из сторон в круг с центром в центре экрана.
Никак не могу найти формулу по которой должен двигаться квадрат.
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include "math.h"
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int radius = 40;
int posX = 650;
int posY= 350;
int x1 = 640;
int y1 = 290;
int x2 = 660;
int y2 = 310;
int a = 0;
int A = 20;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
 Refresh();
 a = a+1;
x1 = x1 + (20+40*cos(a/180));
x2 = x2 + (20+40*cos(a/180));
y1 = y1 + (20+40*sin(a/180));
y2 = y2 + (20+40*sin(a/180));
 
 
Canvas->Ellipse(TRect(posX-radius, posY-radius, posX+radius, posY+radius));
Form1->Canvas->Rectangle(x1, y1, x2, y2);
}
 
//---------------------------------------------------------------------------
 
void __fastcall TForm1::PaintBox1Click(TObject *Sender)
{
 
Canvas->Ellipse(TRect(posX-radius, posY-radius, posX+radius, posY+radius));
 
Form1->Canvas->Rectangle(x1, y1, x2, y2);
 
}
//---------------------------------------------------------------------------
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.06.2015, 22:59
Ответы с готовыми решениями:

Движение прямоугольника по касательной вокруг окружности
Помогите переделать код, чтобы получилось то, что требуется по условию? Никак не могу сделать до конца :( ...

Движение тела по окружности в пространстве(вычисление координат тела)
Здравствуйте, меня интересует такой вопрос: можно ли математически смоделировать движение тел по окружности в пространстве так, чтобы их...

Движение тела по окружности
Вечер добрый. Задача: Определите, какого радиуса круг может описать велосипедист если он едет со скоростью 25 км/час, а предельный...

4
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
03.06.2015, 00:28
И как квадрат движется? Касается круга одной постоянной точкой (например, серединой стороны) или "перекатывается" по нему (передвигается "кантованием")?
0
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
03.06.2015, 01:00
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
//---------------------------------------------------------------------------
#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, TPoint center, int width, int height, double angle)
{
  angle *= M_PI/180;
  canvas->Pen->Color = pen_color;
  canvas->Brush->Color = brush_color;
  int r = sqrt(width * width / 4 + height * height / 4);
  double angle2 = atan(1.*height / width);
  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 = 1;
  double angle2, x = ClientWidth/2, y = ClientHeight/2, radius = 25, period = 10, size = 150;
  Canvas->Brush->Color = clRed;
  Canvas->Ellipse(x - radius, y - radius, x + radius, y + radius);
  angle--;
  angle2 = angle * M_PI / 180;
  rectangle(Canvas, clBlack, clBlue, TPoint(x-(radius+size/2)*cos(angle2*period), y+(radius+size/2)*sin(angle2*period)), size, size, angle*period);
}
Миниатюры
Движение тела по окружности  
0
0 / 0 / 0
Регистрация: 11.01.2017
Сообщений: 1
11.01.2017, 20:23
подскажите, как вместо квадрата поставить точку
0
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
12.01.2017, 09:44
В функции rectangle "прописан" квадрат. Замени там код на рисование точки.
Либо смотри C++ Builder - Orbita
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.01.2017, 09:44
Помогаю со студенческими работами здесь

Движение тела по окружности
Здравствуйте. Задача такая : машина массой m=2т движется со скоростью v=54км/ч по выпуклому мосту, радиус кривизны которого R=100м. С какой...

Движение тела по окружности
движение тела по окружности, пожалуйста, очень нужно

Постройте две окружности, имитируя движение одной окружности по другой
Постройте на экране компьютера две окружности радиусов R1, R2 разных цветов, имитируя движение одной окружности по другой.

Вращение тела по окружности
Подскажите, пожалуйста, как можно в 3d max сделать анимацию вращения сферы по окружности? так чтобы сфера была равноудалена во всех точках...

Движение тела
Помогите кодом на счет движения тела, даижения прямой сам уже сделал по таймеру!


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru