🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

2 total messages Started by Jay R. Hill Thu, 06 Jan 1994 00:30
Re: A warning to DEEPZOOMers
#412
Author: Jay R. Hill
Date: Thu, 06 Jan 1994 00:30
56 lines
3758 bytes
Version 0.13 is now ready which fixes a small bug in the cursor 
model.  There are now 129 potential Mandelmaniacs who do know
where to get their lastest fix (at my ftp site or by email). 

A new experimental version is included which tests for a pixel's 
presence in a component of period 1, 2, 3 or 4.  HILLZOOM (the 19 
digit version which can save pictures) tests for periods 1, 2, and 
3.  DEEPZOOM (the 72 digit version which can save pictures) tests 
for periods 1, 2.  The new executable is called FOURZOOM, which 
uses long doubles (19 digit math).  Unfortunately, it can't save 
gif or pcx files.  (You must resort to your favorite TSR - there's 
a contradiction of terms - to save these pictures.)  FOURZOOM is 
slower due to these tests for each point.  But if a period 4 
component is in the view, it can speed up the process and greatly 
increase the precision of the component edge plotting.

I am afraid I'm getting irritated with some of the software being 
published.  The 256 Color GIF Function Library from the book 
"Practical Ray Tracing in C" written in Borland/Turbo C 2.0 by 
Craig A. Lindley which I use to dump the pictures to disk seems 
to be unreliable.  Well actually, it is the best I could get my 
hands on but was really not what I wanted.   Lindley wrote the 
pactage for VESA graphics which not all of you have.  I have 
adapted it to the SVGA SVGA256.BGI from SVGABG40.ZIP, by Jordan 
Hargrave package.  This combination produces GIF files which are 
defective but do seem to get displayed with PC displayers and one 
on a SUN.  When I compile the program with Borland C++, I must 
compile with BUILD ALL option and SMALL memory model.  I can see 
no reason for this, but other more sensable combinations, while 
they seem to work, produce unreadable GIF and PCX files.  The 
upshot is I am now at my limit with these toy programs.  I may 
make one more version which will save the GIF and exit upon 
completion of the picture.  This will be nice for mpeg sequence 
production.

Several folk have expressed interest in this project.  If the 
interest is still there, I may post the source to DEEPZOOM in 
segments (with discussion of technique).  With the absolute waste 
of bandwidth on this group (e: My Name Is..., and Re: Mutating 
.sigs was: Re: Kabbalistic interpretation of Fractals) I will 
likely ignore flames about source code.

It is more fun to explore the Mandelbrot Set anyway.  For example.
The area of the period three components is approximately
0.05654241812768138193556875600995787053199601446372787042004052869
give or take a little.

Warmly,
Jay "Not tonight honey, I'm getting the area of... er ah hmmmmm" Hill

Happy New Year
-- 
{ hilljr@jupiter.saic.com } begin writeln(3*ln(640320)/sqrt(163):17:15) end.
void main(){double sqrt(), y=1/sqrt(2.), a=.5, m=1,z; int n=0;
for(;m*=2,z=sqrt(1-y*y),y=(1-z)/(1+z),a=a*(1+y)*(1+y)-m*y,n<4;n++);
printf("%17.15lf\n",1/a);}
Re: A warning to DEEPZOOMers
#413
Author: Jay R. Hill
Date: Tue, 11 Jan 1994 21:23
109 lines
5804 bytes
In article <1994Jan6.003042.5039@ast.saic.com>, hilljr@jupiter.saic.com (Jay R. Hill) writes:
|> Version 0.13 is now ready ...

There are now 133 potential Mandelmaniacs who have gotten their 
lastest fix (at my ftp site or by email). 
 
|> Several folk have expressed interest in this project.  If the 
|> interest is still there, I may post the source to DEEPZOOM in 
|> segments (with discussion of technique).  

                       DEEPZOOM - I

              Mandelbrot Set Coloring Method.

One of the most enjoyable things about displaying the Mandelbrot 
Set is actually being able to see all the intricate detail after a 
lengthy calculation.  This depends on a good choice of palette and
color algorithm.  A good palette is one which has no adjacent colors 
differing by such a small amount that we can't tell them apart.  

My favorite palettes have no sudden jumps, but instead return 
smoothly to the original color.  These provide a continuous sequence 
of colors in the display even if the range of banding is great 
enough to require more than one pass through the pelette.

Pelettes are defined in the RGB coordinate frame, where intensity
of Red, Green and Blue are specified by values between 0 and 63.
This is an unnatural system for us, so more useful coordinate
systems were invented such as HSV (Hue, Saturation, Value).  Hue 
is expressed as an angle in the color wheel.  Saturation specifies 
the amount of white or gray in the color.  In DEEPZOOM, I use full 
saturation since I want as much color separation as I can get.  
Value is a scaling of the intensity ranging from black to full 
intensity.

In my early experiments, I used maximum Saturation and let the Hue 
range in equal angles around the color wheel.  This resulted in 
many adjacent colors being indistinguishable near Blue, Green and 
Red.  This color wheel had too few spokes near Cyan, Yellow, and 
Magenta.  

Consider the sequence of colors from Green to Yellow.  Colors 
formed by ramping Red linearly from 0 to 63 have too little Red 
in the steps near Green to be noticable.  Larger steps near Green 
are needed with smaller steps near Yellow.  So I tried using a 
square root (of component/63) scale.  This made larger steps when 
the contribution was small.  This scheme is the one I presently 
use in DEEPZOOM.  

Here is my C++ code for the palette specification.  The global 
variable 'scales' is the intensity scale factor equivalent to 
Saturation. The special_scale function is simply a square root 
which can be changed easily.  I use 108 color values to go around 
the color wheel, starting with number 20.  I use XOR to paint the 
cursor.  The colors XOR with 255 are chosen from the opposite side 
of the color wheel so the cursor is clearly visible.

#define COLORSIZE 18
#define BRIGHTEST 63.9

float scale,scales;
float special_scale(float c){ return(sqrt(c)); }
void SetMyColor(int C, int R, int G, int B){
  float  red, green, blue, biggest, x;
  red=special_scale(R/(float)COLORSIZE);
  biggest=red;
  green=special_scale(G/(float)COLORSIZE);
  if(green>biggest)biggest=green;
  blue=special_scale(B/(float)COLORSIZE);
  if(blue>biggest)biggest=blue;
  // I like my colors bright
  x = scale*BRIGHTEST/biggest;
  red *= x;
  green *= x;
  blue *= x;
  setrgbpalette(C, (int)red, (int)green, (int)blue);
}
void MyPalette(void){
  int C=20,R,G,B; 
  scale=scales;
  //  Colors for escapers
  for(R=G=0,B=COLORSIZE; G<COLORSIZE; ++G,++C) SetMyColor(C,R,G,B);//B-C
  for(R=0,B=G=COLORSIZE; B>0; --B,++C)         SetMyColor(C,R,G,B);//C-G
  for(R=B=0,G=COLORSIZE; R<COLORSIZE; ++R,++C) SetMyColor(C,R,G,B);//G-Y
  for(B=0,R=G=COLORSIZE; G>0; --G,++C)         SetMyColor(C,R,G,B);//Y-R
  for(G=B=0,R=COLORSIZE; B<COLORSIZE; ++B,++C) SetMyColor(C,R,G,B);//R-M
  for(G=0,R=B=COLORSIZE; R>0; --R,++C)         SetMyColor(C,R,G,B);//M-B
  // and now for the XOR colors (for the cursor and interior)
  C=255^20;   scale=1.0;
  for(B=0,R=G=COLORSIZE; G>0; --G,--C)         SetMyColor(C,R,G,B);//Y-R
  for(G=B=0,R=COLORSIZE; B<COLORSIZE; ++B,--C) SetMyColor(C,R,G,B);//R-M
  for(G=0,R=B=COLORSIZE; R>0; --R,--C)         SetMyColor(C,R,G,B);//M-B
  for(R=G=0,B=COLORSIZE; G<COLORSIZE; ++G,--C) SetMyColor(C,R,G,B);//B-C
  for(R=0,B=G=COLORSIZE; B>0; --B,--C)         SetMyColor(C,R,G,B);//C-G
  for(R=B=0,G=COLORSIZE; R<COLORSIZE; ++R,--C) SetMyColor(C,R,G,B);//G-Y
  // and make the cursor WHITE over the filements
  setrgbpalette(255 ^ LIGHTGRAY, 63, 63, 63);
  setrgbpalette(255 ^ DARKGRAY, 63, 63, 63);
  setrgbpalette(255 ^ BLACK, 63, 63, 63);
  setrgbpalette(255 ^ WHITE, 0, 0, 0);
}

Warmly,
Jay "It's tonight honey, let's paint the town" Hill
-- 
{ hilljr@jupiter.saic.com } begin writeln(3*ln(640320)/sqrt(163):17:15) end.
void main(){double sqrt(), y=1/sqrt(2.), a=.5, m=1,z; int n=0;
for(;m*=2,z=sqrt(1-y*y),y=(1-z)/(1+z),a=a*(1+y)*(1+y)-m*y,n<4;n++);
printf("%17.15lf\n",1/a);}
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads