IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Фракталы. Определение коэффициентов.
Altair
сообщение 26.01.2006 20:30
Сообщение #1


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Допустим у меня есть фрактал.
вот программа его рисующая. (функцию взял для примера z*z*z+c*c-c*z ):

{$mode objfpc}
{$apptype gui}
program Complex_Graph;
uses
    graph, wincrt;

type
 tfloat      = extended;

 tcomplex    = record                       // x+yi
                cmplx_x, cmplx_y :tfloat;
               end;

function complex (re, im: tfloat ): tcomplex;
begin
     with result do begin
          cmplx_x:=re;
          cmplx_y:=im;
     end;
end;


operator +  ( const cmx_1, cmx_2 : tcomplex ) r:tcomplex;
begin
     r.cmplx_x:=cmx_1.cmplx_x+cmx_2.cmplx_x;
     r.cmplx_y:=cmx_1.cmplx_y+cmx_2.cmplx_y;
end;


operator -  ( const cmx_1, cmx_2 : tcomplex ) r:tcomplex;
begin
     r.cmplx_x:=cmx_1.cmplx_x-cmx_2.cmplx_x;
     r.cmplx_y:=cmx_1.cmplx_y-cmx_2.cmplx_y
end;

operator * ( const cmx_1, cmx_2 : tcomplex ) r:tcomplex;
begin
     r.cmplx_x:=cmx_1.cmplx_x*cmx_2.cmplx_x - cmx_1.cmplx_y*cmx_2.cmplx_y;
     r.cmplx_y:=cmx_1.cmplx_x*cmx_2.cmplx_y + cmx_1.cmplx_y*cmx_2.cmplx_x
end;


Const
   iter = 50;
   max  = 16;

var
   z,c: tcomplex;
   cancel:boolean;
   gd,gm:smallint;
   mx,my,x,y:longint;
   n:integer;
   dx,dy,zoomx, zoomy:     tfloat;
   ch:char;
begin
     gd         :=          Detect;
     Cancel     :=          False;
     zoomx      :=          0.005;
     zoomy      :=          0.005;
     dx         :=          0.0;
     dy         :=          0.0;
     Randomize; InitGraph(gd,gm,'');
     Mx         :=          GetMaxX div 2;
     My         :=          GetMaxY div 2;
     repeat
          cleardevice;
          For y := -my to my do
              For x := -mx to mx do Begin
                 n := 0;
                 c:=complex (x *zoomx+dx, y*zoomy +dy);
                 z:=complex (0, 0 );
                 While (sqr(z.cmplx_x) + sqr(z.cmplx_Y) < max) and (n < iter) do Begin
                              z:=z*z*z+c*c-c*z;
                              Inc(n);
                             // If keypressed then cancel := true;
                 End;
                 If n < iter then Begin
                           PutPixel(mx + x,my + y,31 - (n mod 16));
                 End;
                 //If cancel then exit;
             End;
             ch:=Readkey;
             {
            ...
             }
     until (ch='e') or (ch=#13);
     CloseGraph;
end.

Вопрос.
Допустим я произвольно выделю на экране прямоугольник x1,y1,x2,y2
как подсчитать коэффициенты dx, dy, zoomx, zoomy (проще говоря смещение и увеличение ),
при которых кусок фрактала, попавший в прямоугольник отразиться на весь экран ? mega_chok.gif
Спасибо smile.gif

p.s. пример. вот выведенный фрактал. Допустим я хочу нарисовать на весь экран выделенный фрагмент.
Прикрепленное изображение


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 25.07.2025 11:43
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"