Форум программистов, компьютерный форум CyberForum.ru

Как нарисовать восьмиугольник? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.77
punkvalera
Заблокирован
24.09.2012, 22:09     Как нарисовать восьмиугольник? #1
не получается задать координаты 8-угольника(

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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <stdlib.h>
//------------- GLUT ------------------
#define GLUT_BUILDING_LIB
 
#include "glut.h"
#pragma comment(lib,"glut32-bcb.lib")
//------------------------------------
#pragma hdrstop
#include <tchar.h>
//---------------------------------------------------------------------------
#include <iostream.h>
#include <conio.h>
 
 
float WinWid = 600.0;
float WinHei = 600.0;
float size=30,line=3,c=0,o=0,l=1,R,G,B,Z;
bool down=false;
float x1=0.0, y1=0.0;
 
 
void MousePressed(int button, int state, int x, int y)
{
        down= button==GLUT_LEFT_BUTTON && state==GLUT_LEFT;
        if(down)
        {
                x1=x-WinWid/2;
                y1=y-WinHei/2;
 
    [COLOR="Red"]  glBegin(GL_POLIGON);
glColor3d(4,0,1);
   glVertex3f(x-0.2, y-0.1,  0.0 );
  glVertex3f(x-0.1,  y+0.2,  0.0 );
  glVertex3f( x+0.2,  y+0.3,  0.0 );
  glVertex3f( x+0.4, y-0.1,  0.0 );
  glVertex3f( x+0.4,  y+0.1,  0.0 );
glVertex3f( x+0.4,  y+0.1,  0.0 );
glVertex3f( x+0.4,  y+0.1,  0.0 );
glVertex3f( x+0.4,  y+0.1,  0.0 );
glEnd();                                          //не понимаю как их задавать 
   glFlush();
   glFinish();
 
 
   }
   }
 
   void MenuChek (int v )
{
    switch (v)
    {
    case 0:  break; glutSetWindowTitle (""); break;
    }
}
 
 
void SubMenuChek (int v )
{
  switch (v)
    {
    case 1: c=255; o=0; l=0; /*RED*/  glutSetWindowTitle ("Червоний"); break;
    case 2: c=0; o=255; l=0; /*GREEN*/ glutSetWindowTitle ("Зелений"); break;
    case 3: c=0; o=0; l=255; /*BLUE*/ glutSetWindowTitle ("Синій"); break;
    case 4: c=0; o=255; l=255; /*WATER*/ glutSetWindowTitle ("WATER"); break;
    case 5: c=255; o=0; l=255; /*PINK*/ glutSetWindowTitle ("Рожевий"); break;
    case 6: c=255; o=255; l=0; /*YELLOW*/ glutSetWindowTitle ("Жовтий"); break;
    case 7: c=255; o=255; l=255; /*WHITE*/ glutSetWindowTitle ("Білий"); break;
 
    }
 
}
 
 
void SubMenuChek3 (int v )
{
  switch (v)
    {
    case 14: R=1;G;B;Z; glutSetWindowTitle ("Червоний фон"); glutPostRedisplay(); break;
    case 15: R;G=1;B;Z; glutSetWindowTitle ("Зелений фон"); glutPostRedisplay(); break;
    case 16: R;G;B=1;Z; glutSetWindowTitle ("Синій фон"); glutPostRedisplay(); break;
    case 17: R=0;G=0;B=0;Z=0; glutSetWindowTitle ("Чорний"); glutPostRedisplay(); break;
    case 18: R=(float)rand()/(float)RAND_MAX;;G=(float)rand()/(float)RAND_MAX;;B=(float)rand()/(float)RAND_MAX;;Z=(float)rand()/(float)RAND_MAX;; glutSetWindowTitle ("Випадковий колір");glutPostRedisplay(); break;
    }
 
}
 
 
void mauseMenu()
{
   int M=glutCreateMenu(MenuChek);
   int V=glutCreateMenu(MenuChek);
   int F=glutCreateMenu(MenuChek);
   int L=glutCreateMenu(MenuChek);
   int Msub=glutCreateMenu(SubMenuChek);
   int Fsub=glutCreateMenu(SubMenuChek3);
   glutSetMenu(Msub);
   glutAddMenuEntry("Червоний",1);
   glutAddMenuEntry("Зелений",2);
   glutAddMenuEntry("Синій",3);
   glutAddMenuEntry("WATER",4);
   glutAddMenuEntry("Рожевий",5);
   glutAddMenuEntry("Жовтий",6);
   glutAddMenuEntry("Білий",7);
   glutAddMenuEntry ("Нова ламана",0);
   glutSetMenu(Fsub);
   glutAddMenuEntry("Червоний",14);
   glutAddMenuEntry("Зелений",15);
   glutAddMenuEntry("Синій",16);
   glutAddMenuEntry("Чорний",17);
   glutAddMenuEntry("Випадковий колір",18);
   glutSetMenu(F);
   glutAddSubMenu("Колір фігури",Msub);
   glutAddSubMenu("Змінити Фон",Fsub);
   glutAttachMenu (GLUT_RIGHT_BUTTON);
}
 
 
void Picture()
{
   glClearColor(R,G,B,Z);
   glClear(GL_COLOR_BUFFER_BIT |  GL_DEPTH_BUFFER_BIT);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(-WinWid/2, WinWid/2, WinHei/2, -WinHei/2, -200.0, 200.0);
        glMatrixMode(GL_MODELVIEW);
   glFlush();
 
   }
main(int argc, char *argv[])
{
 
   glutInit(&argc, argv);
   glutInitDisplayMode(GLUT_RGB);
   glutInitWindowSize(WinWid, WinHei);
   glutCreateWindow("Лабораторна робота №1 OpenGL ");
   glutDisplayFunc(Picture);
   glutMouseFunc(MousePressed);
 
   mauseMenu();
   glutMainLoop();
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2012, 22:09     Как нарисовать восьмиугольник?
Посмотрите здесь:

Как нарисовать прямоугольник в С++ C++
Как нарисовать на С++ 3D пистолет... C++
Как нарисовать график? C++
Как нарисовать окружность C++
C++ Как нарисовать круг
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
24.09.2012, 22:19     Как нарисовать восьмиугольник? #2
Берешь лист в клетку, рисуешь восьмиугольник, считаешь клеточки... Или вычисляешь синусы/косинусы с шагом в пи/4
punkvalera
Заблокирован
24.09.2012, 23:08  [ТС]     Как нарисовать восьмиугольник? #3
Цитата Сообщение от NoMasters Посмотреть сообщение
Берешь лист в клетку, рисуешь восьмиугольник, считаешь клеточки... Или вычисляешь синусы/косинусы с шагом в пи/4
а можно поподробней? насчет листочка?
Вложение 185038

не пойму что куда добавлять
glVertex3f(x1-0.2, y1-0.1, 0.0 );
glVertex3f(x1-0.1, y1+0.2, 0.0 );
glVertex3f( x1+0.2, y1+0.3, 0.0 );
glVertex3f( x1+0.4, y1-0.1, 0.0 );
glVertex3f( x1+0.4, y1+0.1, 0.0 );
glVertex3f( x1+0.4, y1+0.1, 0.0 );
glVertex3f( x1+0.4, y1+0.1, 0.0 );
glVertex3f( x1+0.4, y1+0.1, 0.0 );
soundtrack
 Аватар для soundtrack
41 / 41 / 4
Регистрация: 15.12.2011
Сообщений: 131
24.09.2012, 23:21     Как нарисовать восьмиугольник? #4
punkvalera, то, что ты нарисовал - конечно многоугольник, но его координаты уж очень произвольны Насколько я понимаю - тебе нужен правильный восьмиугольник.
Вот, примерно, такой:

Ну а его координаты, если взять радиус 4 к примеру, будут такими (по часовой):
(0;4), (4-cos45; 4-cos45), (4;0), (4-cos45;-4+cos45), (0;-4), (-4+cos45; -4+cos45), (-4;0), (-4+cos45;4-cos45)

P.S. вспоминай курс школьной геометрии. теорема пифагора в чистом виде
Миниатюры
Как нарисовать восьмиугольник?  
punkvalera
Заблокирован
24.09.2012, 23:30  [ТС]     Как нарисовать восьмиугольник? #5
Цитата Сообщение от soundtrack Посмотреть сообщение
punkvalera, то, что ты нарисовал - конечно многоугольник, но его координаты уж очень произвольны Насколько я понимаю - тебе нужен правильный восьмиугольник.
Вот, примерно, такой:

Ну а его координаты, если взять радиус 4 к примеру, будут такими (по часовой):
(0;4), (4-cos45; 4-cos45), (4;0), (4-cos45;-4+cos45), (0;-4), (-4+cos45; -4+cos45), (-4;0), (-4+cos45;4-cos45)

P.S. вспоминай курс школьной геометрии. теорема пифагора в чистом виде
ем спасибо) сейчас буду пробовать)
Yandex
Объявления
24.09.2012, 23:30     Как нарисовать восьмиугольник?
Ответ Создать тему
Опции темы

Текущее время: 15:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru