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

 



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