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

> Занимательная графика
BlackShadow
сообщение 21.05.2004 13:32
Сообщение #1


Гость






В этой теме приведены исходники, отрисовывающие следующие фигуры:
  1. "Архимедова спираль" (ниже в этом же сообщении)

  2. Прикрепленное изображение
    Исходник для Турбо Паскаля (процедуры)
    Исходник для Турбо Паскаля (ООП)
    Отрисовка только прямыми линиями

  3. Прикрепленное изображение
    Исходник для FPC

  4. Прикрепленное изображение

  5. Прикрепленное изображение

  6. Прикрепленное изображение

  7. Прикрепленное изображение
    Фрактальные деревья

  8. "Фигуры Лиссажу"
  9. Пример RGB графики в режиме 13h
Архимедова спираль

Цитата
Параметрическое представление спирали: x = r cos t , y = r sin t, r = t/2

Если количество витков = n, то T пробегает от 0 до n*2*pi. r растёт от 0 до R_max (данный внешний радиус), и пропорционален T. Тогда r = T/(n*2*pi)*R_max.

Uses Graph, Crt;

Const
r_max = 200;
n = 7;
Var
gr, gm: Integer;
i, k: Integer;
ZeroX, ZeroY: Integer;
x, y, r, t: Double;

begin
gr := Detect;

InitGraph(gr, gm, '');
k := n * 140;

ZeroX := Round(GetMaxX/2);
ZeroY := Round(GetMaxY/2);
{MoveTo(ZeroX, ZeroY);}
For i := 1 To k Do
Begin
T := (n * 2 * Pi) * i / k;
r := T / (n * 2 * Pi) * r_max;
x := r * Cos(T);
y := r * Sin(T);
PutPixel(ZeroX + Round(x), ZeroY - Round(y), White)
End;
ReadKey;
CloseGraph;
end.
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 20.05.2005 9:48
Сообщение #2


Гость






Фрактальные деревья

Uses Graph, CRT;
Procedure Tree(x, y: Integer; a: Real; l:integer);
Var
x1, y1: Integer;
p, s, i : Integer;
a1 : Real;
Begin

If l<8 Then exit;

x1 := Round(x + l*cos(a));
y1 := Round(y + l*sin(a));

If l > 100 Then p:=100 Else p:=l;
If p < 40 Then Begin
{ Генерировать листья }
If Random > 0.5 Then SetColor(10) Else SetColor(2); { или 4, 14 }
For i:=0 To 3 Do Line(x+i, y, x1, y1)
End
Else Begin
{ Генерировать ветки }
Setcolor(6);
For i:=0 To (p div 6) Do Line(x+i-(p div 12), y, x1, y1);
End;

{ Следующие ветки }
For i:=0 To 9-Random(9) Do Begin
s := Random(l-l div 6) + (l div 6);
a1:= a + 1.6*(0.5-Random); { Угол наклона веток }
x1:= Round(x + s*cos(a));
y1:= Round(y + s*sin(a));
Tree(x1, y1, a1, p-5-Random(30));
{ Чем меньше вычтем, тем пышнее будет дерево }
End;
End;

Var
gd, gm: Integer;
Begin
Randomize;
gd:=Detect;
InitGraph(gd, gm, '');
Tree(320, 480, 3*pi/2, 200);
ReadKey;
CloseGraph;
End.


Скачать исходник: Прикрепленный файл  fractree.pas ( 1.11 килобайт ) Кол-во скачиваний: 2708


Эскизы прикрепленных изображений
Прикрепленное изображение
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



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