Dzień dobry
Ostatnio poczytałem trochę o fraktalach i chciałem sobie klepnąć programik programik który generowałby takowe. Natrafiłem na problem w postaci czasu generowania obrazu. Czy istnieje jakaś szybka metoda wyznaczania granic funkcji rekurencyjnych dla liczb zespolonych ? Teraz po prostu iteruje z jakimś tam swoim przybliżeniem i sprawdzam czy punkt należy do zbioru (tz. jak chcę obrazek fraktalu 600x600 to jest for(i=0;i<360 000) i liczę czy punkt leży w zbiorze dla danego piksela). Aktualnie sytuacja wygląda tak:
/* Contains */
ComplexNumber z = new ComplexNumber(realPart,imaginaryPart);
for (int i=0;i<accuracy;i++)
{
if(z.ModulusSquare >= 4)
return false;
z.SquareIt();
z.Add(realPart,imaginaryPart);
}
return true;
Bitmap image = new Bitmap(size.Width,size.Height);
BitmapEditor editor = new BitmapEditor(image);
editor.LockBits();
//Main fractal iterations
for (int iter = 0; iter < accuracy; iter++)
{
ProcessAccuracyLayer(ref image,iter,area,editor);
if (RenderCompleteCall != null)
{
RenderCompleteCall(iter);
}
}
editor.UnlockBits();
return image;
Tutaj: "ProcessAccuracyLayer"
Position coordinate;
Size imgSize = new Size(img.Width,img.Height);
UnitConverter converter = new UnitConverter();
// real & imaginary (width/height) iterations on complex plain
for (int r = 0; r < img.Width; r++)
{
for (int i = 0; i < img.Height; i++)
{
coordinate = converter.ConvertToPlainPoint(area, imgSize, r, i);
if (Contains(new ComplexNumber(coordinate.X, coordinate.Y), iteration))
{
editor.SetPixel(r, i, _colorPalette.GetColor(iteration));
}
}
}
Czy da się to zrobić innym sposobem - czytałem artykuły o generowaniu zbioru i niestety nic nie znalazłem.
Pozdrawiam
Astrocyt