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

Рисование пятиконечной звезды - C++ Builder

19.07.2015, 15:59. Показов 8569. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Нужно написать программу,в диалоговом окне которой, в точке щелчка кнопкой мыши,вычерчивается контур пятиконечной звезды. У звезды должна быть возможность изменения двух радиусов,кол-ва вершин,цвета закраски и контура.

Никогда не сталкивался с рисованием в билдере,поэтому буду благодарен за любую помощь.
Миниатюры
Рисование пятиконечной звезды - C++ Builder  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.07.2015, 15:59
Ответы с готовыми решениями:

Рисование в Borland Builder C++ .
Вот в паскале всё просто - InitGraph() и потом что хошь то и делай. Как рисовать простоые вещи(2х мерные, просто линии и точки) в Borland...

Рисование простеньких рисунков в C++ Builder
нужен рабочий код рисунка(любого простого) на C++ Builder, т.е. чтобы он работал...я новичок в программировании, т.к. только недавно начали...

C++ Builder XE 10 multi-device project рисование
Внимание среда разработки XE 10. Собственно в чем вопрос, как и что делать мне понятно, вот есть хорошая на мой взгляд статья ...

5
Модератор
 Аватар для D1973
9923 / 6459 / 2457
Регистрация: 21.01.2014
Сообщений: 27,409
Записей в блоге: 3
19.07.2015, 16:03
Начни с этого
1
0 / 0 / 0
Регистрация: 19.07.2015
Сообщений: 3
19.07.2015, 18:19  [ТС]
Разобрался,как рисовать звезду. А как сделать так,чтобы ее центр находился в месте щелчка мыши? И чтобы она рисовалась по этому щелчку?
0
Модератор
 Аватар для D1973
9923 / 6459 / 2457
Регистрация: 21.01.2014
Сообщений: 27,409
Записей в блоге: 3
19.07.2015, 18:26
Ты же рисуешь на канве самой формы? Тогда используй событие OnMouseUp
C++
1
2
3
4
5
void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
 
}
Параметры X и Y - это и есть координаты точки, на которую указывает указатель мыши. Вот в этом обработчике и пиши код рисования звезды.
1
0 / 0 / 0
Регистрация: 19.07.2015
Сообщений: 3
19.07.2015, 18:48  [ТС]
Рисую в канве формы. В общем на форме самой у меня 3 эдита,для кол-ва вершин и радиусов. Но звезда у меня немного наклонена,как это исправить?
вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void __fastcall TForm1::FormMouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
  n=StrToInt(Edit1->Text);
  R=StrToInt(Edit2->Text);
  r=StrToInt(Edit3->Text);
const float pi=3.1415926;
Canvas->MoveTo(X+R, Y);
int i=1;
while (i<=n*2)
{
      Canvas->LineTo(X+cos(i*pi/n)*r, Y+sin(i*pi/n)*r);
      i=i+1;
      Canvas->LineTo(X+cos(i*pi/n)*R, Y+sin(i*pi/n)*R);
      i=i+1;
}
}
И еще вопрос,как сделать так,чтобы можно было менять цвет контура и заливки? просто цветов много и явно не ифами нужно расписывать.
Миниатюры
Рисование пятиконечной звезды - C++ Builder  
0
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
19.07.2015, 20:14
Лучший ответ Сообщение было отмечено MrRedisko как решение

Решение

По мотивам темы Движение графического объекта по траектории, вращение, изменение цвета.

cpp:
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void TForm1::star (TPoint center, int outer_radius, int inner_radius, int beam_count, TColor fill_color, TColor outline_color)
{
  // center - центр фигуры
  // outer_radius и inner_radius - внешний и внутр. радиусы
  // beam_count - кол-во лучей
  // fill_color и outline_color - цвет заливки (закраски) и контура
 
  // обновляем изображение
  Refresh();
 
  // цвет контура
  Canvas->Pen->Color = outline_color;
 
  // переходим в "начальную точку" звезды
  Canvas->MoveTo(center.x+sin(0)*outer_radius, center.y-cos(0)*outer_radius);
 
  // рисуем лучи
  for (int i = 1; i <= beam_count; i++)
  {
    Canvas->LineTo(center.x+sin((i*2-1)*M_PI/beam_count)*inner_radius, center.y-cos((i*2-1)*M_PI/beam_count)*inner_radius);
    Canvas->LineTo(center.x+sin(i*2*M_PI/beam_count)*outer_radius+1, center.y-cos(i*2*M_PI/beam_count)*outer_radius-1);
  }
 
  // закрашиваем фигуру
  Canvas->Brush->Color = fill_color;
  Canvas->FloodFill(center.x, center.y, Canvas->Pixels[center.x][center.y], fsSurface);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
  if (Button == mbLeft)  // если нажата левая кнопка мыши
  {
    // задаем (определяем) параметры
    int outer_radius = LE_outer_radius->Text.ToIntDef(135), inner_radius = LE_inner_radius->Text.ToIntDef(55),
        beam_count = LE_beam_count->Text.ToIntDef(5);
    TColor fill_color = CB_fill_color->Selected, outline_color = CB_outline_color->Selected;
    // рисуем фигуру
    star(TPoint(X, Y), outer_radius, inner_radius, beam_count, fill_color, outline_color);
  }
}
//---------------------------------------------------------------------------
h:
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
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.Dialogs.hpp>
#include <Vcl.ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TGroupBox *GroupBox;
    TLabeledEdit *LE_outer_radius;
    TLabeledEdit *LE_inner_radius;
    TLabeledEdit *LE_beam_count;
    TColorBox *CB_fill_color;
    TLabel *L_fill_color;
    TLabel *L_outline_color;
    TColorBox *CB_outline_color;
    void __fastcall FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y);
private:    // User declarations
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
    void star(TPoint center, int outer_radius, int inner_radius, int beam_count, TColor fill_color, TColor outline_color);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
dfm:
Code
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
object Form1: TForm1
  Left = 0
  Top = 0
  BorderIcons = [biSystemMenu, biMinimize]
  BorderStyle = bsSingle
  Caption = #1047#1074#1077#1079#1076#1072
  ClientHeight = 800
  ClientWidth = 800
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poScreenCenter
  OnMouseDown = FormMouseDown
  PixelsPerInch = 96
  TextHeight = 13
  object GroupBox: TGroupBox
    Left = 0
    Top = 0
    Width = 801
    Height = 105
    Caption = ' '#1055#1072#1088#1072#1084#1077#1090#1088#1099' '
    TabOrder = 0
    object L_fill_color: TLabel
      Left = 16
      Top = 67
      Width = 70
      Height = 13
      Caption = #1062#1074#1077#1090' '#1079#1072#1083#1080#1074#1082#1080
    end
    object L_outline_color: TLabel
      Left = 272
      Top = 67
      Width = 71
      Height = 13
      Caption = #1062#1074#1077#1090' '#1082#1086#1085#1090#1091#1088#1072
    end
    object LE_outer_radius: TLabeledEdit
      Left = 104
      Top = 24
      Width = 33
      Height = 21
      EditLabel.Width = 83
      EditLabel.Height = 13
      EditLabel.Caption = #1042#1085#1077#1096#1085#1080#1081' '#1088#1072#1076#1080#1091#1089
      LabelPosition = lpLeft
      LabelSpacing = 5
      NumbersOnly = True
      TabOrder = 0
      Text = '135'
    end
    object LE_inner_radius: TLabeledEdit
      Left = 288
      Top = 24
      Width = 33
      Height = 21
      EditLabel.Width = 99
      EditLabel.Height = 13
      EditLabel.Caption = #1042#1085#1091#1090#1088#1077#1085#1085#1080#1081' '#1088#1072#1076#1080#1091#1089
      LabelPosition = lpLeft
      LabelSpacing = 5
      NumbersOnly = True
      TabOrder = 1
      Text = '55'
    end
    object LE_beam_count: TLabeledEdit
      Left = 468
      Top = 24
      Width = 25
      Height = 21
      EditLabel.Width = 101
      EditLabel.Height = 13
      EditLabel.Caption = #1050#1086#1083#1080#1095#1077#1089#1090#1074#1086' '#1074#1077#1088#1096#1080#1085
      LabelPosition = lpLeft
      LabelSpacing = 5
      NumbersOnly = True
      TabOrder = 2
      Text = '5'
    end
    object CB_outline_color: TColorBox
      Left = 348
      Top = 64
      Width = 145
      Height = 22
      TabOrder = 3
    end
  end
  object CB_fill_color: TColorBox
    Left = 92
    Top = 64
    Width = 145
    Height = 22
    Selected = clRed
    TabOrder = 1
  end
end
ехе ниже.
Миниатюры
Рисование пятиконечной звезды - C++ Builder  
Вложения
Тип файла: zip star.zip (1.37 Мб, 66 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.07.2015, 20:14
Помогаю со студенческими работами здесь

Рисование пятиконечной звезды
как правильно нарисовать пятиконечную звезду средствами winapi? нашел вот такой хороший урок только вопрос в том как нарисовать одну линию...

Cопротивление пятиконечной звезды
Люди знающие!! помогите пожалуйста найти сопротивление пятиконечной звезды (все участки обладают одинаковым сопротивлением) У меня...

Контур пятиконечной звезды в программе Dev C++ 5.4.2
Здравствуйте, помогите пожалуйста сделать задание: нарисовать контур пятиконечной звезды средствами языка с++ Только нужно работать...

Изобразить фигуру правильной пятиконечной звезды, одна из сторон горизонтальна
ребята учусь на 3 курсе и задали составить программу в паскале, которая в графическом режиме изображает фигуру правильной пятиконечной...

"Числа пятиконечной звезды"
Помогите пожалуйста решить следующую задачу: По периметру пятиконечной звезды необходимо проставить числа от 1 до 10 так, чтобы...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
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 На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru