希尔伯特曲线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 完成度目 ...
随机推荐
- 对CAS中atomicInteger实现的思考
p.p1 { margin: 0; font: 11px Monaco } span.s1 { color: rgba(147, 26, 104, 1) } span.s2 { color: rgba ...
- Spring框架之spring-webmvc源码完全解析
Spring框架之spring-webmvc源码完全解析 Spring框架提供了构建Web应用程序的全功能MVC模块.Spring MVC分离了控制器.模型对象.分派器以及处理程序对象的角色,支持多种 ...
- Label_img&a
绝对路径 相对路径 从根目录开始写 从引用的文件所在目录开始写 也可以作为链接提示 target = _blank 新窗口打开 = _self 默认值 本窗口打开 = _new 新窗口打开 = _pa ...
- JAVA开发手册-Markdown
前言 前 言 <Java 开发手册>是技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善.现代软件行业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程知识点 ...
- Kubernetes学习笔记之认识Kubernetes组件
前言:笔记知识点来源于Kubernetes官方文档说明,链接:https://kubernetes.io/docs/concepts/overview/components/ ,本记录仅仅是学习笔记记 ...
- AttGAN: Facial Attribute Editing by Only Changing What You Want 论文阅读笔记和AttGan的pytorch代码实现
1.总体框架 上面的过程用详细描述即是 Test阶段: Train阶段: 由于我们无法得知编辑后的image,所以显而易见人脸属性编辑是一个无监督问题,而对于我们的xa需要获得关于b的属性,故利用at ...
- zookeeper读取事务日志、快照日志
zookeeper的事务日志的格式如 log.xxx, xxx表示顺序序号 我使用的zookeeper版本:3.5.5 事务日志 执行命令 java -cp .:/tmp/zookeeper-3.5. ...
- CopyOnWriteArrayList 读写分离,弱一致性
为什么会有CopyOnWriteArrayList? 我们知道ArrayList和LinkedList实现的List都是非线程安全的,于是就有了Vector,它是基于ArrayList的线程安全集合, ...
- 通过trace分析优化其如何选择执行计划
mysql5.6提供了对sql的跟踪trace,通过trace文件能够进一步了解为什么优化其选择执行计划a而不选b执行计划,帮助我们更好的理解优化其的行为. 使用方式:首先打开trace,设置格式为j ...
- CTFHub - Web(五)
eval执行: 1.进入网页,显示源码, <?php if (isset($_REQUEST['cmd'])) { eval($_REQUEST["cmd"]); } els ...