Last active
August 29, 2015 14:25
-
-
Save poizan42/71f38038e8d91f91f8b8 to your computer and use it in GitHub Desktop.
16x16 Mandelbrot set rendered by a tint transform (it's not technically a valid pdf because it lacks lengths and the xref table which is hard to write by hand, but every reader can reconstruct them anyways). The Mandelbrot16x16-fixed.pdf file has been opened and saved with Adobe Reader which repairs the file (but makes it human unreadable).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
%PDF-1.4 | |
1 0 obj | |
<< /Type /Catalog | |
/Outlines 2 0 R | |
/Pages 3 0 R | |
>> | |
endobj | |
2 0 obj | |
<< /Type Outlines | |
/Count 0 | |
>> | |
endobj | |
3 0 obj | |
<< /Type /Pages | |
/Kids [ 4 0 R ] | |
/Count 1 | |
>> | |
endobj | |
4 0 obj | |
<< | |
/Type /Page | |
/Parent 3 0 R | |
/MediaBox [ 0 0 100 100 ] | |
/Contents 5 0 R | |
/Resources << | |
/ProcSet 6 0 R | |
/XObject << | |
/Im1 7 0 R >> | |
>> | |
>> | |
endobj | |
7 0 obj | |
<< /Type /XObject | |
/Subtype /Image | |
/Width 16 | |
/Height 16 | |
/ColorSpace [/Separation /Mandelbrot /DeviceGray 8 0 R] | |
/BitsPerComponent 8 | |
/Length null | |
/Filter /ASCIIHexDecode >> | |
stream | |
000102030405060708090A0B0C0D0E0F | |
101112131415161718191A1B1C1D1E1F | |
202122232425262728292A2B2C2D2E2F | |
303132333435363738393A3B3C3D3E3F | |
404142434445464748494A4B4C4D4E4F | |
505152535455565758595A5B5C5D5E5F | |
606162636465666768696A6B6C6D6E6F | |
707172737475767778797A7B7C7D7E7F | |
808182838485868788898A8B8C8D8E8F | |
909192939495969798999A9B9C9D9E9F | |
A0A1A2A3A4A5A6A7A8A9AAABACADAEAF | |
B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF | |
C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF | |
D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF | |
E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF | |
F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF | |
endstream | |
5 0 obj | |
<< /Length null >> %page content | |
stream | |
q % Save graphics state | |
100 0 0 100 0 0 cm % Translate to (0,0) and scale by 100 | |
/Im1 Do % Paint image | |
Q % Restore graphics state | |
endstream | |
endobj | |
8 0 obj | |
<< /FunctionType 4 | |
/Domain [ 0.0 1.0 ] | |
/Range [ 0.0 1.0 ] | |
/Length null | |
>> | |
stream | |
{ | |
255 mul % scale input | |
round | |
dup % make a copy of the input | |
% get upper nibble | |
-4 bitshift % >> 4 | |
7.5 sub % -7.5 .. 7.5 | |
5 div % -1.5 .. 1.5 | |
exch % original (scaled) input to top of stack | |
% get lower nibble | |
16 mod % "and" is broken in sumatra... | |
7.5 sub % -7.5 .. 7.5 | |
5 div % -1.5 .. 1.5 | |
% Stack: Re, Im | |
2 copy % c: (Re, Im), z:(Re, Im) | |
0 1 eq | |
% ITERATION START | |
% stack : stop, Re, Im, Re(c), Im(c) | |
{1 1 eq} { | |
% Calculate: z^2 + c: (Re(z)^2 - Im(z)^2 + Re(c), 2*Re*Im + Im(c)) | |
dup dup mul % stack : Re^2, Re, Im, ... | |
2 index % stack: Im, Re^2, Re, Im, ... | |
dup mul % stack: Im^2, Re^2, Re, Im, ... | |
sub %stack: Re^2 - Im^2, Re, Im, Re(c), Im(c) | |
3 index % stack: Re(c), Re^2 - Im^2, Re, Im, Re(c), Im(c) | |
add % stack: Re^2 - Im^2 + Re(c), Re, Im, Re(c), Im(c) | |
3 1 roll % stack: Re, Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
mul % stack: Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
2 mul % stack: 2*Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
3 index % stack: Im(c), 2*Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
add % stack: 2*Re*Im + Im(c), Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
exch % stack: Re^2 - Im^2 + Re(c), 2*Re*Im + Im(c), Re(c), Im(c) | |
% stack: Re, Im, Re(c), Im(c) | |
% Check |z| >= 2: sqrt(Re^2 + Im^2) >= 2 | |
dup dup mul % stack: Re^2, Re, Im, Re(c), Im(c) | |
2 index % stack: Im, Re^2, Re, Im, Re(c), Im(c) | |
dup mul % stack: Im^2, Re^2, Re, Im, Re(c), Im(c) | |
add % stack: Im^2 + Re^2, Re, Im, Re(c), Im(c) | |
sqrt % stack: sqrt(Im^2 + Re^2), Re, Im, Re(c), Im(c) | |
2 ge % stack: stop, Re, Im, Re(c), Im(c) | |
} ifelse | |
{1 1 eq} { | |
% Calculate: z^2 + c: (Re(z)^2 - Im(z)^2 + Re(c), 2*Re*Im + Im(c)) | |
dup dup mul % stack : Re^2, Re, Im, ... | |
2 index % stack: Im, Re^2, Re, Im, ... | |
dup mul % stack: Im^2, Re^2, Re, Im, ... | |
sub %stack: Re^2 - Im^2, Re, Im, Re(c), Im(c) | |
3 index % stack: Re(c), Re^2 - Im^2, Re, Im, Re(c), Im(c) | |
add % stack: Re^2 - Im^2 + Re(c), Re, Im, Re(c), Im(c) | |
3 1 roll % stack: Re, Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
mul % stack: Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
2 mul % stack: 2*Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
3 index % stack: Im(c), 2*Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
add % stack: 2*Re*Im + Im(c), Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
exch % stack: Re^2 - Im^2 + Re(c), 2*Re*Im + Im(c), Re(c), Im(c) | |
% stack: Re, Im, Re(c), Im(c) | |
% Check |z| >= 2: sqrt(Re^2 + Im^2) >= 2 | |
dup dup mul % stack: Re^2, Re, Im, Re(c), Im(c) | |
2 index % stack: Im, Re^2, Re, Im, Re(c), Im(c) | |
dup mul % stack: Im^2, Re^2, Re, Im, Re(c), Im(c) | |
add % stack: Im^2 + Re^2, Re, Im, Re(c), Im(c) | |
sqrt % stack: sqrt(Im^2 + Re^2), Re, Im, Re(c), Im(c) | |
2 ge % stack: stop, Re, Im, Re(c), Im(c) | |
} ifelse | |
{1 1 eq} { | |
% Calculate: z^2 + c: (Re(z)^2 - Im(z)^2 + Re(c), 2*Re*Im + Im(c)) | |
dup dup mul % stack : Re^2, Re, Im, ... | |
2 index % stack: Im, Re^2, Re, Im, ... | |
dup mul % stack: Im^2, Re^2, Re, Im, ... | |
sub %stack: Re^2 - Im^2, Re, Im, Re(c), Im(c) | |
3 index % stack: Re(c), Re^2 - Im^2, Re, Im, Re(c), Im(c) | |
add % stack: Re^2 - Im^2 + Re(c), Re, Im, Re(c), Im(c) | |
3 1 roll % stack: Re, Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
mul % stack: Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
2 mul % stack: 2*Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
3 index % stack: Im(c), 2*Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
add % stack: 2*Re*Im + Im(c), Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
exch % stack: Re^2 - Im^2 + Re(c), 2*Re*Im + Im(c), Re(c), Im(c) | |
% stack: Re, Im, Re(c), Im(c) | |
% Check |z| >= 2: sqrt(Re^2 + Im^2) >= 2 | |
dup dup mul % stack: Re^2, Re, Im, Re(c), Im(c) | |
2 index % stack: Im, Re^2, Re, Im, Re(c), Im(c) | |
dup mul % stack: Im^2, Re^2, Re, Im, Re(c), Im(c) | |
add % stack: Im^2 + Re^2, Re, Im, Re(c), Im(c) | |
sqrt % stack: sqrt(Im^2 + Re^2), Re, Im, Re(c), Im(c) | |
2 ge % stack: stop, Re, Im, Re(c), Im(c) | |
} ifelse | |
{1 1 eq} { | |
% Calculate: z^2 + c: (Re(z)^2 - Im(z)^2 + Re(c), 2*Re*Im + Im(c)) | |
dup dup mul % stack : Re^2, Re, Im, ... | |
2 index % stack: Im, Re^2, Re, Im, ... | |
dup mul % stack: Im^2, Re^2, Re, Im, ... | |
sub %stack: Re^2 - Im^2, Re, Im, Re(c), Im(c) | |
3 index % stack: Re(c), Re^2 - Im^2, Re, Im, Re(c), Im(c) | |
add % stack: Re^2 - Im^2 + Re(c), Re, Im, Re(c), Im(c) | |
3 1 roll % stack: Re, Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
mul % stack: Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
2 mul % stack: 2*Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
3 index % stack: Im(c), 2*Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
add % stack: 2*Re*Im + Im(c), Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
exch % stack: Re^2 - Im^2 + Re(c), 2*Re*Im + Im(c), Re(c), Im(c) | |
% stack: Re, Im, Re(c), Im(c) | |
% Check |z| >= 2: sqrt(Re^2 + Im^2) >= 2 | |
dup dup mul % stack: Re^2, Re, Im, Re(c), Im(c) | |
2 index % stack: Im, Re^2, Re, Im, Re(c), Im(c) | |
dup mul % stack: Im^2, Re^2, Re, Im, Re(c), Im(c) | |
add % stack: Im^2 + Re^2, Re, Im, Re(c), Im(c) | |
sqrt % stack: sqrt(Im^2 + Re^2), Re, Im, Re(c), Im(c) | |
2 ge % stack: stop, Re, Im, Re(c), Im(c) | |
} ifelse | |
{1 1 eq} { | |
% Calculate: z^2 + c: (Re(z)^2 - Im(z)^2 + Re(c), 2*Re*Im + Im(c)) | |
dup dup mul % stack : Re^2, Re, Im, ... | |
2 index % stack: Im, Re^2, Re, Im, ... | |
dup mul % stack: Im^2, Re^2, Re, Im, ... | |
sub %stack: Re^2 - Im^2, Re, Im, Re(c), Im(c) | |
3 index % stack: Re(c), Re^2 - Im^2, Re, Im, Re(c), Im(c) | |
add % stack: Re^2 - Im^2 + Re(c), Re, Im, Re(c), Im(c) | |
3 1 roll % stack: Re, Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
mul % stack: Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
2 mul % stack: 2*Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
3 index % stack: Im(c), 2*Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
add % stack: 2*Re*Im + Im(c), Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
exch % stack: Re^2 - Im^2 + Re(c), 2*Re*Im + Im(c), Re(c), Im(c) | |
% stack: Re, Im, Re(c), Im(c) | |
% Check |z| >= 2: sqrt(Re^2 + Im^2) >= 2 | |
dup dup mul % stack: Re^2, Re, Im, Re(c), Im(c) | |
2 index % stack: Im, Re^2, Re, Im, Re(c), Im(c) | |
dup mul % stack: Im^2, Re^2, Re, Im, Re(c), Im(c) | |
add % stack: Im^2 + Re^2, Re, Im, Re(c), Im(c) | |
sqrt % stack: sqrt(Im^2 + Re^2), Re, Im, Re(c), Im(c) | |
2 ge % stack: stop, Re, Im, Re(c), Im(c) | |
} ifelse | |
{1 1 eq} { | |
% Calculate: z^2 + c: (Re(z)^2 - Im(z)^2 + Re(c), 2*Re*Im + Im(c)) | |
dup dup mul % stack : Re^2, Re, Im, ... | |
2 index % stack: Im, Re^2, Re, Im, ... | |
dup mul % stack: Im^2, Re^2, Re, Im, ... | |
sub %stack: Re^2 - Im^2, Re, Im, Re(c), Im(c) | |
3 index % stack: Re(c), Re^2 - Im^2, Re, Im, Re(c), Im(c) | |
add % stack: Re^2 - Im^2 + Re(c), Re, Im, Re(c), Im(c) | |
3 1 roll % stack: Re, Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
mul % stack: Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
2 mul % stack: 2*Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
3 index % stack: Im(c), 2*Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
add % stack: 2*Re*Im + Im(c), Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
exch % stack: Re^2 - Im^2 + Re(c), 2*Re*Im + Im(c), Re(c), Im(c) | |
% stack: Re, Im, Re(c), Im(c) | |
% Check |z| >= 2: sqrt(Re^2 + Im^2) >= 2 | |
dup dup mul % stack: Re^2, Re, Im, Re(c), Im(c) | |
2 index % stack: Im, Re^2, Re, Im, Re(c), Im(c) | |
dup mul % stack: Im^2, Re^2, Re, Im, Re(c), Im(c) | |
add % stack: Im^2 + Re^2, Re, Im, Re(c), Im(c) | |
sqrt % stack: sqrt(Im^2 + Re^2), Re, Im, Re(c), Im(c) | |
2 ge % stack: stop, Re, Im, Re(c), Im(c) | |
} ifelse | |
{1 1 eq} { | |
% Calculate: z^2 + c: (Re(z)^2 - Im(z)^2 + Re(c), 2*Re*Im + Im(c)) | |
dup dup mul % stack : Re^2, Re, Im, ... | |
2 index % stack: Im, Re^2, Re, Im, ... | |
dup mul % stack: Im^2, Re^2, Re, Im, ... | |
sub %stack: Re^2 - Im^2, Re, Im, Re(c), Im(c) | |
3 index % stack: Re(c), Re^2 - Im^2, Re, Im, Re(c), Im(c) | |
add % stack: Re^2 - Im^2 + Re(c), Re, Im, Re(c), Im(c) | |
3 1 roll % stack: Re, Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
mul % stack: Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
2 mul % stack: 2*Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
3 index % stack: Im(c), 2*Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
add % stack: 2*Re*Im + Im(c), Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
exch % stack: Re^2 - Im^2 + Re(c), 2*Re*Im + Im(c), Re(c), Im(c) | |
% stack: Re, Im, Re(c), Im(c) | |
% Check |z| >= 2: sqrt(Re^2 + Im^2) >= 2 | |
dup dup mul % stack: Re^2, Re, Im, Re(c), Im(c) | |
2 index % stack: Im, Re^2, Re, Im, Re(c), Im(c) | |
dup mul % stack: Im^2, Re^2, Re, Im, Re(c), Im(c) | |
add % stack: Im^2 + Re^2, Re, Im, Re(c), Im(c) | |
sqrt % stack: sqrt(Im^2 + Re^2), Re, Im, Re(c), Im(c) | |
2 ge % stack: stop, Re, Im, Re(c), Im(c) | |
} ifelse | |
{1 1 eq} { | |
% Calculate: z^2 + c: (Re(z)^2 - Im(z)^2 + Re(c), 2*Re*Im + Im(c)) | |
dup dup mul % stack : Re^2, Re, Im, ... | |
2 index % stack: Im, Re^2, Re, Im, ... | |
dup mul % stack: Im^2, Re^2, Re, Im, ... | |
sub %stack: Re^2 - Im^2, Re, Im, Re(c), Im(c) | |
3 index % stack: Re(c), Re^2 - Im^2, Re, Im, Re(c), Im(c) | |
add % stack: Re^2 - Im^2 + Re(c), Re, Im, Re(c), Im(c) | |
3 1 roll % stack: Re, Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
mul % stack: Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
2 mul % stack: 2*Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
3 index % stack: Im(c), 2*Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
add % stack: 2*Re*Im + Im(c), Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
exch % stack: Re^2 - Im^2 + Re(c), 2*Re*Im + Im(c), Re(c), Im(c) | |
% stack: Re, Im, Re(c), Im(c) | |
% Check |z| >= 2: sqrt(Re^2 + Im^2) >= 2 | |
dup dup mul % stack: Re^2, Re, Im, Re(c), Im(c) | |
2 index % stack: Im, Re^2, Re, Im, Re(c), Im(c) | |
dup mul % stack: Im^2, Re^2, Re, Im, Re(c), Im(c) | |
add % stack: Im^2 + Re^2, Re, Im, Re(c), Im(c) | |
sqrt % stack: sqrt(Im^2 + Re^2), Re, Im, Re(c), Im(c) | |
2 ge % stack: stop, Re, Im, Re(c), Im(c) | |
} ifelse | |
{1 1 eq} { | |
% Calculate: z^2 + c: (Re(z)^2 - Im(z)^2 + Re(c), 2*Re*Im + Im(c)) | |
dup dup mul % stack : Re^2, Re, Im, ... | |
2 index % stack: Im, Re^2, Re, Im, ... | |
dup mul % stack: Im^2, Re^2, Re, Im, ... | |
sub %stack: Re^2 - Im^2, Re, Im, Re(c), Im(c) | |
3 index % stack: Re(c), Re^2 - Im^2, Re, Im, Re(c), Im(c) | |
add % stack: Re^2 - Im^2 + Re(c), Re, Im, Re(c), Im(c) | |
3 1 roll % stack: Re, Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
mul % stack: Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
2 mul % stack: 2*Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
3 index % stack: Im(c), 2*Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
add % stack: 2*Re*Im + Im(c), Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
exch % stack: Re^2 - Im^2 + Re(c), 2*Re*Im + Im(c), Re(c), Im(c) | |
% stack: Re, Im, Re(c), Im(c) | |
% Check |z| >= 2: sqrt(Re^2 + Im^2) >= 2 | |
dup dup mul % stack: Re^2, Re, Im, Re(c), Im(c) | |
2 index % stack: Im, Re^2, Re, Im, Re(c), Im(c) | |
dup mul % stack: Im^2, Re^2, Re, Im, Re(c), Im(c) | |
add % stack: Im^2 + Re^2, Re, Im, Re(c), Im(c) | |
sqrt % stack: sqrt(Im^2 + Re^2), Re, Im, Re(c), Im(c) | |
2 ge % stack: stop, Re, Im, Re(c), Im(c) | |
} ifelse | |
{1 1 eq} { | |
% Calculate: z^2 + c: (Re(z)^2 - Im(z)^2 + Re(c), 2*Re*Im + Im(c)) | |
dup dup mul % stack : Re^2, Re, Im, ... | |
2 index % stack: Im, Re^2, Re, Im, ... | |
dup mul % stack: Im^2, Re^2, Re, Im, ... | |
sub %stack: Re^2 - Im^2, Re, Im, Re(c), Im(c) | |
3 index % stack: Re(c), Re^2 - Im^2, Re, Im, Re(c), Im(c) | |
add % stack: Re^2 - Im^2 + Re(c), Re, Im, Re(c), Im(c) | |
3 1 roll % stack: Re, Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
mul % stack: Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
2 mul % stack: 2*Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
3 index % stack: Im(c), 2*Re*Im, Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
add % stack: 2*Re*Im + Im(c), Re^2 - Im^2 + Re(c), Re(c), Im(c) | |
exch % stack: Re^2 - Im^2 + Re(c), 2*Re*Im + Im(c), Re(c), Im(c) | |
% stack: Re, Im, Re(c), Im(c) | |
% Check |z| >= 2: sqrt(Re^2 + Im^2) >= 2 | |
dup dup mul % stack: Re^2, Re, Im, Re(c), Im(c) | |
2 index % stack: Im, Re^2, Re, Im, Re(c), Im(c) | |
dup mul % stack: Im^2, Re^2, Re, Im, Re(c), Im(c) | |
add % stack: Im^2 + Re^2, Re, Im, Re(c), Im(c) | |
sqrt % stack: sqrt(Im^2 + Re^2), Re, Im, Re(c), Im(c) | |
2 ge % stack: stop, Re, Im, Re(c), Im(c) | |
} ifelse | |
{1} {0} ifelse | |
} | |
endstream | |
endobj | |
6 0 obj %procset | |
[ /PDF ] | |
endobj | |
trailer | |
<< /Size 7 | |
/Root 1 0 R | |
>> | |
%%EOF |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment