Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
0 / 0 / 0
Регистрация: 29.09.2014
Сообщений: 25

Нарисовать звезду, вписанную в окружность

07.03.2016, 12:01. Показов 4688. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день есть окружность с радиусов A вписанная в окружность с радиусом 2A, необходимо нарисовать правильную пятиконечную звезду, с окружностями справился, не понимаю, по какой формуле нарисовать звезду, при том что размер фигуры меняется с помощью TrackBar.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.03.2016, 12:01
Ответы с готовыми решениями:

Нарисовать звезду из 16 лучей
Господа форумчане! Помогите линиями нарисовать звезду с 16 лучами не используя moveto и lineto! Заранее спасибо!

как нарисовать 5-лучевую звезду?
как нарисовать 5-лучевую звезду?

Нарисовать фигуру, вписанную в окружность заданного радиуса и имеющую внутреннюю вписанную окружность
Добрый день. Если есть возможность, подскажите пожалуйста код программы в Delphi для того, чтобы нарисовать фигуру , вписанную в...

18
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
07.03.2016, 18:55
Цитата Сообщение от jmaxaligator Посмотреть сообщение
не понимаю, по какой формуле нарисовать
и на бумажке тоже не понимаешь как нарисовать ?
0
0 / 0 / 0
Регистрация: 29.09.2014
Сообщений: 25
08.03.2016, 12:08  [ТС]
на бумажке с помощью транспортира по 72 градуса 5 частей.
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
08.03.2016, 12:11
Цитата Сообщение от jmaxaligator Посмотреть сообщение
по 72 градуса 5 частей
Ну так вот это и есть "формула")
0
0 / 0 / 0
Регистрация: 29.09.2014
Сообщений: 25
08.03.2016, 13:23  [ТС]
Это я понимаю, я не понимаю, как это выразить в коде.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
08.03.2016, 13:23
Лучший ответ Сообщение было отмечено jmaxaligator как решение

Решение

Delphi
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
procedure TForm1.FormPaint(Sender: TObject);
var  x0,y0:Integer;//центр звезды=центр окружности
     R,R1:integer; //большой и малый радиусы звезды
     p:array[1..11]of TPoint;//массив вершин
     a:double;//угол между осью Х и направлением на вершину
begin
x0:=clientwidth div 2;
y0:=clientheight div 2;
R:=y0-80;
R1:=round(R*0.382);// 0,382-примерное отношение радиусов правильной 5-конечнй зыезды
a:=pi/2;// направление на верхнюю вершину
 for i:=1 to 10 do //10 вершин
  begin
   if i mod 2=0 then  //внутрение вершны(впадины)
    begin
     p[i].x:=x0+round(R1*cos(a));
     p[i].y:=y0-round(R1*sin(a));
    end
   else
    begin
     p[i].x:=x0+round(R*cos(a));//внешние(выступы)
     p[i].y:=y0-round(R*sin(a));
    end;
    a:=a+pi/5;//увеличим угол на 36 градусов(72/2)
  end;
p[11]:=p[1];//замкнем полигон
with Canvas do //нарисуем
 begin
  pen.Color:=clRed;
  brush.Color:=clRed;
  polygon(p);
 end;
end;
1
0 / 0 / 0
Регистрация: 29.09.2014
Сообщений: 25
09.03.2016, 08:48  [ТС]
Благодарю =)
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
09.03.2016, 09:02
У Вас видимо R=2A, R1=A.

Добавлено через 1 минуту
Звезда правда при большинстве размеров будет не очень красивой.
0
0 / 0 / 0
Регистрация: 29.09.2014
Сообщений: 25
09.03.2016, 10:34  [ТС]
Да да, совершенно верно, я уже разобрался с этим. Встал другой вопрос, как эту звезду вращать))
Я так понимаю нужна функция, которая будет смещать эти 10 точек.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
09.03.2016, 10:48
Лучший ответ Сообщение было отмечено jmaxaligator как решение

Решение

Вращать по таймеру.
Посмотрите это
Вращение звезды
и это
Вращение вписанного многоугольника вокруг центра окружности
1
0 / 0 / 0
Регистрация: 29.09.2014
Сообщений: 25
10.03.2016, 14:22  [ТС]
Огромное спасибо, с этим справился.
Может еще и с движением по дуге поможете, от левого края к правому.
Я взял в Timer прописал 2 переменные dx=5,dy=5 и начал двигать Image, не получается подобрать условие что бы Image корректно двигался по дуге, он у меня либо зависает в определенном месте, либо выходит за рабочую область((
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
10.03.2016, 14:28
Цитата Сообщение от jmaxaligator Посмотреть сообщение
с движением по дуге
А что за дуга? Какого радиуса по отношению к радиусам звезды, от куда до куда? Написали бы уж задание все полностью, а то пудрите мозги, не могу же я несколько дней держать Вашу программу в уме. Мне проще ее написать и положить ,чтобы при вопросах заглянуть и сказать.
0
0 / 0 / 0
Регистрация: 29.09.2014
Сообщений: 25
10.03.2016, 14:40  [ТС]
Дуга начинается от левой нижней части рабочей области, концом в правом нижней части рабочей области, да я пытаюсь как то сам разобраться во всем, вот и получается что по частям все спрашиваю.
Миниатюры
Нарисовать звезду, вписанную в окружность  
Вложения
Тип файла: zip Звезда.zip (3.14 Мб, 7 просмотров)
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
10.03.2016, 15:26
Движение по дуге точно также как и по кругу. Центр середина рабочей области, ее низ.
Радиус так чтобы рисунок звезды входил на экран.
xc:=PaintBox1.width div 2;
yc:=PaintBox1.height-4*R;//2 больших радиуса
u:=pi;
Также по таймеру
u:=u-0.1;//слева направо
//рисуем все
Только все углы разными переменными напиши
И не нужно таскать Image по форме, а звезду по Image.
1
0 / 0 / 0
Регистрация: 29.09.2014
Сообщений: 25
14.03.2016, 15:21  [ТС]
Наверное я совсем дурак, не получилось. Если не сложно, вот на примере этой звезды покажите ))
Вложения
Тип файла: zip Звезда.zip (5.8 Кб, 8 просмотров)
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
14.03.2016, 16:22
Лучший ответ Сообщение было отмечено jmaxaligator как решение

Решение

Delphi
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
var
  Form1: TForm1;
  xc,yc,x,y,rz,rd:integer;
  uz,ud:real;
implementation
 
{$R *.dfm}
 
// рисует звезду
procedure Star(x,y,r:integer;u:double);
    // x,y - координаты центра звезды
    // r - радиус звезды
    // u - угол поворота
var p : array[1..11] of TPoint; // массив координат лучей и впадин
    a: double;   // угол между осью ОХ и прямой, соединяющей
                  // центр звезды и конец луча или впадину
    i: integer;
begin
a:=u+pi/10; // строим от правого гор. луча
for i:=1 to 10 do
 begin
  if i mod 2=0 then
   begin // впадина
    p[i].x:=x+round(r/3*cos(a));
    p[i].y:=y-round(r/3*sin(a));
   end
  else
   begin // луч
    p[i].x:=x+round(r*cos(a));
    p[i].y:=y-round(r*sin(a));
   end;
  a:=a+pi/5;
 end;
p[11].X:=p[1].X; // чтобы замкнуть контур звезды
p[11].Y:=p[1].Y;
with Form1.Canvas do
 begin
  Brush.Style:=bsSolid;
  Brush.Color:=clRed;
  Polygon(p); // начертить закрашенную звезду
 end;
end;
 
//зададим начальные параметры
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Enabled:=false;
xc:=clientwidth div 2; //координаты центра дуги
yc:=clientheight;
rz:=50;//радиус звезды
rd:=xc-rz;//радиус дуги
uz:=0;//начальный угол поворота звезды
ud:=pi-arctan(rz/(xc-rz));//начальный угол положения звезды
                          // на дуге слева
x:=rz; //координаты центра звезды
y:=clientheight-rz;
Form1.Color := ClWhite;//форма белая
doublebuffered:=true;//для уменьшения мерцания
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=true;
Timer1.Interval:=100;
Star(x,y,rz,uz);//рисуем звезду
end;
 
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
ud:=ud-0.02;
uz:=uz-0.1;//поворачивеам звезду
x:=xc+round(rd*cos(ud));
y:=yc-round(rd*sin(ud));
repaint; //перерисовываем
if(x+rz>=Form1.ClientWidth)or(y+rz>=Form1.ClientHeight)then Timer1.Enabled:=false;
end;
 
//рисуем по OnPaint формы
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Brush.Color := ClWhite;
Canvas.FillRect(Canvas.ClipRect);
Star(x,y,rz,uz);//рисуем
end;
1
0 / 0 / 0
Регистрация: 29.09.2014
Сообщений: 25
14.03.2016, 19:09  [ТС]
А как что бы в обратную двигалось и звезда крутилась?)
Цитата Сообщение от Puporev Посмотреть сообщение
ud:=ud-0.02;
uz:=uz-0.1;//поворачивеам звезду
нужно знаки поменять на противоположные??
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
14.03.2016, 19:49
Да, и мозг включить.

Добавлено через 46 секунд
Писал бы сам и спрашиватьбы не пришлось, а разбирать чужой говнокод хуже нет.

Добавлено через 33 минуты
Delphi
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
var
  Form1: TForm1;
  xc,yc,x,y,rz,rd:integer;
  uz,ud:real;
  f:boolean;
implementation
 
{$R *.dfm}
 
// рисует звезду
procedure Star(x,y,r:integer;u:double);
    // x,y - координаты центра звезды
    // r - радиус звезды
    // u - угол поворота
var p : array[1..11] of TPoint; // массив координат лучей и впадин
    a: double;   // угол между осью ОХ и прямой, соединяющей
                  // центр звезды и конец луча или впадину
    i: integer;
begin
a:=u+pi/10; // строим от правого гор. луча
for i:=1 to 10 do
 begin
  if i mod 2=0 then
   begin // впадина
    p[i].x:=x+round(r/3*cos(a));
    p[i].y:=y-round(r/3*sin(a));
   end
  else
   begin // луч
    p[i].x:=x+round(r*cos(a));
    p[i].y:=y-round(r*sin(a));
   end;
  a:=a+pi/5;
 end;
p[11].X:=p[1].X; // чтобы замкнуть контур звезды
p[11].Y:=p[1].Y;
with Form1.Canvas do
 begin
  Brush.Style:=bsSolid;
  Brush.Color:=clRed;
  Polygon(p); // начертить закрашенную звезду
 end;
end;
 
//зададим начальные параметры
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Enabled:=false;
xc:=clientwidth div 2; //координаты центра дуги
yc:=clientheight;
rz:=50;//радиус звезды
rd:=xc-rz;//радиус дуги
uz:=0;//начальный угол поворота звезды
ud:=pi-arctan(rz/(xc-rz));//начальный угол положения звезды
                          // на дуге слева
x:=rz; //координаты центра звезды
y:=clientheight-rz;
Form1.Color := ClWhite;//форма белая
doublebuffered:=true;//для уменьшения мерцания
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=true;
Timer1.Interval:=50;
Star(x,y,rz,uz);//рисуем звезду
f:=true;
end;
 
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if f then
 begin
  ud:=ud-0.02;
  uz:=uz-0.1;//поворачивеам звезду
  if (x+rz>=Form1.ClientWidth)
  or((y+rz>=Form1.ClientHeight)and(x>xc))then f:=false;
 end
else
 begin
  ud:=ud+0.02;
  uz:=uz+0.1;
  if (x-rz<=0)
  or((y+rz>=Form1.ClientHeight)and(x<xc)) then f:=true;
 end;
x:=xc+round(rd*cos(ud));
y:=yc-round(rd*sin(ud));
repaint; //перерисовываем
//if(x+rz>=Form1.ClientWidth)or(y+rz>=Form1.ClientHeight)then Timer1.Enabled:=false;
end;
 
//рисуем по OnPaint формы
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Brush.Color := ClWhite;
Canvas.FillRect(Canvas.ClipRect);
Star(x,y,rz,uz);//рисуем
end;
1
0 / 0 / 0
Регистрация: 08.01.2017
Сообщений: 2
15.01.2017, 16:26
так как заставить перемещаться фигуру?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.01.2017, 16:26
Помогаю со студенческими работами здесь

PaintBox: нарисовать окружность, вписанную в квадрат
Здравствуйте мне нужно нарисовать окружность вписанную в квадрат(их количество указывает пользователь) вот код когда квадрат вписанный в...

Рисование с помощью мыши. Нарисовать окружность вписанную в треугольник
Нужно нарисовать окружность вписанную в треугольник , а именно- зажимаем кнопку мыши и двигаем-рисуется линия, отпускаем-не рисуется.Это...

Как создать n-конечную звезду, вписанную в круг?
Как нарисовать фигуры, подобные тем что на рисунке ?

Отобразить на экране пятилучевую звезду, вписанную в квадрат
Решал задачу: отобразить на экране пятилучевую звезду, вписанную в квадрат. В квадрате появляются точки разных цветов и рядом с квадратом...

Задачи на вписанную в треугольник окружность.
1.2) В равнобедренном треугольнике ABC AB= BC на основании AC отмечена точка M, что AM= a, MC=b.В треугольники ABM и CBM вписаны...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
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