GWM The Atlantis Cafe was a greasy spoon Cafe in Bristol. Professor Richard Gregory published a paper based on the illusion created by the tiles on the front of the cafe [L1 ].
See also Bulging Line Illusion Arrow Illusion.
This application allows you to control some of the parameters of the tiling.
PT: You can now see the actual site in Google street view now that they have driven around Bristol. See [L2 ]
The relative luminance of the mortar should be midway between the brightness of the light & dark tiles for the illusion to occur most strongly; this toyol (half way between a toy and a tool) could allow you to experiment with the degree of illusion.
{Copy this code into Wish console and run it. 2 scale controls control the offset of the tiles and the lightness of the grouting.}
GWM 26.10.04 Minor change to remove some unused variables. KJN 2008-10-17 remove some corrupted text
Jeff Smith 2020-09-01 : Below is an online demo using CloudTk. This demo runs "Atlantis Cafe Illusion" in an Alpine Linux Docker Container. It is a 27.4MB image which is made up of Alpine Linux + tclkit + Atlantis-Cafe-Illusion.kit + libx11 + libxft + fontconfig + ttf-linux-libertine. It is run under a user account in the Container. The Container is restrictive with permissions for "Other" removed for "execute" and "read" for certain directories.
# Atlantis Cafe effect - first reported by Prof Richard Gregory # see http://www.richardgregory.org/papers/cafe_wall/cafe-wall.doc # then at Bristol University, UK. The Atlantis Cafe was at the bottom of St Michael's Hill # but has now changed hands and lost the tiles. So, here they are again! # The luminance of the mortar between tiles affects the degree of illusion, as does # placing the tiles at the bottom of the screen and looking at the top of screen (peripheral vision). # The degree of overlap of the tiles also affects the degree of illusion. proc makerow {rowdata length height repeat colmort coldark collight} { ;# make an image data set # of bricks/tiles length by height, repeating every repeat along length. # colmort etc are 3 colours for mortar, dark tile light tile set tilelen [expr $repeat/2] for {set j 0} {$j<$height} { incr j} { ;# rows of picture set pix [list] for {set i 0} {$i<$length} { incr i } { if {$j<2} { lappend pix $colmort } else { if {[expr $i%$repeat<$tilelen-1]} { lappend pix $coldark } elseif {[expr $i%$repeat>($tilelen+1) && $i%$repeat<$repeat-2]} { lappend pix $collight } else { lappend pix $colmort } } } $rowdata put [list $pix] -to 0 $j } } proc mortar {ht size lumfrac} { ;# set mortar colour set colmo [format %02x [expr int($lumfrac*2.55)] ] makerow tilerow $size $ht 60 \#$colmo$colmo$colmo \#000000 \#ffffff } proc movetiles {ht frac} { ;# slide rows of tiles across the canvas catch [destroy .frm] {} ;# delete it. Same as clear. set frm [canvas .frm -width [expr 8*$ht] -height [expr 8*$ht] ] for {set j 0} {$j<8} { incr j} { ;# rows of tiles if {[expr $j%2]} {set dx $frac } else { set dx 0} label $frm.row$j -image tilerow -bd 0 -relief raised place $frm.row$j -x $dx -y [expr $j*$ht] } pack .frm } proc setup {size} { catch [destroy .dt] {} ;# delete it. Same as clear. catch [destroy .dlum] {} ;# delete it. Same as clear. wm title . "Atlantis Cafe" set ht [expr $size/16] scale .dt -variable frac -orient horizontal -label "fraction" -command "movetiles $ht" scale .dlum -variable lumf -orient horizontal -label "mortar luminance" -command "mortar $ht $size" image create photo tilerow -height $ht -width $size pack .dt .dlum -side top } global frac lumf set frac 10 set lumf 50 setup 450