![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Как нарисовать фракталDelphi , Синтаксис , МатематикаАвтор: http://www.swissdelphicenter.ch ![]() procedure DrawMandelbrot(ACanvas: TCanvas; X, Y, au, bu: Double; X2, Y2: Integer); var c1, c2, z1, z2, tmp: Double; i, j, Count: Integer; begin c2 := bu; for i := 10 to X2 do begin c1 := au; for j := 0 to Y2 do begin z1 := 0; z2 := 0; Count := 0; {count is deep of iteration of the mandelbrot set if |z| >=2 then z is not a member of a mandelset} while (((z1 * z1 + z2 * z2 < 4) and (Count <= 90))) do begin tmp := z1; z1 := z1 * z1 - z2 * z2 + c1; z2 := 2 * tmp * z2 + c2; Inc(Count); end; //the color-palette depends on TColor(n*count mod t) {$IFDEF LINUX} ACanvas.Pen.Color := (16 * Count mod 255); ACanvas.DrawPoint(j, i); {$ELSE} ACanvas.Pixels[j, i] := (16 * Count mod 255); {$ENDIF} c1 := c1 + X; end; c2 := c2 + Y; end; end; procedure TForm1.Button1Click(Sender: TObject); var R: TRect; au, ao: Integer; dX, dY, bo, bu: Double; begin // Initialize Mandelbrot R.Left := 0; R.Right := 200; R.Top := 0; R.Bottom := 205; ao := 1; au := -2; bo := 1.5; bu := -1.5; //direct scaling cause of speed dX := (ao - au) / (R.Right - R.Left); dY := (bo - bu) / (R.Bottom - R.Top); DrawMandelbrot(Self.Canvas, dX, dY, au, bu, R.Right, R.Bottom); end; Программа на Delphi для рисования Мандельброта с использованием алгоритма фрактала. Порядок работы программы следующий:
В целом, это базовая реализация рисования Мандельброта с использованием Delphi. Однако есть некоторые ограничения:
- Программа может быть медленной для больших размеров Kanvas или сложных итераций.
- Она может не работать правильно, если значение Альтернативное решение: Вместо прямого рисования каждого пиксела на Kanvas можно создать объект TBitmap и рисовать на нем. Это позволит оптимизировать процесс рисования, рисуя несколько пикселей одновременно. Также можно рассмотреть использование более эффективного алгоритма для расчета Мандельброта, например, инструкций SSE (Streaming SIMD Extensions) в современных CPU или ускорения с помощью GPU. Наконец, можно добавить обработку ошибок и проверку ввода пользователя для предотвращения потенциальных проблем. В статье описывается программное создание фрактала Мандельброта на языке Delphi с использованием процедуры DrawMandelbrot и примером ее вызова в форме TForm1. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Математика ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |