需要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()

  

希尔伯特曲线python3实现的更多相关文章

  1. matlab练习程序(生成希尔伯特曲线)

    能够使用这样一条线遍历图像中所有的像素,不过这里没有这样做,而只是生成了这样一条曲线. 程序中h,w是最终图像的高和宽,n为希尔伯特曲线阶数. 这里如果n等于log2(h)或log2(w),则图像就全 ...

  2. hihocoder1322希尔伯特曲线(163周)

    hihocoder1322 : 希尔伯特曲线(163周) 题目链接 思路: 看图,对每个Hn迭代到H(n-1) 直到迭代到1就ok,判断在哪个区间就好了.一定一定要注意数据的范围!! ac代码: // ...

  3. 希尔伯特曲线——第八届蓝桥杯C语言B组(国赛)第三题

    原创 标题:希尔伯特曲线 希尔伯特曲线是以下一系列分形曲线 Hn 的极限.我们可以把 Hn 看作一条覆盖 2^n × 2^n 方格矩阵的曲线,曲线上一共有 2^n × 2^n 个顶点(包括左下角起点和 ...

  4. THREE.js代码备份——canvas - lines - colors(希尔伯特曲线3D、用HSL设置线颜色)

    <!DOCTYPE html> <html lang="en"> <head> <title>three.js canvas - l ...

  5. 分形之希尔伯特-皮亚诺(Hilbert-Peano)曲线

    1890年,意大利数学家皮亚诺(Peano G)发明能填满一个正方形的曲线,叫做皮亚诺曲线.后来,由希尔伯特作出了这条曲线,又名希尔伯特曲线.Hilbert-Peano曲线是一种分形图形,它可以画得无 ...

  6. UVaLive 7375 Hilbert Sort (递归,四分图,模拟)

    题意:告诉你一条希尔伯特曲线的大小,然后给你n 个人,及n 个人的坐标,你的起点是左下角,终点是右下角,按照希尔伯特的曲线去走,按照这个顺序给n个人排序, 按顺序输出每个人的名字! 析:这就是一个四分 ...

  7. 蓝桥杯近3年决赛题之3(17年b组)

    做的时候对了2个小题,一个大题可能会拿点分数. 1. 标题:36进制 对于16进制,我们使用字母A-F来表示10及以上的数字.如法炮制,一直用到字母Z,就可以表示36进制. 36进制中,A表示10,Z ...

  8. 高效的多维空间点索引算法 — Geohash 和 Google S2

    原文地址:https://www.jianshu.com/p/7332dcb978b2   引子 每天我们晚上加班回家,可能都会用到滴滴或者共享单车.打开 app 会看到如下的界面:     app ...

  9. C#实现Google S2算法

    S2其实是来自几何数学中的一个数学符号 S²,它表示的是单位球.S2 这个库其实是被设计用来解决球面上各种几何问题的.值得提的一点是,除去 golang 官方 repo 里面的 geo/s2 完成度目 ...

随机推荐

  1. LINUX五中IO模型

    阻塞IO模型 用户空间调用recvfrom命令 直到数据包到达且被复制到应用进程的缓冲区或发生错误时才返回,这个过程中 进程亦或线程一直处于等待阻塞状态. 2.非阻塞IO模型 用户空间调用内核指令re ...

  2. git基础-撤销操作

    ---恢复内容开始--- 撤销操作 在任何阶段,你都有可能想要撤销某些操作. 当我们提交完了代码,发现漏掉了几个文件没有添加,后者提交信息写错了,此时,可以运行--amend选项的提交命令尝试重新提交 ...

  3. java操作HDFS相关demo(TDH,kerberos认证)

    public class Test {     private static Configuration conf;     private static FileSystem fs;     //开 ...

  4. 四、hive安装

    一.安装方式(内嵌模式,本地模式远程模式) 安装环境以及前提说明: Hive是依赖于hadoop系统的,因此在运行Hive之前需要保证已经搭建好hadoop集群环境. 本例中使用的hadoop版本为2 ...

  5. JavaScript入门-学习笔记(二)

    关于js变量 变量,就是一个用来存储数据的容器 一般来说,我们的变量都是可以得先声明,再使用,就像是一个东西先必须存在,才能看得见摸得着.然而在js里(es5),可以先使用,后声明. a = 100; ...

  6. 网络爬虫第一步:通用代码框架(python版)

    import requests def getHTMLText(url):     try:         r=requests.get(url,timeout=30)         r.rais ...

  7. idea thymeleaf页面变量报错解决

    IDEA在thymeleaf页面编写变量,如${user.id}会出现红色波浪下划线错误,提示Validates unresolved references and invalid expressio ...

  8. 2021升级版微服务教程5—通过IDEA运行多个项目实例「模拟集群」

    2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」 教程全目录「含视频」:https://gitee.c ...

  9. .NET探索平台条件编译

    前言 今天偶然机会,翻了一下大学期间的书籍<C程序设计>,好吧,当我翻着翻着,翻到了符号常量(#define指令)中,是啊,这是一个预处理器指令,记得在Magicodes.IE中针对平台选 ...

  10. FlatBuffers使用小结

    最近做一个Android APP,由于离线业务需求,需要在启动APP时候同步大量数据到APP上,遇到了JSON性能瓶颈.从下方的图片中可以看出,当使用 json 传输数据,在解析json的时候会产生大 ...