Jump to content

File:Regular divisibility lattice.svg

Page contents not supported in other languages.
This is a file from the Wikimedia Commons
From Wikipedia, the free encyclopedia

Original file (SVG file, nominally 1,363 × 809 pixels, file size: 13 KB)

Summary

Description A Hasse diagram of divisibility relationships among regular numbers up to 400. As shown by the horizontal light red lines, the vertical position of each number is proportional to its logarithm. Inspired by similar diagrams in a paper by Kurenniemi [1].
Date 14 March 2007 (original upload date)
Source Transferred from en.wikipedia to Commons.
Author David Eppstein at English Wikipedia

Licensing

Public domain This work has been released into the public domain by its author, David Eppstein at English Wikipedia. This applies worldwide.
In some countries this may not be legally possible; if so:
David Eppstein grants anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law.

Source code

The Python source code for generating this image:

from math import log

limit = 400
radius = 17
margin = 4
xscale = yscale = 128
skew = 0.285

def A051037():
    yield 1
    seq = [1]
    spiders = [(2,2,0,0),(3,3,0,1),(5,5,0,2)]
    while True:
        x,p,i,j = min(spiders)
        if x != seq[-1]:
            yield x
            seq.append(x)
        spiders[j] = (p*seq[i+1],p,i+1,j)

def nfactors(h,p):
    nf = 0
    while h % p == 0:
        nf += 1
        h //= p
    return nf

seq = []
for h in A051037():
    if h > limit:
        break
    seq.append((h,nfactors(h,2),nfactors(h,3),nfactors(h,5)))

leftmost = max([k for h,i,j,k in seq])
rightmost = max([j for h,i,j,k in seq])
leftwidth = int(0.5 + log(5) * leftmost * xscale + radius + margin)
rightwidth = int(0.5 + log(3) * rightmost * xscale + radius + margin)
width = leftwidth + rightwidth
height = int(0.5 + log(limit) * yscale + 2*(radius + margin))

def place(h,i,j,k):
    # logical coordinates
    x = j * log(3) - k * log(5) + i * skew
    y = log(h)
    
    # physical coordinates
    x = (x*xscale) + leftwidth
    y = (-y*yscale) + height - radius - margin
    
    return (x,y)

print '''<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="%d" height="%d">''' % (width,height)

print '    <g style="fill:none;stroke:#ffaaaa;">'

l = 1
base = 1
while l <= limit:
    y = -yscale*log(l) + height - radius - margin
    print '        <path d="M0,%0.2fL%d,%0.2f"/>' % (y,width,y)
    l += base
    if l == 10*base:
        base = l

print "    </g>"
print '    <g style="fill:none;stroke-width:1.5;stroke:#0000cc;">'

def drawSegment(p,q):
    x1,y1=p
    x2,y2=q
    print '        <path d="M%0.2f,%0.2fL%0.2f,%0.2f"/>' % (x1,y1,x2,y2)

for h,i,j,k in seq:
    x,y = place(h,i,j,k)
    if i > 0:
        drawSegment(place(h//2,i-1,j,k),(x,y))
    if j > 0:
        drawSegment(place(h//3,i,j-1,k),(x,y))
    if k > 0:
        drawSegment(place(h//5,i,j,k-1),(x,y))

print "    </g>"
print '    <g style="fill:#ffffff;stroke:#000000;">'

for h,i,j,k in seq:
    x,y = place(h,i,j,k)
    print '        <circle cx="%0.2f" cy="%0.2f" r="%d"/>' % (x,y,radius)

# pairs of first value with size: size of that value
fontsizes = {1:33, 5:30, 10:27, 20:24, 100:20, 200:18}

for h,i,j,k in seq:
    x,y = place(h,i,j,k)
    if h in fontsizes:
        print "    </g>"
        print '    <g style="font-family:Times;font-size:%d;text-anchor:middle;">' % fontsizes[h]
        lower = fontsizes[h] / 3.
    print '        <text x="%0.2f" y="%0.2f">%d</text>' %(x,y+lower,h)
print "    </g>"
print "</svg>"

Original upload log

The original description page was here. All following user names refer to en.wikipedia.
  • 2007-03-14 05:08 David Eppstein 1363×809×0 (13167 bytes) A [[Hasse diagram]] of [[divisibility]] relationships among [[regular number]]s up to 400. Inspired by similar diagrams in a paper by Kurenniemi [http://www.beige.org/projects/dimi/CSDL2.pdf].

Captions

Add a one-line explanation of what this file represents

Items portrayed in this file

depicts

File history

Click on a date/time to view the file as it appeared at that time.

Date/TimeThumbnailDimensionsUserComment
current02:57, 13 March 2010Thumbnail for version as of 02:57, 13 March 20101,363 × 809 (13 KB)David EppsteinFix fonts
22:10, 24 July 2007Thumbnail for version as of 22:10, 24 July 20071,363 × 809 (13 KB)David Eppstein{{Information |Description=A en:Hasse diagram of en:divisibility relationships among en:regular numbers up to 400. As shown by the horizontal light red lines, the vertical position of each number is proportional to its en:logarithm. In

The following 2 pages use this file:

Global file usage

The following other wikis use this file: