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

  1. #coding:utf-8
  2. from OpenGL.GL import *
  3. from OpenGL.GLUT import *
  4. class fractal(object):
  5. def __init__(self):
  6. self.points=[]
  7.  
  8. def get(self):
  9. return self.points
  10. def gls(self):
  11. list1=glGenLists(1)
  12. glNewList(list1,GL_COMPILE)
  13. glBegin(GL_LINE_STRIP)
  14. for l in self.points:
  15. glVertex2fv(l)
  16. glEnd()
  17. glEndList()
  18. return list1
  19. def hilbert(self,lb,rt,n,tr=0):
  20. if n==5:
  21. if tr:
  22. dx=(rt[0]-lb[0])/4.
  23. dy=(rt[1]-lb[1])/4.
  24. self.points.append([lb[0]+dx,lb[1]+dy])
  25. self.points.append([lb[0]+3*dx,lb[1]+dy])
  26. self.points.append([rt[0]-dx,rt[1]-dy])
  27. self.points.append([lb[0]+dx,lb[1]+3*dy])
  28. return
  29. dx=(rt[0]-lb[0])/4.
  30. dy=(rt[1]-lb[1])/4.
  31. self.points.append([lb[0]+dx,lb[1]+dy])
  32. self.points.append([lb[0]+dx,lb[1]+3*dy])
  33. self.points.append([rt[0]-dx,rt[1]-dy])
  34. self.points.append([lb[0]+3*dx,lb[1]+dy])
  35. return
  36. dx=(rt[0]-lb[0])/2.
  37. dy=(rt[1]-lb[1])/2.
  38. if not tr:
  39. self.hilbert(lb,[lb[0]+dx,lb[1]+dy] ,n+1,1)
  40. self.hilbert([lb[0],lb[1]+dy],[rt[0]-dx,rt[1]], n+1)
  41. self.hilbert([rt[0]-dx,rt[1]-dy],rt, n+1)
  42. self.hilbert([rt[0],rt[1]-dy],[rt[0]-dx,lb[1]], n+1,1)
  43. if tr:
  44. self.hilbert(lb,[lb[0]+dx,lb[1]+dy] ,n+1)
  45. self.hilbert([lb[0]+dx,lb[1]],[rt[0],rt[1]-dy], n+1,1)
  46. self.hilbert([rt[0]-dx,rt[1]-dy],rt, n+1,1)
  47. self.hilbert([rt[0]-dx,rt[1]],[lb[0],rt[1]-dy], n+1)
  48.  
  49. def Draw():
  50. global list1
  51. glClear(GL_COLOR_BUFFER_BIT)
  52. #glColor3f(0,1.,0)
  53. glCallList(list1)
  54. glutSwapBuffers()
  55.  
  56. def onreshape(w,h):
  57. if min(w,h)<1:
  58. w,h=1,1
  59. s=6.
  60. glMatrixMode(GL_PROJECTION)
  61. glLoadIdentity()
  62. glViewport(0,0,w,h)
  63. glOrtho(-s,s,-s*float(h)/w,s*float(h)/w,0,10)
  64. glMatrixMode(GL_MODELVIEW)
  65. glLoadIdentity()
  66.  
  67. if __name__=="__main__":
  68. k=fractal()
  69. k.hilbert([-5.,-5.],[5.,5.],0)
  70. s=k.get()
  71. print(len(s),s)
  72. glutInit()
  73. glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA)
  74. glutInitWindowSize(256, 256)
  75. glutCreateWindow("hilbert")
  76. list1=k.gls()
  77. glutDisplayFunc(Draw)
  78. glutReshapeFunc(onreshape)
  79. #glutIdleFunc(Draw)
  80. 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. TurtleBot3 Waffle (tx2版华夫)(6)

    重要提示:请在配网通信成功后进行操作,配网后再次开机需要重新验证通信: 重要提示:[Remote PC]代表PC端.[TurtelBot]代表树莓派端: 操作步骤如下: 1)[Remote PC] 启 ...

  2. 笔记本使用网线连接可以进行ftp下载,但是通过wifi连接只能登陆不能下载的问题。

    环境: (1)服务器为阿里云服务器,有公网ip,有内网ip,公网和内网已经做了相关端口的映射,ftp服务器为FileZilla,ftp服务器被动模式已开启,防火墙已关闭 (2)ftp客户端为java写 ...

  3. 【老孟Flutter】Flutter 中与平台相关的生命周期

    老孟导读:关于生命周期的文章共有2篇,一篇(此篇)是介绍 Flutter 中Stateful 组件的生命周期. 第二篇是 Flutter 中与平台相关的生命周期, 博客地址:http://laomen ...

  4. 利用github使自己的域名绑定CSDN博客

    首先你要有一个GitHub账号和一个域名 在你自己GitHub账号中创建一个仓库 ​ 在仓库里创建一个index.html的文件 ​ ​ <!DOCTYPE html> <html& ...

  5. hdp、cdh版本大数据maven仓库

    Hdp版本: <repositories> <repository> <id>nexus</id> <name>local private ...

  6. mysql 连接url中需要添加useUnicode=true&characterEncoding=UTF-8

    下面是示例: 数据库中Username是张三 在数据库配置时没有配置编码  useUnicode=true&characterEncoding=UTF-8 导致期望与实际不同 配置useUni ...

  7. MyBatis中id回填的两种方式

    在一种场景下需要刚刚插入数据的ID,如果数据少可以先看数据库,记下ID,但数据很多,假设一万个用户并发,每个用户都插入自己的ID,就很难记下来. 下面给定一个场景: 1 User user = new ...

  8. java反射-Method中的invoke方法的用法-以及函数式接口和lambda表达式

    作者最近研究框架底层代码过程中感觉自己基础不太牢固,于是写了一点案例,以防日后忘记 接口类:Animals 1 public interface Animals { 2 3 public void e ...

  9. 分贝单位的本质(下半篇),dBm、dBFS、dBV的妙处你想象不到

    上半篇讲到了声音分贝的概念, 对于声音的单位:dB SPL和dB SIL,有兴趣了解并推算的朋友,可以点击以下链接(PC端效果更佳) http://www.sengpielaudio.com/calc ...

  10. .netcore 急速接入第三方登录,不看后悔

    新年新气象,趁着新年的喜庆,肝了十来天,终于发了第一版,希望大家喜欢. 如果有不喜欢看文字的童鞋,可以直接看下面的地址体验一下: https://oauthlogin.net/ 前言 此次带来得这个小 ...