/* Generated by Interface Builder */

#import "JuliaBrot.h"
#import <math.h>
#import <stdlib.h>
#import <stdio.h>
#import <appkit/Application.h>
#import <appkit/color.h>
#import <appkit/Form.h>

@implementation JuliaBrot

- free
{
    [myInspector free];
 /* Free that pesky inspector. */
    [super free];
    return self;
}

- getController:sender :map
{
    [super getController:sender :map];
    [NXApp loadNibSection:"JuliaBrot.nib" owner:self];
 /* Load the inspector */
    XC = 0;
 /*
  * Set default values for XC and YC 
  */
    YC = 1;
    return self;
}

- setXYC:sender
{
    XC = [sender doubleValueAt:0];
    YC = [sender doubleValueAt:1];
    return self;
}

- gohome:(float *)newX :(float *)newY :(float *)newDX :(float *)newDY :(int *)newDepth
{
    *newX = 0.0;
    *newY = 0.0;
    *newDX = 4;
    *newDY = 4;
    *newDepth = 150;
    return self;
}

- (int)colorindex:(double)Real :(double)Imaginary
{
 /*
  * Overwritten for Julia set(note, only diff is next line ! !) 
  */
    register double realCoord = XC, imaginaryCoord = YC, tempdouble;
    register int i;

#ifdef DEBUG
    printf("\nReal %lf Imaginary %lf depth %d\n", Real, Imaginary, Depth);
#endif
    for (i = 0; i < Depth; i++)
    {
	if (Real * Real + Imaginary * Imaginary > 10)
	{
	    return ((int)(chaosColors) * i / Depth);
	}
	tempdouble = Real * Real - Imaginary * Imaginary + realCoord;
	Imaginary = 2 * Real * Imaginary + imaginaryCoord;
	Real = tempdouble;
    }
    return (chaosColors);
}

@end
