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

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

10.01.2013, 21:36. Показов 20877. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста нарисовать закрашенную звезду.
Нарисовал только не закрашенную:
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
void Star::Draw(HDC hdc)const{
    HPEN pen=CreatePen(PS_SOLID,2,Color);
    SelectObject(hdc, bru);
 int a=180;
     int n = 5, r = 80, R = 90;
 POINT *p=new POINT [n*2+1]; //Массив для хранения координат вершин звезды
 
//Цикл расчета вершин звезды
 for (int i=1;i<n*2+2;i++)
 {
  if (!(i%2)) //При выполнении условия четности следующие формулы
   {
    p[i].x = x - (r + Size) / 2 * sin (a * PI / 180);
    p[i].y = y + (r + Size) / 2 * cos (a * PI / 180);
   }
   else //При невыполнении условия четности следующие формулы
    {
     p[i].x=x-(R + Size)*sin(a*PI/180);
     p[i].y=y+(R + Size)*cos(a*PI/180);
    }
    a=a+180/n;
 }
//Завершаем построение звезды соединяя её окончание с начальной точкой
 p[n*2+1].x=p[1].x;
 p[n*2+1].y=p[1].y;
 MoveToEx(hdc, p[1].x, p[1].y, NULL);
 
//Последовательное соединение точек массива, хранящего вершины звезды
 for (int i=1;i<n*2+2;i++)
  {
     LineTo(hdc, p[i].x, p[i].y);
  }
DeleteObject(pen);
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.01.2013, 21:36
Ответы с готовыми решениями:

Нарисовать закрашенную пятиконечную звезду
Здравствуйте! Есть задание: нужно в консоле нарисовать пятиконечную закрашенную звезду. Вот мой код: HBRUSH brushStar =...

Изобразите на экране закрашенную пятиконечную звезду
1. Изобразите на экране закрашенную пятиконечную звезду в центре экрана и заставьте её увеличиваться до размеров экрана, а затем по нажатию...

Нарисовать звезду
Program Rotation and Reflection; uses Crt, Graph; var gd, gm: Integer; par: array of real; ribs: array of integer; ...

10
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
11.01.2013, 01:07
Цитата Сообщение от vvolka Посмотреть сообщение
Помогите пожалуйста нарисовать закрашенную звезду.
почитай про полигон
например здесь
http://life-prog.ru/view_kompu... .php?id=10

Добавлено через 2 минуты
учти что придется и кисть создавать, принцип такой же как и при рисовании закрашенного прямоугольника
0
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 36
11.01.2013, 11:17  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
почитай про полигон
например здесь
http://life-prog.ru/view_kompu... .php?id=10

Добавлено через 2 минуты
учти что придется и кисть создавать, принцип такой же как и при рисовании закрашенного прямоугольника
HBRUSH hBrush = CreateSolidBrush (RGB(255,255,255)); //создаю кисть;
SelectObject(hdc, hBrush);

А дальше как?
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
11.01.2013, 13:51
Я тебе подправил твою программу, были ошибки , обрати внимание на коментарии
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
    {
        HPEN pen=CreatePen(PS_SOLID,2,Color);
      HPEN oldPen=(HPEN)SelectObject(hdc, pen);// обрати внимание запоминаем возвращаемое значение
      HBRUSH brush=CreateSolidBrush( Color);
      HBRUSH oldBrush=(HBRUSH)SelectObject(hdc, brush);
      int a=180;
     int n = 5, r = 80, R = 90;
 POINT *p=new POINT [n*2]; //Массив для хранения координат вершин звезды
 
//Цикл расчета вершин звезды
 for (int i=0;i<n*2;i++)
 {
  if (!(i%2)) //При выполнении условия четности следующие формулы
   {
    p[i].x = x - (r + Size) / 2 * sin (a * PI / 180);
    p[i].y = y + (r + Size) / 2 * cos (a * PI / 180);
   }
   else //При невыполнении условия четности следующие формулы
    {
     p[i].x=x-(R + Size)*sin(a*PI/180);
     p[i].y=y+(R + Size)*cos(a*PI/180);
    }
    a=a+180/n;
 }
//Завершаем построение звезды соединяя её окончание с начальной точкой
 //p[n*2+1].x=p[1].x;
 //p[n*2+1].y=p[1].y;
/// MoveToEx(hdc, p[1].x, p[1].y, NULL);
 
//Последовательное соединение точек массива, хранящего вершины звезды
/// for (int i=1;i<n*2+2;i++)
///  {
 ///    LineTo(hdc, p[i].x, p[i].y);
 // }
   Polygon(hdc,p,n*2);// рисуем звезду Polygon( дескриптор, указатель на массив точек, количество рисуемых точек) 
  
      delete []p;// вот этого у тебя не было - утечка памяти
         SelectObject(hdc, oldBrush); // выбираем возвращенные ранее значения для предотвращение утечки ресурсов       
         SelectObject(hdc, oldPen);
          DeleteObject( brush);
         DeleteObject(pen);
        }
1
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
11.01.2013, 17:31
Лучший ответ Сообщение было отмечено BumerangSP как решение

Решение

Как вариант:
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
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
#include "windows.h"
#define _USE_MATH_DEFINES
#include <cmath>
#define WMAIN_CLASSNAME     "MyClassName"
#define WMAIN_CAPTION       "MyWindowName"
 
 
#define CIRCLE_CX                   150.0
#define CIRCLE_CY                   150.0
#define CIRCLE_BIG_RADIUS       100.0
#define CIRCLE_SMALL_RADIUS 40.0
#define ANGLE_COUNT             5
 
 
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam, LPARAM lParam);
 
 
int CALLBACK WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPTSTR cmd,int md)
{
    HWND hWnd;
    MSG msg;
    WNDCLASS wc;
    wc.cbClsExtra=0;
    wc.cbWndExtra=0;
    wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
    wc.hCursor=LoadCursor(NULL,IDC_ARROW);
    wc.hIcon=LoadIcon(NULL,IDI_WINLOGO);
    wc.hInstance=hInst;
    wc.lpfnWndProc=WndProc;
    wc.style=CS_HREDRAW | CS_VREDRAW;
    wc.lpszClassName=WMAIN_CLASSNAME;
    wc.lpszMenuName=NULL;
 
    if(!RegisterClass(&wc))
        return 0;
 
    hWnd=CreateWindow(WMAIN_CLASSNAME,WMAIN_CAPTION,/*WS_OVERLAPPEDWINDOW*/WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX | WS_VISIBLE,CW_USEDEFAULT,CW_USEDEFAULT,500,300,HWND_DESKTOP,NULL,hInst,0);
 
    if (!hWnd)
        return 0;
 
    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}
 
 
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT ps;
    HDC hdc;
    switch (message)
    {
    case WM_SIZE:
        InvalidateRect(hWnd,NULL,true);
        break;
    case WM_PAINT:{//Собственно само рисование:
        hdc = BeginPaint(hWnd, &ps);
        POINT oldpoint;
        HPEN hPen=CreatePen(PS_SOLID,1,RGB(255,0,0)),hOldPen;
        HBRUSH hBrush=CreateSolidBrush(RGB(0,0,255)),hOldBrush;
        hOldBrush=(HBRUSH)SelectObject(hdc,hBrush);
        hOldPen=(HPEN)SelectObject(hdc,hPen);
 
        double shift=360.0/ANGLE_COUNT;
        double dbshift=shift/2.0;
        double x=-180.0;
        MoveToEx(hdc,CIRCLE_CX+CIRCLE_BIG_RADIUS*sin(double(x*M_PI)/180.0),CIRCLE_CY+CIRCLE_BIG_RADIUS*cos(double(x*M_PI)/180.0),&oldpoint);
        for(;x<=180.0;x+=shift){
            LineTo(hdc,CIRCLE_CX+CIRCLE_BIG_RADIUS*sin(double(x*M_PI)/180.0),CIRCLE_CY+CIRCLE_BIG_RADIUS*cos(double(x*M_PI)/180.0));
            LineTo(hdc,CIRCLE_CX+CIRCLE_SMALL_RADIUS*sin(double((x+dbshift)*M_PI)/180.0),CIRCLE_CY+CIRCLE_SMALL_RADIUS*cos(double((x+dbshift)*M_PI)/180.0));
        }
        ExtFloodFill(hdc,CIRCLE_CX,CIRCLE_CY,RGB(255,0,0),FLOODFILLBORDER);
        MoveToEx(hdc,oldpoint.x,oldpoint.y,&oldpoint);
        SelectObject(hdc,hOldPen);
        DeleteObject(hPen);
        SelectObject(hdc,hOldBrush);
        DeleteObject(hBrush);
        EndPaint(hWnd,&ps);
        break;
                      }
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default: 
        return DefWindowProc(hWnd,message,wParam,lParam);
    }
    return 0;
}

Изменив ANGLE_COUNT на 8 получаем это:
1
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
11.01.2013, 17:35
Из 36 углов классно выглядит
3
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
11.01.2013, 19:59
Croessmah,
а кисть то зачем создавал?
что то я не заметил чтобы ты её использовал
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
11.01.2013, 21:37
звезда закрашивается цветом кисти.
1
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
11.01.2013, 22:04
понятно
сбило с толку вот это описание
http://vsokovikov.narod.ru/New... odfill.htm
здесь наблюдается разночтение
COLORREF crColor, // цвет заливки
а чуть ниже
crColor
[in] Определяет цвет рамки или закрашиваемой области. Интерпретация параметра crColor зависит от значения параметра fuFillType .
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
11.01.2013, 23:52
Последний параметр определяет как будет использован указанный цвет. Если как у меня, то закрашивается область, ограниченная рамкой этого цвета. Еще можно залить всю область данного цвета. Это нужно, если цвет границ разный, но естевственно, во втором случае закрашиваемая область должна быть одного цвета. Закрашивание идет с использованием текущей кисти.
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
12.01.2013, 00:16
Croessmah,
я это уже понял погуглив после твоего ответа
но сначала то я наткнулся на эту фразу
Цитата Сообщение от ValeryS Посмотреть сообщение
COLORREF crColor, // цвет заливки
я и подумал что это типа FillSolidRect где задается цвет а никакой кисти не надо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.01.2013, 00:16
Помогаю со студенческими работами здесь

Нарисовать звезду
Можете нарисовать:

Нарисовать звезду
написать программу,которая запрашивает значение N -число от 1 до 20 и строит геометрический объект, изображенный на рисунке. N - число...

Нарисовать звезду
Помогите пожалуйста реализовать фигуру.

Нарисовать звезду
Написать программу выводящую на экран:1)олимпийские кольца,2)звезду

Нарисовать звезду
Мне нужно нарисовать звезду, а я не знаю, как это сделать...? Мне нада нарісавать звєзду і я нізнаю как ета здєлать...?


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru