Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

Выдаёт ошибку glut32.dll не найден! При том, что он лежит в System32! Всё решил) Нужно отправить не в System32, а в System.
Спасибо за статью. Я не Ваш студент. Но мне она помогла написать функцию для Канторова множества на Python для черепашки: import turtle def kanter(x, y, d):     if d > 1:         turtle...
Как реализовать в данном примере границы расчёта?

Счетчики и рейтинг

Рейтинг@Mail.ru Яндекс.Метрика
Язык программирования: 
C/C++
Среда программирования: 
Visual Studio 2013

#include <glut.h>
#include <math.h>
#include <stdlib.h>
#include <iostream>
 
using namespace std;
 
int t = 500;//кол-во сторон
float x, y;//координаты
float angle;//параметр отвечающий за движение
 
//сохранение пропорций
void proporsion(int w, int h)
{
	if (h == 0)
	{
		h = 1;
	}
	float ratio = float(w) / h;
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(45, ratio, 500, 500);
	glMatrixMode(GL_MODELVIEW);
}
 
//рисование
void paint(void)
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// очистка буфера
 
	//круг 1
	glBegin(GL_POLYGON);//рисуем полигон
	glColor3ub(0, 0, 0);//цвет
	for (int i = 0; i <= t; i++)
	{
		float a = (float)i / t * 3.1415 * 2;
		x = sin(a) * 4;
		y = cos(a) * 4;
		glVertex2f(x, y);
 
	}
	glEnd();
	//круг 2
	glPushMatrix();
	glRotatef(angle, 0, 0, 1);//вращение
	glBegin(GL_POLYGON);
	glColor3ub(255, 255, 255);
	for (int i = 0; i <= t; i++)
	{
		float a = (float)i / t * 3.1415 * 2;
		x = sin(a) * 2;
		y = cos(a) * 2 + 2;
		glVertex2f(x, y);
 
	}
	glEnd();
	glPopMatrix();
	//круг 3
	glPushMatrix();
	glRotatef(angle, 0, 0, 1);
	glBegin(GL_POLYGON);
	glColor3ub(0, 0, 0);
	for (int i = 0; i <= t; i++)
	{
		float a = (float)i / t * 3.1415 * 2;
		x = sin(a);
		y = cos(a) + 3;
		glVertex2f(x, y);
 
	}
	glEnd();
	glPopMatrix();
	//круг 4
	glPushMatrix();
	glRotatef(angle, 0, 0, 1);
	glBegin(GL_POLYGON);
	glColor3ub(255, 255, 255);
	for (int i = 0; i <= t; i++)
	{
		float a = (float)i / t * 3.1415 * 2;
		x = sin(a) / 2;
		y = cos(a) / 2 + 3.5;
		glVertex2f(x, y);
 
	}
	glEnd();
	glPopMatrix();
	//круг 5
	glPushMatrix();
	glRotatef(angle, 0, 0, 1);
	glBegin(GL_POLYGON);
	glColor3ub(0, 0, 0);
	for (int i = 0; i <= t; i++)
	{
		float a = (float)i / t * 3.1415 * 2;
		x = sin(a) / 4;
		y = cos(a) / 4 + 3.75;
		glVertex2f(x, y);
 
	}
	glEnd();
	glPopMatrix();
	//круг 6
	glPushMatrix();
	glRotatef(angle, 0, 0, 1);
	glBegin(GL_POLYGON);
	glColor3ub(255, 255, 255);
	for (int i = 0; i <= t; i++)
	{
		float a = (float)i / t * 3.1415 * 2;
		x = sin(a) / 8;
		y = cos(a) / 8 + 3.9;
		glVertex2f(x, y);
 
	}
	glEnd();
	glPopMatrix();
	//круг 7
	glPushMatrix();
	glRotatef(angle, 0, 0, 1);
	glBegin(GL_POLYGON);
	glColor3ub(0, 0, 0);
	for (int i = 0; i <= t; i++)
	{
		float a = (float)i / t * 3.1415 * 2;
		x = sin(a) / 16;
		y = cos(a) / 16 + 3.95;
		glVertex2f(x, y);
 
	}
	glEnd();
	glPopMatrix();
 
	glutSwapBuffers();
 
}
//установка таймера
void Timer(int)
{
	angle += 0.5;//вращение
	glutTimerFunc(15, Timer, 0);//обновлять экран каждые 15мсек
	glutPostRedisplay();
}
 
int main(int argc, char **argv) {
 
	// инициализация
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);//double: буфер рисвания и буф сторонних вычислений
	glutInitWindowPosition(100, 100);//позиция окна
	glutInitWindowSize(500, 500);//размеры окна
	glutCreateWindow("окружности");//название окна
	glClearColor(1.0, 1.0, 1.0, 1.0);//цвет окна
	glOrtho(-5.0, 5.0, -5.0, 5.0, -5.0, 5.0);//установка границ
 
	glutDisplayFunc(paint);//вызов функции рисования
	glutReshapeFunc(proporsion);//вызов функции сохранения пропорций
	glutTimerFunc(0, Timer, 0);//вызов таймера
	glutMainLoop();//основной цикл
	return 1;
}

Прикрепленный файлРазмер
Al_Andari_Dvigenie_krugov.zip986.96 кб