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

Вход на сайт

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

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

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

torrvic, возможно, Вам нужно добавить -lGLU
Извините за тупой вопрос. У меня при сборке Вашего примера выходит ошибка: "undefined reference to gluLookAt". Не могу найти в какой библиотеке находится эта функция. У меня задано: -lGL -lglut ... Искал в /usr/lib таким образом: nm lib*so* | grep...
Здравствуйте. Спасибо за проект. У меня вопрос, по какой причине определение принадлежности точки многоугольнику работает некорректно, если координаты из больших чисел состоят, например: int[] vertex = new int[] {...
Сейчас проверила нашла причину не запускания // Создание контекста воспроизведения OpenGL и привязка его к панели на форме OpenGLControl1:=TOpenGLControl.Create(Self); with OpenGLControl1 do begin Name:='OpenGLControl1'; //вот тут...
Ну..кажется что то пошло не так http://pp.usera...

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

Рейтинг@Mail.ru
Скриншот к примеру
Среда программирования: 
Code::Blocks 16.01
Статья по теме: 

Программа создающая фрактал "Зевзда Дюрера".

Код программы: 

#include <SFML\Graphics.hpp>
#include <SFML\Window.hpp>
#include <iostream>
#include <math.h>
 
using namespace std;
 
const int winW = 750; //ширина
const int winH = 550; //высота
 
const float magicPi = 3.141596 / 5; //в статье константа
 
//Построение фрактала
void setFractal(float x, float y, float r, float angle, int deep, sf::VertexArray & target_va) {
	double h = 2 * r * cos(magicPi); //расстояние от центра пятиугольника до каждого центра внешних пятиугольников
 
	for (int i = 0; i < 5; i++) { 
 
		float ang2 = angle + magicPi*i * 2,
			x2 = x - h*cos(ang2),
			y2 = y - h*sin(ang2),
			rad2 = r / (2 * cos(magicPi) + 1),
			ang3 = angle + 3.141596 + (2 * i + 1)*magicPi;
		for (int j = 0; j < 4; j++) {
			sf::Vertex tmp_x, tmp_y;
			tmp_y.color = tmp_x.color = sf::Color::Yellow; //Задаем цвет временным переменным.
 
 
			tmp_x.position = sf::Vector2f((x + rad2*cos(ang3 + j*magicPi * 2)), (y + rad2*sin(ang3 + j*magicPi * 2))); //Вычисляем позицию верш х
 
			tmp_y.position = sf::Vector2f((x + rad2*cos(ang3 + (j + 1)*magicPi * 2)), (y + rad2*sin(ang3 + (j + 1)*magicPi * 2)));
			target_va.append(tmp_x);
			target_va.append(tmp_y);
 
 
		}
//Условие выхода
		if (deep > 0)
			setFractal(x2, y2, r / (2 * cos(magicPi) + 1), angle + 3.141596 + (2 * i + 1)*magicPi, deep - 1, target_va);
 
	}
 
}
 
 
 
int main() {
	sf::RenderWindow window(sf::VideoMode(winW, winH), "FRACTAL"); //Окно программы
 
	sf::VertexArray va; //наш массив вершин
	va.setPrimitiveType(sf::Lines); //рисуем линией
 
	setFractal(winW/2, winH/2, 70, 0, 7, va); //Вызов функции прорисовки
 
	while (1) {
		sf::Event event;
		while (window.pollEvent(event)) {      //Ждет событие
			// События закрытия окну по клику на крестик и по нажатию Esc
			if (event.type == sf::Event::Closed || event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape)
				return 0;
		}
		window.clear(); 
 
		window.draw(va);
 
		window.display();
	}
	return 0;
}

Прикрепленный файлРазмер
Zvezda durera.zip774.34 кб