0 / 0 / 0
Регистрация: 21.05.2011
Сообщений: 58

Отобразить на экране пятилучевую звезду, вписанную в квадрат

02.06.2011, 19:05. Показов 1894. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решал задачу: отобразить на экране пятилучевую звезду, вписанную в квадрат. В квадрате появляются точки разных цветов и рядом с квадратом счётчик отсчитывает их количество; если точки попадают на звезду, то не отображаются, если не на звезду - то отображаются. Не могу никак сделать, чтобы точки попавшие на звезду не отображались, остальное всё сделал. Помогите пожалуйста!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.06.2011, 19:05
Ответы с готовыми решениями:

Нарисовать звезду, вписанную в окружность
Добрый день есть окружность с радиусов A вписанная в окружность с радиусом 2A, необходимо нарисовать правильную пятиконечную звезду, с...

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

Написать программу, которая должна рисовать круг, в него вписанный пятиугольник и звезду, вписанную в пятиугольник.
Мне нужно написать программу, которая должна рисовать круг, в него вписанный пятиугольник и звезду, вписанную в пятиугольник. Конечно же у...

6
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
02.06.2011, 21:09
Цитата Сообщение от ДмитрийЛар Посмотреть сообщение
остальное всё сделал.
Так покажи код программы, а то куда все дописывать?

Добавлено через 3 минуты
Если звезда и квадрат закрашены, то можно просто определять цвет, который был на месте точки, до ее прорисовки. функция GetPixel(x,y);
0
0 / 0 / 0
Регистрация: 21.05.2011
Сообщений: 58
03.06.2011, 16:31  [ТС]
Цитата Сообщение от Puporev Посмотреть сообщение
Так покажи код программы
Вот прога

Pascal
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
Program zvezda;
uses graph, crt;
const gradus = 2 * pi/360;    {постоянная необходима для перевода градусов в радианы}
      radian = 360 / (2*pi);  {постоянная необходима для перевода радиан в градусы}
             {TPascal считает тригонометрические функции, полагая,
            что переменные заданы в радианах}
        {зададим углы наклона лучей звезды}
      alfa = 50 * gradus;
      betta = 75 * gradus;
      gamma = pi - alfa - betta;
      a = 300;  {сторона квадрата}
      d = 25;   {глубина луча звезды}
var i,          {счётчик}
    x, y: integer;  {координата центра звезды}
            {не совпадает с центром квадрата}
    {color: word;       {цвет}
    b,          {расстояние от центра звезды до верхней стороны квадрата}
    h: real;        {и до нижней стороны}
        {процедура инициализации графики}
Procedure GraphicIni;
 var Mode, DriverDet: Integer;
  begin
   Mode:=0;
   DriverDet:=Detect;
   InitGraph(Mode,DriverDet,'..\BGI');
  end;
    {прцедура рисует звезду}
Procedure zvezd(color:word);
  begin
    setcolor(color);
    {переводим курсор в первую вершину звезды}
    moveto(x, round(y-b));                      {G}
    {строим линии до следующей вершины звезды}
    lineto(round(x+d*sin(betta/2)),round(y-d*cos(betta/2)));    {M}
    lineto(x+ a div 2, round(y-a*cos(betta)/(2*sin(betta))));   {K}
    lineto(round(x+ d*sin(alfa+gamma/ 2)), round(y+d*cos(alfa+gamma/2))); {N}
    lineto(x+round(b*sin(alfa)),round(y+h));            {F}
    lineto(x,y+d);                          {P}
    lineto(x-round(b*sin(alfa)),round(y+h));            {E}
    lineto(round(x-d*sin(alfa+gamma/ 2)), round(y+d*cos(alfa+gamma/2)));  {J}
    lineto(x-a div 2, round(y-a*cos(betta)/(2*sin(betta))));    {I}
    lineto(round(x-d*sin(betta/2)),round(y-d*cos(betta/2)));    {L}
    lineto(x, round(y-b));                      {G}
    {заливаем звезду}
    floodfill(x,y,color);
  end;
    {процедура строит точки}
Procedure tochki(xp,yp:integer);
 var xput, yput: integer;
  begin
    randomize;
    xput:=xp+random(a) - a div 2;
    yput:=yp+random(a) - round(b);
    putpixel(xput,yput,random(15));
  end;
    {процедура выводит строку с количеством точек}
Procedure text;
 var istr: string;
  begin
    setcolor(0);
    bar(x+9+a div 2, y-2, x+50+a div 2, y+22);
    setcolor(random(15));
    str(i:5,istr);
    outtextxy(x+10+a div 2,y,istr);
    delay(30000);   {задержка вывода следующего шага}
  end;
    {начало основной программы}
Begin
  GraphicIni;
  x:=getmaxX div 2;
  y:=getmaxY div 2;
  b:=a/(1+cos(alfa));
  h:=b*cos(alfa);
  i:=0;
    {стриом квадрат}
  setcolor(2);
  rectangle(x - a div 2, round(y - b),x + a div 2,round(y+h));
    {включаем цикл}
  repeat
    tochki(x,y);
    zvezd(0);   {стираем точки попавшие на звезду}
    zvezd(4);
    i:=i+1; {считаем точки}
    text;
  until keypressed;  {цикл работает пока не нажата какая-либо клавиша}
  readkey;
  Closegraph;   {закрытие графического режима}
End.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
03.06.2011, 20:02
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Pascal
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
Program zvezda;
uses graph, crt;
const gradus = 2 * pi/360;    {постоянная необходима для перевода градусов в радианы}
      radian = 360 / (2*pi);  {постоянная необходима для перевода радиан в градусы}
                         {TPascal считает тригонометрические функции, полагая,
                        что переменные заданы в радианах}
                {зададим углы наклона лучей звезды}
      alfa = 50 * gradus;
      betta = 75 * gradus;
      gamma = pi - alfa - betta;
      a = 300;  {сторона квадрата}
      d = 25;   {глубина луча звезды}
var i,                  {счётчик}
    x, y: integer;      {координата центра звезды}
                        {не совпадает с центром квадрата}
    {color: word;               {цвет}
    b,                  {расстояние от центра звезды до верхней стороны квадрата}
    h: real;            {и до нижней стороны}
                {процедура инициализации графики}
Procedure GraphicIni;
 var Mode, DriverDet: Integer;
  begin
   Mode:=0;
   DriverDet:=Detect;
   InitGraph(Mode,DriverDet,'..\BGI');
  end;
        {прцедура рисует звезду}
Procedure zvezd(color:word);
  begin
    setcolor(color);
        {переводим курсор в первую вершину звезды}
    moveto(x, round(y-b));                                      {G}
        {строим линии до следующей вершины звезды}
    lineto(round(x+d*sin(betta/2)),round(y-d*cos(betta/2)));    {M}
    lineto(x+ a div 2, round(y-a*cos(betta)/(2*sin(betta))));   {K}
    lineto(round(x+ d*sin(alfa+gamma/ 2)), round(y+d*cos(alfa+gamma/2))); {N}
    lineto(x+round(b*sin(alfa)),round(y+h));                    {F}
    lineto(x,y+d);                                              {P}
    lineto(x-round(b*sin(alfa)),round(y+h));                    {E}
    lineto(round(x-d*sin(alfa+gamma/ 2)), round(y+d*cos(alfa+gamma/2)));  {J}
    lineto(x-a div 2, round(y-a*cos(betta)/(2*sin(betta))));    {I}
    lineto(round(x-d*sin(betta/2)),round(y-d*cos(betta/2)));    {L}
    lineto(x, round(y-b));                                      {G}
        {заливаем звезду}
    floodfill(x,y,color);
  end;
        {процедура строит точки}
Procedure tochki(xp,yp:integer;var i:integer); {добавим параметр-счетчик}
 var xput, yput: integer;
  begin
    randomize;
    xput:=xp+random(a) - a div 2;
    yput:=yp+random(a) - round(b);
    {если цвет точки не белый=не звезда}
    if getpixel(xput,yput)<>15 then
     begin
      putpixel(xput,yput,random(15));{рисуем}
      i:=i+1; {считаем точки}
     end;
  end;
        {процедура выводит строку с количеством точек}
Procedure text;
 var istr: string;
  begin
    setcolor(0);
    bar(x+9+a div 2, y-2, x+50+a div 2, y+22);
    setcolor(random(15));
    str(i:5,istr);
    outtextxy(x+10+a div 2,y,istr);
    delay(300);       {задержка вывода следующего шага}
  end;
        {начало основной программы}
Begin
  GraphicIni;
  x:=getmaxX div 2;
  y:=getmaxY div 2;
  b:=a/(1+cos(alfa));
  h:=b*cos(alfa);
  i:=0;
        {стриом квадрат}
  setcolor(2);
  rectangle(x - a div 2, round(y - b),x + a div 2,round(y+h));
  zvezd(15);{строим корявую звезду}
        {включаем цикл}
  repeat
    tochki(x,y,i);
    text;
  until keypressed;  {цикл работает пока не нажата какая-либо клавиша}
  readkey;
  Closegraph;   {закрытие графического режима}
End.
1
0 / 0 / 0
Регистрация: 21.05.2011
Сообщений: 58
12.06.2011, 22:49  [ТС]
Спасибо большое за помощь!!! Всё работает как надо!


Цитата Сообщение от Puporev Посмотреть сообщение
{строим корявую звезду}
А звезда такая получается из-за заданного параметра d - глубина луча. Если её установить в пределах 50..75, то очень даже симпатичная будет.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
12.06.2011, 23:05
Я делал как на картинке в инете...
0
0 / 0 / 0
Регистрация: 21.05.2011
Сообщений: 58
13.06.2011, 15:47  [ТС]
Я понял. В программе у меня изначально было небольшое значение и, когда отправлял на тему, сразу не исправил.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.06.2011, 15:47
Помогаю со студенческими работами здесь

Построить квадрат и вписанную в него окружность
Построить квадрат и вписанную в него окружность. Добавлено через 2 часа 1 минуту Вот что у меня получилось uses graph; var...

Построить квадрат и вписанную в него окружность
Здравствуйте. Помогите сделать прогу. Пусть координаты первых двух точек являются координатами вершин квадрата. 1)Найти площадь этого...

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

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

Нарисовать звезду на экране
66. Нарисовать звезду на экране.


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

Новые блоги и статьи
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