Приветствую Вас Гость | RSS

Меню сайта

Реклама

Категории раздела
Bitmap [50]
Canvas [0]
DirectX и DelphiX [39]
GIF [3]
ICO [24]
JPEG [14]
MetaFile [6]
OpenGL [9]
ScreenSaver и ScreenMate [13]
Векторная графика [2]
Графика [37]
Изображения [0]
Картография [6]
Компоненты и Графика [0]
Создание игр [17]
Цвета и Палитра [0]
Шрифты [0]

Наш опрос
Оцените мой сайт
Всего ответов: 30

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Форма входа

Главная » Статьи » Графика и Игры » Графика

Кривая Гильберта
unit gilbert_;

interface

uses
Windows, Messages, SysUtils,
Variants, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, ComCtrls;

type
TForml = class(TForm)
procedure FormPaint(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
{$R *.dfm}

var
p: integer = 5; // порядок кривой
u: integer = 7; // длина штриха

{ Кривую Гильберта можно получить путем
соединения элементов а,b,с и d.

Каждый элемент строит
соответствующая процедура. }


procedure a(i: integer; canvas: TCanvas); forward;
procedure b(i: integer; canvas: TCanvas); forward;
procedure с(i: integer; canvas: TCanvas); forward;
procedure d(i: integer; canvas: TCanvas); forward;

// Элементы кривой
procedure a(i: integer; canvas: TCanvas);
begin
if i > 0 then
begin
d(i - l, canvas);
canvas.LineTo(canvas.PenPos.X + u, canvas.PenPos.Y);
a(i - l, canvas);
canvas.LineTo(canvas.PenPos.X, canvas.PenPos.Y + u);
a(i - l, canvas);
canvas.LineTo(canvas.PenPos.X - u, canvas.PenPos.Y);
с(i - 1, canvas);
end;
end;

procedure b(i: integer; canvas: TCanvas);
begin
if i > 0 then
begin
c(i - l, canvas);
canvas.LineTo(canvas.PenPos.X - u, canvas.PenPos.Y);
b(i - 1, canvas);
canvas.LineTo(canvas.PenPos.X, canvas.PenPos.Y - u);
b(i - l, canvas);
canvas.LineTo(canvas.PenPos.X + u, canvas.PenPos.Y);
d(i - l, canvas);
end;
end;

procedure c(i: integer; canvas: TCanvas);
begin
if i > 0 then
begin
b(i - 1, canvas);
canvas.LineTo(canvas.PenPos.X, canvas.PenPos.Y - u);
с(i - 1, canvas);
canvas.LineTo(canvas.PenPos.X - u, canvas.PenPos.Y);
c(i - 1, canvas);
canvas.LineTo(canvas.PenPos.X, canvas.PenPos.Y + u);
a(i - 1, canvas);
end;
end;

procedure d(i: integer; canvas: TCanvas);
begin
if i > 0 then
begin
a(i - 1, canvas);
canvas.LineTo(canvas.PenPos.X, canvas.PenPos.Y + u);
d(i - 1, canvas);
canvas.LineTo(canvas.PenPos.X + u, canvas.PenPos.Y);
d(i - 1, canvas);
canvas.LineTo(canvas.PenPos.X, canvas.PenPos.Y - u);
b(i - 1, canvas);
end;
end;

procedure TForml.FormPaint(Sender: TObject);
begin
Form1.Canvas.MoveTo(u, u);
a(5, Form1.Canvas); // вычертить кривую Гильберта
end;

end.
Категория: Графика | Добавил: Angel (13.07.2008)
Просмотров: 904 | Рейтинг: 0.0/0
  Delphi Lab   Главная   Регистрация   Вход  
Интересная Цитата

Поиск

Магазин


Copyright MyCorp © 2025 Хостинг от uCoz