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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2011, 21:19   #1
Muaxaxa
Пользователь
 
Регистрация: 22.10.2011
Сообщений: 19
По умолчанию Delphi. Окружность по Брэзенхему.

Доброго времени суток!

Задание такое : Дополнить код так, чтобы окружность задавать мануально.

Edit2=x Edit3=y ( центр )
Edit4=x Edit5=y ( на окружности )

Код :
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Image1: TImage;
    Label1: TLabel;
    Button1: TButton;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Label3: TLabel;




    procedure Rinkis(R,Xc,Yc:integer);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Button1Click(Sender: TObject);




  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.Rinkis(R, Xc, Yc: integer);
var x,y,p:integer;

begin
  p:=1-R;
  x:=0;
  y:=R;

  while x<=y do
    begin
       if p<0 then
        begin
          x:=x+1;
          y:=y;
          p:=p+2*x+1;
        end
       else
        begin
          x:=x+1;
          y:=y-1;
          p:=p+2*x+1-2*y;
        end;
       image1.Canvas.Pixels[Xc+x,Yc+y]:=random(9999999);
       image1.Canvas.Pixels[Xc+x,Yc-y]:=random(9999999);
       image1.Canvas.Pixels[Xc-x,Yc+y]:=random(9999999);
       image1.Canvas.Pixels[Xc-x,Yc-y]:=random(9999999);
       image1.Canvas.Pixels[Xc+y,Yc+x]:=random(9999999);
       image1.Canvas.Pixels[Xc+y,Yc-x]:=random(9999999);
       image1.Canvas.Pixels[Xc-y,Yc+x]:=random(9999999);
       image1.Canvas.Pixels[Xc-y,Yc-x]:=random(9999999);





       end;



end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Rinkis(strtoint(edit1.Text),X,Y);{ X Y kursora koordinates}
end;
Canvas Ellipse вроде не подошло.

В какую сторону думать?
1. курс. Не сильно понемаю как это..

________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 22.10.2011 в 23:25.
Muaxaxa вне форума Ответить с цитированием
Старый 22.10.2011, 22:27   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

обжмй...
Код:
Canvas.ellipse(xc-r, yc-r, xc+r, yc+r);
канвас использовать того объекта, который нужен - форма или имейдж.

Поясните что значит окружность задавать мануально ?? единственное, что можно задать мануально это радиус, а центр у Вас по щелчку определяется. Если же центр надо из эдитов, то сделайте кнопку, и вызывайте из её обработчика функцию круга, передавая ей 3 аргумента из эдитов
phomm вне форума Ответить с цитированием
Старый 23.10.2011, 03:09   #3
Muaxaxa
Пользователь
 
Регистрация: 22.10.2011
Сообщений: 19
По умолчанию

Я имел ввиду вот что :

Задать можно координаты (х;у) для центра и (x;y) для точки, которая находится на окружности. Радиус это растояние между этими точками.

Да, нужно по кнопке.
Muaxaxa вне форума Ответить с цитированием
Старый 23.10.2011, 10:17   #4
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Ну тогда вычисляем радиус по теореме Пифагора и закидываем опять же в функцию рисования окружности.
phomm вне форума Ответить с цитированием
Старый 23.10.2011, 16:56   #5
Muaxaxa
Пользователь
 
Регистрация: 22.10.2011
Сообщений: 19
По умолчанию

Вот, что получилось :

Код:
procedure TForm1.Rinkit( Xb, Yb, Xc, Yc: integer);
var Xa, Ya, Xba, Yba, bai, Xac, Yac, aci, R, x, y, p:integer;
    ba, ac, bcsq,bc : real;
begin


    Xc:=strtoint(edit2.Text);
    Yc:=strtoint(edit3.Text);
    Xb:=strtoint(edit4.Text);
    Yb:=strtoint(edit5.Text);

    Xa:=abs(Xb);
    Ya:=abs(Yc);


    Xba:=abs(Xa-Xb);
    Yba:=abs(Ya-Yb);
    ba:=sqrt(sqr(Xba)+sqr(Yba));

    Xac:=abs(Xc-Xa);
    Yac:=abs(Yc-Ya);
    ac:=sqrt(sqr(Xac)+sqr(Yac));
    aci:=Round(ac);
    bai:=Round(ba);
    Bcsq:=sqr(bai)+sqr(aci);

    Bc:=Round(sqrt(bcsq));

    R:=Round(BC);



  p:=1-R;
  x:=0;
  y:=R;

  while x<=y do
    begin
       if p<0 then
        begin
          x:=x+1;
          y:=y;
          p:=p+2*x+1;
        end
       else
        begin
          x:=x+1;
          y:=y-1;
          p:=p+2*x+1-2*y;
        end;
       image1.Canvas.Pixels[Xc+x,Yc+y]:=random(9999999);
       image1.Canvas.Pixels[Xc+x,Yc-y]:=random(9999999);
       image1.Canvas.Pixels[Xc-x,Yc+y]:=random(9999999);
       image1.Canvas.Pixels[Xc-x,Yc-y]:=random(9999999);
       image1.Canvas.Pixels[Xc+y,Yc+x]:=random(9999999);
       image1.Canvas.Pixels[Xc+y,Yc-x]:=random(9999999);
       image1.Canvas.Pixels[Xc-y,Yc+x]:=random(9999999);
       image1.Canvas.Pixels[Xc-y,Yc-x]:=random(9999999);

       end;



end;


procedure TForm1.Button1Click(Sender: TObject);
begin
   Rinkit(strtoint(edit4.Text),strtoint(edit5.Text),strtoint(edit2.Text),strtoint(edit3.Text));
end;
Правильно?

Последний раз редактировалось Muaxaxa; 23.10.2011 в 17:59.
Muaxaxa вне форума Ответить с цитированием
Старый 23.10.2011, 21:16   #6
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

А разве вот так не получится ?
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
   Rinkit(strtoint(edit4.Text),strtoint(edit5.Text),strtoint(edit2.Text),strtoint(edit3.Text));
end;
procedure TForm1.Rinkit( Xb, Yb, Xc, Yc: integer);
var R:integer;   
begin
r := round(sqrt(sqr(xc-xb)+sqr(yc-yb)));
Canvas.ellipse(xc-r, yc-r, xc+r, yc+r);
end;
просто если честно, не понимаю вообще зачем та портянка, что у Вас...
phomm вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построить окружность в Delphi scorp93 Помощь студентам 1 23.01.2011 16:27
окружность MetR Помощь студентам 1 08.01.2011 13:05
Множества и Окружность Voortex Фриланс 10 05.03.2010 21:16
Окружность.. surovii Помощь студентам 28 29.03.2009 18:00