Skip to content

Instantly share code, notes, and snippets.

@poizan42
Last active August 29, 2015 14:25
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save poizan42/71f38038e8d91f91f8b8 to your computer and use it in GitHub Desktop.
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).
Display the source blob
Display the rendered blob
Raw
%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