HomePage | Optical Illusions | War Stories | QBasic | Dads Navy Days | Bristol | Bristol, USA | Bristol, Canada | Terre Haute | Miscellany | Web Stuff | About Ray | Site Map | Site Search | Messages | Credits | Links | Web Rings
QBasic | Errors | 40lb Weight | Bits | Chance | Colours | Dates | Delays | File Dialog | Files | Input | Matching | Menus | Mouse | Numbers | SeqNo | SIRDS | Sorts | Text | Timer | DLoads
SIRDS - Single Image Random Dot Stereograms
Trust me! I must have been the last person in the world to know how to view these images, and that was only with Patty's help. Not only that, but just as I managed to be able to see the hidden images then everyone else started getting bored with them. So this is a piece of (very) retro programming!!
This page is for Patty Waltermire who showed me how to view the images and who has a huge collection of Magic Eye pictures.
Cone SIRD ~ Screenshot
SIRDS - What they are and how to view them
Each of our eyes sees a very slightly different view of the world, this difference is only roughly 1.5 inches but it's enough to give us stereoscopic vision. The smaller the difference between these two images the closer the image must be to us. SIRDs images are made up of repeating patterns, but there are subtle differences in each pattern. By forcing your eyes to superimpose these patterns on top of eachother then the differences in them are interpreted as a 3D image.
To view the stereograms it is neccessary to focus your eyes, usually at a point behind the screen, so that the left eye is looking through one pattern of dots and the right is looking through a neighbouring pattern. The difference in the patterns is what produces the 3D effect.
The program allows you change the settings for the dot patterns. The variable InterOc allows changes in the Interocular Gap. That is the distance between the dot clusters. Density allows you to change the number of dots in an area of the screen. More dots can enhance the 3D effect, but the larger number of dots in the background can be distracting which means that you can lose focus. Height and VirtZ controls the "height" of the object, the "depth" of the 3D object. Polarity controls the Polarity of the image, i.e. whether it advances or recedes from you. Shape controls which shape is displayed.
'SIRDS.BAS January 2001 'Programming by Ray Thomas Mathematics by Patty Waltermire 'A program to produce Single Image Random Dot Stereograms Density = 1000 InterOc = 70 Polarity = 0 VirtZ = 10 Shape = 3 PixCorrn = .5 '*** Shape 0 is the background only *** '*** Shape 1 is a rectangle *** '*** Shape 2 is a circle *** '*** Shape 3 is a cone *** '*** Shape 4 is a hemisphere *** '*** Shape 5 is a torus *** CLS SCREEN 9 InitZ = VirtZ '*** Create Density number of random coloured dots *** '*** in a vertical strip InterOc wide *** RANDOMIZE TIMER FOR Count = 1 TO Density PosnX = (RND * InterOc) + 1 PosnY = (RND * 350) + 1 Colour = (RND * 15) PSET (PosnX, PosnY), Colour GOSUB DoOffSet NEXT Count END DoOffSet: ' *** Redraws the dots across the screen WHILE PosnX < 640 GOSUB CalcZ IF Polarity = 0 THEN VirtZ = -VirtZ PosnX = PosnX + InterOc + VirtZ IF PosnX < 640 THEN PSET (PosnX, PosnY), Colour WEND RETURN CalcZ: '*** Calculates the virtual Z co-ordinate VirtZ = 0 '*** Centre of screen is at 320,175 *** '*** PixCorrn is to correct for the fact *** '*** that screen pixels are not square *** Dist = SQR(((PosnX - 320) * PixCorrn * (PosnX - 320)) + ((PosnY - 175) * (PosnY - 175))) '*** Shape 1 is a rectangle *** IF Shape = 1 THEN IF PosnX > 220 AND PosnX < 420 THEN IF PosnY > 100 AND PosnY < 250 THEN VirtZ = InitZ END IF END IF END IF '*** Shape 2 is a circle *** IF Shape = 2 THEN Rad = 100 IF Dist < Rad THEN VirtZ = InitZ END IF '*** Shape 3 is a cone *** IF Shape = 3 THEN Rad = 100 Height = 40 Result = (Rad - Dist) * (Height / Rad) IF Result > 0 THEN VirtZ = Result END IF '*** Shape 4 is a hemisphere *** IF Shape = 4 THEN Rad = 60 IF Dist < Rad THEN Result = SQR((Rad * Rad) - (Dist * Dist)) VirtZ = Result / (PixCorrn * 10) END IF END IF '*** Shape 5 is a torus *** IF Shape = 5 THEN IntRad = 40 ExtRad = 100 DiffRad = ExtRad - IntRad IF Dist > IntRad AND Dist < ExtRad THEN Result = SQR((DiffRad * DiffRad) - ((Dist - DiffRad) * (Dist - DiffRad))) VirtZ = Result * PixCorrn END IF END IF RETURN
I've written about how to view and how SIRDS work in the Optical Illusion section of the site.
The sites listed below show exactly how these images are produced and also the type that are produced from repeated images.
Other sites of interest
Another list of SIRDs programs
QBasic | Errors | 40lb Weight | Bits | Chance | Colours | Dates | Delays | File Dialog | Files | Input | Matching | Menus | Mouse | Numbers | SeqNo | SIRDS | Sorts | Text | Timer | DLoads
HomePage | Optical Illusions | War Stories | QBasic | Dads Navy Days | Bristol | Bristol, USA | Bristol, Canada | Terre Haute | Miscellany | Web Stuff | About Ray | Site Map | Site Search | Messages | Credits | Links | Web Rings
This page was last updated on 24th October 2003