ファイル:Point quadtree.svg

元のファイル(SVG ファイル、500 × 500 ピクセル、ファイルサイズ: 30キロバイト)

概要

解説A point quadtree
日付
原典self-made; originally for a talk at the 21st ACM Symp. on Computational Geometry, Pisa, June 2005
作者David Eppstein

Source code

The Python source code for generating this image:

import sysfrom random import seed, randrange# ==========================================================================#Recursive quadtree data structure# ==========================================================================def quadtree(points,topleft,botright):    if len(points) > 1:#        print >>sys.stderr,"splitting",len(points),topleft,botright        mid = [(topleft[i]+botright[i])*0.5 for i in range(2)]        svgLine((mid[0],topleft[1]),(mid[0],botright[1]))        svgLine((topleft[0],mid[1]),(botright[0],mid[1]))        quadtree([p for p in points if p[0]<mid[0] and p[1]<mid[1]],                 topleft,mid)        quadtree([p for p in points if p[0]<mid[0] and p[1]>=mid[1]],                 (topleft[0],mid[1]),(mid[0],botright[1]))        quadtree([p for p in points if p[0]>=mid[0] and p[1]<mid[1]],                 (mid[0],topleft[1]),(botright[0],mid[1]))        quadtree([p for p in points if p[0]>=mid[0] and p[1]>=mid[1]],                 mid,botright)        # ==========================================================================#SVG output utility routines# ==========================================================================nestingLevel = Nonedef svgTag(s, deltaIndentation = 0):"""Send a single XML tag to the SVG file.First argument is the tag with all its attributes appended.Second arg is +1, -1, or 0 if tag is open, close, or both respectively."""global nestingLevelif deltaIndentation < 0:nestingLevel -= 1if nestingLevel:sys.stdout.write('\t' * nestingLevel)sys.stdout.write('<')if deltaIndentation < 0:sys.stdout.write('/')sys.stdout.write(s)if not deltaIndentation:sys.stdout.write(' /')sys.stdout.write('>\n')if deltaIndentation > 0:nestingLevel += 1def svgHeader(maxX, maxY):"""Start producing an SVG object.The output bounding box runs from (0,0) to (maxX,maxY).Must be followed by svg content and a call to svgTrailer()."""global nestingLevelif nestingLevel is None:sys.stdout.write('''<?xml version="1.0" encoding="iso-8859-1"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">''')nestingLevel = 0svgTag('svg xmlns="http://www.w3.org/2000/svg" version="1.1" '   'width="%dpt" height="%dpt" viewBox="0 0 %d %d"'% (maxX, maxY, maxX, maxY), 1)def svgTrailer():"""End of SVG object."""svgTag('svg', -1)def svgStyle(style):"""Start a group of svg items with the given style.Argument is a string in the form of a list of svg item attributes.Must be followed by svg content and a call to svgEndStyle()."""svgTag('g ' + style, 1)def svgEdgeStyle(index):"""Look up edge style and call svgStyle with it."""svgStyle(globals()['edgeStyle' + str(index)])def svgEndStyle():"""Finish group of styled svg items."""svgTag('g', -1)def svgLine(start, end):"""Output line segment from start to end coordinates.Must be called within an svgStyle()/svgEndStyle() call pair."""svgTag('line x1="%d" y1="%d" x2="%d" y2="%d"' % (start+end) )def svgCircle(center, radius):"""Output circle with given center and radius coordinates.Must be called within an svgStyle()/svgEndStyle() call pair."""svgTag('circle cx="%d" cy="%d" r="%s"' % (center+(radius,)) )# ==========================================================================#Test code driver# ==========================================================================seed(27)svgRadius = 2svgBound = 400margin = 4def clusteredCoordinate(clusteringExponent,fractalExponent):    x = long(randrange(1000)**clusteringExponent)    y = 0    p = 1    while x:        if x & 1:            y += p        p *= fractalExponent        x >>= 1    return ydef clusteredPoint():    return clusteredCoordinate(2,2.5),clusteredCoordinate(1.5,3.2)points = [clusteredPoint() for i in range(250)]maxX = max(x for x,y in points)maxY = max(y for x,y in points)scaleX = 1.0*(svgBound-2*margin)/maxXscaleY = 1.0*(svgBound-2*margin)/maxYpoints = [(x*scaleX+margin,y*scaleY+margin) for x,y in points]svgHeader(svgBound,svgBound)svgStyle('fill="none" stroke="blue"')svgLine((1,1),(1,svgBound-1))svgLine((1,svgBound-1),(svgBound-1,svgBound-1))svgLine((svgBound-1,svgBound-1),(svgBound-1,1))svgLine((svgBound-1,1),(1,1))quadtree(points,(1,1),(svgBound-1,svgBound-1))svgEndStyle()svgStyle('fill="white" stroke="black"')for p in points:    svgCircle(p,svgRadius)svgEndStyle()svgTrailer()

ライセンス

Public domainこの著作物は、著作者であるI, David Eppsteinによって権利が放棄され、パブリックドメインとされました。これは全世界で適用されます。
一部の国では、これが法的に可能ではない場合があります。その場合は、次のように宣言します。
I, David Eppsteinは、あらゆる人に対して、法により必要とされている条件を除き、如何なる条件も課すことなく、あらゆる目的のためにこの著作物を使用する権利を与えます。

キャプション

このファイルの内容を1行で記述してください

このファイルに描写されている項目

題材

31 5 2005

ファイルの履歴

過去の版のファイルを表示するには、その版の日時をクリックしてください。

日付と時刻サムネイル寸法利用者コメント
現在の版2007年7月31日 (火) 02:592007年7月31日 (火) 02:59時点における版のサムネイル500 × 500 (30キロバイト)David Eppstein{{Information |Description= |Source=self-made; originally for [http://www.ics.uci.edu/~eppstein/pubs/EppGooSun-SoCG-05.pdf a talk at the 21st ACM Symp. on Computational Geometry, Pisa, June 2005] |Date=May 31, 2005 |Author= [[User:David Eppstein|David Epp

以下のページがこのファイルを使用しています:

グローバルなファイル使用状況

以下に挙げる他のウィキがこの画像を使っています: