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

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

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

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

У меня проблема вот с этим: gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);. Вылезает ошибка: CS1061 "object" не содержит определения "GL_COLOR_BUFFER_BIT", и не удалось найти доступный метод расширения "GL_COLOR_BUFFER_BIT",...
Большое спасибо. Единственный код который прошел без каких либо ошибок. Ура!!!
Скажите пожалуйста, подскажите алгоритм по которому по заданным точкам можно определить тип многогранника, скажем это куб или прямоугольный параллелепипед. Нашел теорию по этим фигурам: https://www.mat... https://www.mat... Акцентировать внимание...
Всем у кого не работает. файл wizard.script Ещё одно упоминание Glut32 в строке "if (!VerifyLibFile(dir_nomacro_lib, _T("glut32"), _T("GLUT's"))) return false;" меняем на "if (!VerifyLibFile(dir_nomacro_lib, _T("freeglut"), _T("GLUT's"))) return...
Не получается, емаё

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

Рейтинг@Mail.ru Яндекс.Метрика
Скриншот к примеру
Среда программирования: 
Brackets build 1.14.2-17770
Статья по теме: 

Программа, отрисовывающая фрактал Висекка, написанная на Python.
В первом поле ввода - задаем ширину для отрисовки.
По нажатии на кнопку "Расчитать" отрисуется фрактал, образованный с удалением угловых
квадратов, если нажат соответствующий checkbutton, с удержанием угловых квадратов - иначе.

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

from tkinter import *
from tkinter import messagebox
import colorsys
 
 
class Application(Frame):
 
    def __init__(self,master=None):
        super().__init__(master)
        self.grid()
        self.create_widgets()
        self.master.title("Фрактал Висекка")
        self.master.geometry(f"1100x480+50+50")
        self.master.resizable(False, False)  
 
    def create_widgets(self):
 
        left_frame = Frame(root, width=640, height=480, pady=5).grid(row=0,column=0,sticky="wens")
        right_frame = Frame(root,width=460, height=480, padx=5, pady=5)
        right_frame.grid(row=0,column=1,sticky="wens")
 
#        холст для вывода фрактала
        self.canvas = Canvas(left_frame,width=640,height=480)
        self.canvas.grid(row=0, column=0,sticky="wens", pady=5, padx=5)
 
#        ввод ширины поля для отрисовки фрактала
        Label(right_frame,text="Ширина прорисовки",font=('Arial',10)).grid(
            row=0, column=0,sticky="w", pady=5, padx=5)
        self.enteredValue = IntVar()
        Entry(right_frame,textvariable = self.enteredValue,width=15,font=('Arial',10)).grid(
            row=0,column=1,sticky="w",padx=5,pady=5)
 
#        выбор вида построения
        self.CheckVar= IntVar()
        R1 = Checkbutton(right_frame, text = "C удалением угловых квадратов", variable = self.CheckVar, onvalue = 1, offvalue = 0).grid(row=1,column=0,sticky="we",padx=5,pady=5,columnspan=2)
 
#        кнопка для вывода 
        Button(right_frame,text="Расчитать",font=('Arial',10),command=lambda: self.calc()).grid(
            row=2,column=0,columnspan=2, stick="we",padx=5,pady=5)
 
#    метод вызывающий отрисовку фрактала
    def calc(self):
#        очищаем холст перед отрисовкой
        self.canvas.delete("all")
        self.L = self.enteredValue.get()  
#        вызываем метод vicsek - передаем центр холста, ширину прорисовки и глубину просчета от 1 до 5 
#        если выбрано построение с удалением угловых коэфиициентов вызываем vicsek2, если с сохранением - vicsek1 
        if self.CheckVar.get()==1:
            self.vicsek2(320,240,self.L,5)
        else: 
            self.vicsek1(320,240,self.L,5)
 
    def vicsek1(self,x,y,length,n):
        if n==0:
            self.draw_cross(x,y,length)
            return
#        Рассчитываем центры для ветвей
        self.vicsek1(x,y,length/3,n-1)
        self.vicsek1(x+length/3,y,length/3,n-1)
        self.vicsek1(x-length/3,y,length/3,n-1)
        self.vicsek1(x,y+length/3,length/3,n-1)
        self.vicsek1(x,y-length/3,length/3,n-1)
 
    def vicsek2(self,x,y,length,n):
        if n==0:
            self.draw_cross(x,y,length)
            return
#        Рассчитываем центры для ветвей
        self.vicsek2(x-length/3,y-length/3,length/3,n-1)
        self.vicsek2(x-length/3,y+length/3,length/3,n-1)
        self.vicsek2(x+length/3,y-length/3,length/3,n-1)
        self.vicsek2(x+length/3,y+length/3,length/3,n-1)
        self.vicsek2(x,y,length/3,n-1)
 
    def draw_cross(self,x,y,length):
#        выбираем цвет для фигуры
        h =(x**2+y**2)**0.5/self.L
        r,g,b = colorsys.hsv_to_rgb(h,1,1)
        sx=x-length/2
        sy=y-length/6
        d=length/3
#        рисуем крестик
        self.canvas.create_line(sx,sy,sx,sy+d,fill="#%02x%02x%02x"%(round(r * 255), round(g * 255), round(b * 255)))  
        self.canvas.create_line(sx,sy+d,sx+d,sy+d,fill="#%02x%02x%02x"%(round(r * 255), round(g * 255), round(b * 255)))
        self.canvas.create_line(sx+d,sy+d,sx+d,sy+2*d,fill="#%02x%02x%02x"%(round(r * 255), round(g * 255), round(b * 255)))
        self.canvas.create_line(sx+d,sy+2*d,sx+2*d,sy+2*d,fill="#%02x%02x%02x"%(round(r * 255), round(g * 255), round(b * 255)))
        self.canvas.create_line(sx+2*d,sy+2*d,sx+2*d,sy+d,fill="#%02x%02x%02x"%(round(r * 255), round(g * 255), round(b * 255)))
        self.canvas.create_line(sx+2*d,sy+d,sx+3*d,sy+d,fill="#%02x%02x%02x"%(round(r * 255), round(g * 255), round(b * 255)))
        self.canvas.create_line(sx+3*d,sy+d,sx+3*d,sy,fill="#%02x%02x%02x"%(round(r * 255), round(g * 255), round(b * 255)))
        self.canvas.create_line(sx+3*d,sy,sx+2*d,sy,fill="#%02x%02x%02x"%(round(r * 255), round(g * 255), round(b * 255)))
        self.canvas.create_line(sx+2*d,sy,sx+2*d,sy-d,fill="#%02x%02x%02x"%(round(r * 255), round(g * 255), round(b * 255)))
        self.canvas.create_line(sx+2*d,sy-d,sx+d,sy-d,fill="#%02x%02x%02x"%(round(r * 255), round(g * 255), round(b * 255)))
        self.canvas.create_line(sx+d,sy-d,sx+d,sy,fill="#%02x%02x%02x"%(round(r * 255), round(g * 255), round(b * 255)))
        self.canvas.create_line(sx+d,sy,sx,sy,fill="#%02x%02x%02x"%(round(r * 255), round(g * 255), round(b * 255)))
root = Tk()
app = Application(master=root)
root.mainloop()

Прикрепленный файлРазмер
tsybrik_example_vicsek.rar1.44 кб