# Autostereogram TODO ## Random Dots TODO ``` .:,oX#r-'/=*miQ .:,oX#r-'/=*miQ .:,oX#r-'/=*miQ .:,oX#r-'/=*miQ .:,oX#r-'/=*miQ .:,oX#r-'/=*miQ miQ)35;_0p]w@x4EmiQ)35;_0p]w@x4EmiQ)35;_0p]w@x4EmiQ)35;_0p]w@x4EmiQ)35;_0p]w@x4EmiQ)35;_0p]w@x4E x4EY!{ .:,oX#r-'x4EY!{ .:,oX#r-'x4EY!{ .:,oX#r-'x4EY!{ .:,oX#r-'x4EY!{ .:,oX#r-'x4EY!{ .:,oX#r-' r-'/=*miQ)35;_0pr'/=*miQ)35;_00pr'/=*miQ)35;_00pr'/=*miQ)35;_00pr'/=*miQ)35;_00pr'/=*miQ)35;_00p _0p]w@x4EY!{ .:,_0]w@x4EY!{ ..:,_0]w@x4EY!..:,_0]w@x4EY!..:.:,_0]w@x4EY!..:.:,_0]w@x4EY!..:.:,_0 .:,oX#r-'/=*miQ).:,o#r-'/=**miQ).:,o#r-'/=*iQ).:,o#r-'/=*iQ).).:,o#r-'/=*iQ.).:,o#r-''/=*iQ).).: iQ)35;_0p]w@x4EYiQ)3;_0p]w@@x4EYiQ)3;_0p]w@@EYiQ)3;3;_0w@@EYiQiQ)3;3;_0w@EYiQiQ)3;3;_0w@@EYYiQiQ 4EY!{ .:,oX#r-'/4EY! .:,oX##r-'/4EY! .:,oX##'/4EY! ! .:,##'/4E4EY! ! .,##'/4E44EY! .,##''//4E4E -'/=*miQ)35;_0p]-'/=miQ)35;;_0p]-'/=miQ)35;;p]-'/=m=miQ);;p]-'-'/=m=mi);;p]-''-'/=m=i);;p]]]-'-' 0p]w@x4EY!{ .:,o0p]wx4EY!{ .:,o0p]wx4EY!{ ,o0p]wxwx4!{ ,o0o0p]wxwx4{ ,o0o00p]wxwx4{ ,oo0o0p :,oX#r-'/=*miQ)3:,oXr-'/=*mmiQ)3:,oXr-'/=*mm)3:,oXr-'/=*mm)3)3:,oXr-'/=*m)3)3:,oXr-''/=*m)33)3:, Q)35;_0p]w@x4EY!Q)35_0p]w@xx4EY!Q)350pp]w@xxY!Q)350pp]w@xxY!Y!Q)350pp]w@xxY!!Q)350pp]w@xxxY!Y!Q) EY!{ .:,oX#r-'/=EY!{.:,oX#rr-'/=EY!{:,,oX#rr/=EY!{:{:,,#rr/=E=EY!{:{:,,#rr/=E=EY{:{:,,#rrr/=E=EY '/=*miQ)35;_0p]w'/=*iQ)35;__0p]w'/*iQ))35;__]w'/*iQiQ))3__]w'/'/*iQi))3__]ww'/'/*ii))3__]www'/'/ p]w@x4EY!{ .:,oXp]wx4EY!{ .:,oXp]wx4EYY!{ .:Xpp]x4E4EYY!{:Xpp]]]x4E4YY!{:Xppp]]]x4EYY!{:Xpppp]]] ,oX#r-'/=*miQ)35,o#r-'/=*miQ)35,o#r-'//=*miQ5,,or-'/'//=*Q5,,oo#r-'/'/=*Q5,,ooo#r-/'/=*Q5,,,,oo# )35;_0p]w@x4EY!{)35;_0p]w@x4EY!{)35;_0p]w@xY!{)35;_0p0p]wY!{)3)3_;_0p0]wY!{)3)35;_0p0]wY!!{{)3)3 Y!{ .:,oX#r-'/=*Y!{ .:,oX#r-'/=*Y!{ .:,oX#r-'/=*Y!{ .:,oX#r-'/=*Y!{ .:,oXr-'/=*Y!{ .:,,oXr--'/=* /=*miQ)35;_0p]w@/=*miQ)35;_0p]w@/=*miQ)35;_0p]w@/=*miQ)35;_0p]w@/=*miQ)35;_0p]w@/=*miQ)35;_0p]w@ ]w@x4EY!{ .:,oX#]w@x4EY!{ .:,oX#]w@x4EY!{ .:,oX#]w@x4EY!{ .:,oX#]w@x4EY!{ .:,oX#]w@x4EY!{ .:,oX# ``` *If you look at this image the correct way, you'll see a 3D image of big letters spelling out LRS.* The following is a [C](c.md) program that generates the above image. ``` #include #define PATTERN_SIZE 16 #define RES_X 75 #define RES_Y 20 #define PATTERN_SEED_SIZE 32 char patternSeed[PATTERN_SEED_SIZE] = " .:,oX#r-'/=*miQ)35;_0p]w@x4EY!{"; char depth[RES_X * RES_Y + 1] = // must be big and simple to be easily seen " " " " " " " 1111111111111 " " 11111111111 22222222222222222 " " 1111111 222222222222222222 1111111111 " " 1111111 2222222 2222222 1111111111111111 " " 1111111 2222222 222222 11111111 111111 " " 1111111 2222222 222222 1111111 111111 " " 1111111 2222222 2222222 11111111 " " 1111111 2222222222222222 111111111111 " " 1111111 11 2222222222222222 111111111111 " " 1111111 11 2222222 222222 111111111 " " 1111111 1111 2222222 222222 1111111 11111111 " " 1111111111111111111 2222222 222222 1111111 1111111 " " 11111111111111111111 22222222 2222222 11111111 11111111 " " 2222222222 22222222 1111111111111111111 " " 1111111111111 " " " " "; char buffer1[PATTERN_SIZE + 1]; char buffer2[PATTERN_SIZE + 1]; int charToDepth(char c) { return c == ' ' ? 0 : (c - '0'); } int main(void) { const char *c = depth; char *lineCurrent, *linePrev; buffer1[PATTERN_SIZE] = 0; buffer2[PATTERN_SIZE] = 0; for (int j = 0; j < RES_Y; ++j) { for (int i = 0; i < PATTERN_SIZE; ++i) // initiate first pattern from seed buffer1[i] = patternSeed[(i + (j * 13)) % PATTERN_SEED_SIZE]; lineCurrent = buffer1; linePrev = buffer2; for (int i = 0; i < RES_X; ++i) { if (i % PATTERN_SIZE == 0) { printf("%s",lineCurrent); // print the rendered line char *tmp = lineCurrent; // swap previous and current buffer lineCurrent = linePrev; linePrev = tmp; } lineCurrent[i % PATTERN_SIZE] = // draw the offset pixel linePrev[(PATTERN_SIZE + i + charToDepth(*c)) % PATTERN_SIZE]; c++; } printf("%s\n",lineCurrent); // print also the last buffer } return 0; } ```