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

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Графика в делфи, нужна помощь
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 178
Пол: Мужской

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


Вот нужно переделать код из паскаля в делфи, но проблема возникла с цветами, помогите пожалуйста

Код паскаля:

Program N3;
Uses Graph, Crt;
Type
TComplex = Record
X : Real;
Y : Real;
End;
Const
iter = 50;
max = 1e+6;
min = 1e-6;
Var
z, t, d : TComplex;
p : Real;
x, y, n : Integer;
Cancel : Boolean;
gd, gm : Integer;
mx, my : Integer;
Begin
Cancel := False;
Randomize;
gd := Detect;
InitGraph(gd,gm,'c:\bp\bgi');
Mx := GetMaxX div 2;
My := GetMaxY div 2;
For y := -my to my do
For x := -mx to mx do Begin
n := 0;
z.x := X * 0.005;
z.y := Y * 0.005;
d := z;
While (sqr(z.x)+sqr(z.y) < max) and (sqr(d.x)+sqr(d.y) > min)
and (n < iter) do Begin
t := z;
{z^3 - 1}
p := sqr(sqr(t.x)+sqr(t.y));
z.x := 2/3*t.x + (sqr(t.x)-sqr(t.y))/(3*p);
z.y := 2/3*t.y*(1-t.x/p);{}
d.x := abs(t.x - z.x);
d.y := abs(t.y - z.y);
Inc(n);
If keypressed then cancel := true;
End;
PutPixel(mx + x,my + y,16 - (n mod 16));
If cancel then exit;
End;
Readkey;
CloseGraph;
end.



И то, что я пробовал в делфи, но выводит просто черный экран, подозреваю, что с цветами что-то не так сделал
Там фрактал должен получиться





Const
iter = 50;
max = 1e+6;
min = 1e-6;


Type
TComplex = Record
X : Real;
Y : Real;
End;


procedure TForm1.Button1Click(Sender: TObject);


Var
z, t, d : TComplex;
p : Real;
x, y, n : Integer;
mx, my : Integer;
Begin

Randomize;
Mx := 320;
My := 240;
For y := -my to my do
For x := -mx to mx do Begin
n := 0;
z.x := X * 0.005;
z.y := Y * 0.005;
d := z;
While (sqr(z.x)+sqr(z.y) < max) and (sqr(d.x)+sqr(d.y) > min)
and (n < iter) do Begin
t := z;
p := sqr(sqr(t.x)+sqr(t.y));
z.x := 2/3*t.x + (sqr(t.x)-sqr(t.y))/(3*p);
z.y := 2/3*t.y*(1-t.x/p);{}
d.x := abs(t.x - z.x);
d.y := abs(t.y - z.y);
Inc(n);
End;
image1.canvas.Pixels[mx + x,my + y]:=round(16 - (n div 16));

End;
end;


Сообщение отредактировано: cooler -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
что с цветами что-то не так сделал
Угу... Canvas.Pixels подразумевает RGB-цвета, а не то, что ты передаешь smile.gif

Сделай простую таблицу замены:
const
colors: array[0 .. 16] of TColor = (
clBlack,
$0000A0 {dk blue},
$254117 {dk green},
$307D7E {cyan},
$FF0000 {Red},
$C031C7 {dk magenta},
$B38481 {brown},
$C0C0C0 {lt grey},

$808080 {dk grey},
$0000FF {lt blue},
$00FF00 {lt green},
$E0FFFF {lt cyan},
$FF8040 {lt red},
$FF00FF {lt magenta},
$FFFF00 {yellow},
$FFFFFF {white},

clblack
);
// и измени строку присвоения цвета вот так:
image1.canvas.Pixels[mx + x,my + y]:=colors[16 - (n mod 16)];

, тогда должно отработать... Цвета, которые в массиве - стандартные HTML цвета, брал вот отсюда: HTML color codes and names
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 178
Пол: Мужской

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


Спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

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


> image1.canvas.Pixels[mx + x,my + y]:=colors[16 - (n mod 16)];

Извините, не удержался. Но... на будущее - вместо "mod 16" лучше "and $0F"
Я конечно понимаю, что компьютеры сейчас двух-ядерные и им это неважно и компиляторы нынче умные, но всё равно культуру программирования соблюдать стоит. А то так и будете дополнительные ядра к процессорам припаивать, чтобы очередную Висту запустить...


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 23.10.2021 7:32
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name