zoukankan      html  css  js  c++  java
  • 希尔伯特曲线python3实现

    需要OpenGL库:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyopengl

    #coding:utf-8
    from OpenGL.GL import *
    from OpenGL.GLUT  import *
    class fractal(object):
        def __init__(self):
            self.points=[]
        
        def get(self):
            return self.points
        def gls(self):
            list1=glGenLists(1)
            glNewList(list1,GL_COMPILE)
            glBegin(GL_LINE_STRIP)
            for l in self.points:
                glVertex2fv(l)
            glEnd()    
            glEndList() 
            return list1
        def hilbert(self,lb,rt,n,tr=0):
            if n==5:
                if tr:
                    dx=(rt[0]-lb[0])/4.
                    dy=(rt[1]-lb[1])/4.
                    self.points.append([lb[0]+dx,lb[1]+dy])
                    self.points.append([lb[0]+3*dx,lb[1]+dy])
                    self.points.append([rt[0]-dx,rt[1]-dy])
                    self.points.append([lb[0]+dx,lb[1]+3*dy])                
                    return
                dx=(rt[0]-lb[0])/4.
                dy=(rt[1]-lb[1])/4.
                self.points.append([lb[0]+dx,lb[1]+dy])
                self.points.append([lb[0]+dx,lb[1]+3*dy])
                self.points.append([rt[0]-dx,rt[1]-dy])
                self.points.append([lb[0]+3*dx,lb[1]+dy])
                return 
            dx=(rt[0]-lb[0])/2.
            dy=(rt[1]-lb[1])/2.
            if not tr:
                self.hilbert(lb,[lb[0]+dx,lb[1]+dy] ,n+1,1)
                self.hilbert([lb[0],lb[1]+dy],[rt[0]-dx,rt[1]], n+1)
                self.hilbert([rt[0]-dx,rt[1]-dy],rt, n+1)
                self.hilbert([rt[0],rt[1]-dy],[rt[0]-dx,lb[1]], n+1,1)
            if tr:
                self.hilbert(lb,[lb[0]+dx,lb[1]+dy] ,n+1)
                self.hilbert([lb[0]+dx,lb[1]],[rt[0],rt[1]-dy], n+1,1)
                self.hilbert([rt[0]-dx,rt[1]-dy],rt, n+1,1)
                self.hilbert([rt[0]-dx,rt[1]],[lb[0],rt[1]-dy], n+1)            
       
            
    def Draw():
        global list1
        glClear(GL_COLOR_BUFFER_BIT)
        #glColor3f(0,1.,0)
        glCallList(list1)
        glutSwapBuffers()
     
    def onreshape(w,h):
        if min(w,h)<1:
            w,h=1,1
        s=6.
        glMatrixMode(GL_PROJECTION)
        glLoadIdentity()
        glViewport(0,0,w,h)
        glOrtho(-s,s,-s*float(h)/w,s*float(h)/w,0,10)
        glMatrixMode(GL_MODELVIEW)
        glLoadIdentity()
     
    if __name__=="__main__":
        k=fractal()
        k.hilbert([-5.,-5.],[5.,5.],0)
        s=k.get()
        print(len(s),s)
        glutInit()
        glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA)
        glutInitWindowSize(256, 256)
        glutCreateWindow("hilbert")
        list1=k.gls()
        glutDisplayFunc(Draw)
        glutReshapeFunc(onreshape)
        #glutIdleFunc(Draw)
        glutMainLoop()
    

      

  • 相关阅读:
    4.再来看看逆向——OD的简介
    3.资源里加个混淆
    反编译python打包的exe文件
    2.释放资源那些事
    1.恶意软件中的防双开
    windbg源码驱动调试 + 无源码驱动调试
    [转]当勒索病毒“不图财”时会图什么?
    勒索病毒加密过程分析1——简易加密型(坏兔子病毒)
    通过驱动杀死那个进程
    前端学习笔记 day14 模拟滚动条
  • 原文地址:https://www.cnblogs.com/0day-li/p/13557740.html
Copyright © 2011-2022 走看看