希尔伯特曲线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()
希尔伯特曲线python3实现的更多相关文章
- matlab练习程序(生成希尔伯特曲线)
能够使用这样一条线遍历图像中所有的像素,不过这里没有这样做,而只是生成了这样一条曲线. 程序中h,w是最终图像的高和宽,n为希尔伯特曲线阶数. 这里如果n等于log2(h)或log2(w),则图像就全 ...
- hihocoder1322希尔伯特曲线(163周)
hihocoder1322 : 希尔伯特曲线(163周) 题目链接 思路: 看图,对每个Hn迭代到H(n-1) 直到迭代到1就ok,判断在哪个区间就好了.一定一定要注意数据的范围!! ac代码: // ...
- 希尔伯特曲线——第八届蓝桥杯C语言B组(国赛)第三题
原创 标题:希尔伯特曲线 希尔伯特曲线是以下一系列分形曲线 Hn 的极限.我们可以把 Hn 看作一条覆盖 2^n × 2^n 方格矩阵的曲线,曲线上一共有 2^n × 2^n 个顶点(包括左下角起点和 ...
- THREE.js代码备份——canvas - lines - colors(希尔伯特曲线3D、用HSL设置线颜色)
<!DOCTYPE html> <html lang="en"> <head> <title>three.js canvas - l ...
- 分形之希尔伯特-皮亚诺(Hilbert-Peano)曲线
1890年,意大利数学家皮亚诺(Peano G)发明能填满一个正方形的曲线,叫做皮亚诺曲线.后来,由希尔伯特作出了这条曲线,又名希尔伯特曲线.Hilbert-Peano曲线是一种分形图形,它可以画得无 ...
- UVaLive 7375 Hilbert Sort (递归,四分图,模拟)
题意:告诉你一条希尔伯特曲线的大小,然后给你n 个人,及n 个人的坐标,你的起点是左下角,终点是右下角,按照希尔伯特的曲线去走,按照这个顺序给n个人排序, 按顺序输出每个人的名字! 析:这就是一个四分 ...
- 蓝桥杯近3年决赛题之3(17年b组)
做的时候对了2个小题,一个大题可能会拿点分数. 1. 标题:36进制 对于16进制,我们使用字母A-F来表示10及以上的数字.如法炮制,一直用到字母Z,就可以表示36进制. 36进制中,A表示10,Z ...
- 高效的多维空间点索引算法 — Geohash 和 Google S2
原文地址:https://www.jianshu.com/p/7332dcb978b2 引子 每天我们晚上加班回家,可能都会用到滴滴或者共享单车.打开 app 会看到如下的界面: app ...
- C#实现Google S2算法
S2其实是来自几何数学中的一个数学符号 S²,它表示的是单位球.S2 这个库其实是被设计用来解决球面上各种几何问题的.值得提的一点是,除去 golang 官方 repo 里面的 geo/s2 完成度目 ...
随机推荐
- TurtleBot3 Waffle (tx2版华夫)(6)
重要提示:请在配网通信成功后进行操作,配网后再次开机需要重新验证通信: 重要提示:[Remote PC]代表PC端.[TurtelBot]代表树莓派端: 操作步骤如下: 1)[Remote PC] 启 ...
- 笔记本使用网线连接可以进行ftp下载,但是通过wifi连接只能登陆不能下载的问题。
环境: (1)服务器为阿里云服务器,有公网ip,有内网ip,公网和内网已经做了相关端口的映射,ftp服务器为FileZilla,ftp服务器被动模式已开启,防火墙已关闭 (2)ftp客户端为java写 ...
- 【老孟Flutter】Flutter 中与平台相关的生命周期
老孟导读:关于生命周期的文章共有2篇,一篇(此篇)是介绍 Flutter 中Stateful 组件的生命周期. 第二篇是 Flutter 中与平台相关的生命周期, 博客地址:http://laomen ...
- 利用github使自己的域名绑定CSDN博客
首先你要有一个GitHub账号和一个域名 在你自己GitHub账号中创建一个仓库 在仓库里创建一个index.html的文件 <!DOCTYPE html> <html& ...
- hdp、cdh版本大数据maven仓库
Hdp版本: <repositories> <repository> <id>nexus</id> <name>local private ...
- mysql 连接url中需要添加useUnicode=true&characterEncoding=UTF-8
下面是示例: 数据库中Username是张三 在数据库配置时没有配置编码 useUnicode=true&characterEncoding=UTF-8 导致期望与实际不同 配置useUni ...
- MyBatis中id回填的两种方式
在一种场景下需要刚刚插入数据的ID,如果数据少可以先看数据库,记下ID,但数据很多,假设一万个用户并发,每个用户都插入自己的ID,就很难记下来. 下面给定一个场景: 1 User user = new ...
- java反射-Method中的invoke方法的用法-以及函数式接口和lambda表达式
作者最近研究框架底层代码过程中感觉自己基础不太牢固,于是写了一点案例,以防日后忘记 接口类:Animals 1 public interface Animals { 2 3 public void e ...
- 分贝单位的本质(下半篇),dBm、dBFS、dBV的妙处你想象不到
上半篇讲到了声音分贝的概念, 对于声音的单位:dB SPL和dB SIL,有兴趣了解并推算的朋友,可以点击以下链接(PC端效果更佳) http://www.sengpielaudio.com/calc ...
- .netcore 急速接入第三方登录,不看后悔
新年新气象,趁着新年的喜庆,肝了十来天,终于发了第一版,希望大家喜欢. 如果有不喜欢看文字的童鞋,可以直接看下面的地址体验一下: https://oauthlogin.net/ 前言 此次带来得这个小 ...