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

Вход на сайт

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

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

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

Спасибо за реализацию, она действительно быстрая. Но не все линии отрисовывает в нужную сторону... Необходимо добавить проверку для случая X-линии if(y1 "<" y0) grad=-grad; и аналогично для Y-линии if(x1 "<" x0) grad=-grad; P.S. На...
Отличные уроки(учу GL по ним), только в renderScene нужно добавить очистку буфера цвета и буфера глубины. При изменении размеров треугольники размножаются)
как исправить это , сделал все по инструкции
Timer1 - выдает ошибку. Использовал IdleTimer1, работает! unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, OpenGLContext, GL, GLU; type { TForm1 } TForm1 =...
в коде присутствуют ошибки! // Считываем координаты procedure TForm1.getCoords(Sender: TObject); var j1:longint; begin n:= StrToInt(Edit2.Text); //число точек s1:=Edit1.Text; s2:=''; i := 1; j:=1; k:=0...

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

Яндекс.Метрика Рейтинг@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 кб