Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2013, 14:06   #1
Lisёноk
Пользователь
 
Регистрация: 08.03.2010
Сообщений: 75
По умолчанию Эллипса по алгоритму Брезенхейма

Добрый день! Имеется следующее задание:
Изобразить эллипс с помощью Алгоритма Брезенхейма, использующего 4-связанность.

Код для обычной отрисовки эллипса я написала. Надеюсь правильно.
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Canvas.Brush.Color:=clWhite;
end;

procedure Ellipse(Canvas: TCanvas; X1, Y1, X2, Y2: integer);
var xR, yR, X, Y: integer;
i: Single;
begin
xR := abs(X1 - X2) div 2; // Радиус X
yR := abs(Y1 - Y2) div 2; // Радиус Y
// Центр
X := X1 + (X2 - X1) div 2;
Y := Y1 + (Y2 - Y1) div 2;
i := 0;
While i <= 359 do begin
Canvas.Pixels[Trunc(X + xR * Sin(i)), Trunc(Y + yR * Cos(i))] := clLime;
i := i + 0.1
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Ellipse(Image1.Canvas, strtoint(edit1.Text),strtoint(edit2.Text),strtoint(edit3.Text),strtoint(edit4.Text))
end;

end.
В методичке имеется алгоритм для генерации четырехсвязной развертки:
Код:
x:=x1;
y:=y1;
n:=x2-x1;
m:=y2-y1;
d:=(m/n);
e:=d/2;
for i:=1 to n+m do
 begin
  x:=x+1;
  e:=e+d; { отклонение }
  if e>0.5 then
    begin
      y:=y+1;
      e:=e-1
    end
   else
    begin
     x:=x+1;
     e:=e+d
    end;
   PutPixel(x,y)
  end;
Я в общем разобралась с идеей этой развертки. Но ума теперь не приложу как ее привязать к тому коду для рисования, который написала я. Может надо как то по другому код переписать? Очень надеюсь на Вашу помощь!
Я самый порочный ангел и самый безгрешный демон...
Lisёноk вне форума Ответить с цитированием
Старый 13.09.2013, 22:36   #2
Lisёноk
Пользователь
 
Регистрация: 08.03.2010
Сообщений: 75
По умолчанию

Никто не сможет подсказать, помочь?(((
Я самый порочный ангел и самый безгрешный демон...
Lisёноk вне форума Ответить с цитированием
Старый 13.09.2013, 23:09   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

http://ru.wikipedia.org/wiki/Алгоритм_Брезенхэма там есть готовый код ( ну и теория конечно) рисования окружности для дельфи - только правильнго положить в проект, и всё связать. И по сути ничего переписывать не надо, Ваш алгоритм рисования окружности не будет нужен и первый код тогда не имеет смысла, если всё равно надо по брезенхему, поэтому берите прямо готовый код - как раз и будет подобен Вашему первому, с заменой алгоритма на брезенхема.

Только разберитесь в коде досконально, что где и как, да как раз "оживление" (форма, контролы, привязки событий) кода будет хорошим разбором его.
phomm вне форума Ответить с цитированием
Старый 16.09.2013, 22:24   #4
Lisёноk
Пользователь
 
Регистрация: 08.03.2010
Сообщений: 75
По умолчанию

Большое спасибо))
Я самый порочный ангел и самый безгрешный демон...
Lisёноk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Assembler - Рисование эллипса dessaber Помощь студентам 2 21.11.2011 09:13
Поворот эллипса. Kingdom_Reborn Помощь студентам 1 21.10.2010 15:54
Центр эллипса. Vergil Помощь студентам 2 21.05.2010 12:37
Раскраска эллипса rubik Мультимедиа в Delphi 1 02.05.2010 05:21
Рисование Эллипса Macwin Общие вопросы C/C++ 1 18.03.2010 14:38