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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.08.2010, 14:13   #1
FrankyKaup
 
Регистрация: 11.08.2010
Сообщений: 4
По умолчанию упорядоченное построение окружностей(Delphi)

Нужно нарисовать "сетку" из окружностей в определенном порядке (как приведено на рисунке). Мой код почему-то рисует только правый нижний круг( В чем ошибка кода, подскажите пожалуйста!
Код:
type
  TForm1 = class(TForm)
    Image1: TImage;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
var
L,Nx,Nat:integer; //L-это размерность Image1(на сколько частей делиться ось X, т.е относительные единицы измерения - это я сделал для масштаба), Nx – это кол-во шаров на одной стороне, Nat – это сколько всего шаров.
k,Center,Rg: real; //k-это единица измерения в данном масштабе, то есть вся ширина Image1 поделенное на L, измеряется соответственно в пикселях(на сколько я понимаю:). Center – это координата центра 1-го шарика в относительных единицах. Rg-радиус.
Xcentr,Xpix,Ycentr,Ypix:real;
X1,Y1,X2,Y2:integer;

procedure Risovanie;
var i:integer;
begin
Nx:=StrToInt(Form1.Edit1.Text);       //считываем из Edit’а кол-во шаров на стороне
L:=StrToInt(Form1.Edit2.Text);        // считываем размерность
Center:=0.5*(L-Nx)+0.5;                   //высчитываем координату центра 1-го шара 
Nat := Nx*Nx;                                   //всего шаров
k:= Form1.Image1.ClientWidth/L;  //единица измерения в пикселях
Rg := 0.45*k;	//радиус в пиклелях
For i:=0 to Nat-1 do
  Xcentr:= (i mod Nx) + Center;      //координата центра i-го шара в относит. координатах
  Xpix:= Xcentr*k;	//координата цетра i-го шара в пикселях
  Ycentr:= i div Nx + Center;           
  Ypix:= Ycentr*k;
  X1:=round(XcentrAd-Rg);		//координаты описываемого прямоугольника
  Y1:=round(YcentrAd-Rg);
  X2:=round(XcentrAd+Rg);
  Y2:=round(YcentrAd+Rg);
  Form1.Image1.Canvas.Ellipse(X1,Y1,X2,Y2);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Risovanie;
end;
end.
Вот что должно получиться если L=10, а Nx=6
FrankyKaup вне форума Ответить с цитированием
Старый 15.08.2010, 14:15   #2
FrankyKaup
 
Регистрация: 11.08.2010
Сообщений: 4
По умолчанию

Должна получиться квадратная "решетка" из окружностей, стоящих рядом друг с другом, причем по центру Image. Если L=Nx, то всё пространство Image заполняется шарами.

Последний раз редактировалось FrankyKaup; 15.08.2010 в 14:41.
FrankyKaup вне форума Ответить с цитированием
Старый 15.08.2010, 22:42   #3
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

не вникал в код... но что то мне подсказывает.. что:
Код:
procedure Risovanie;
var i:integer;
begin
Nx:=StrToInt(Form1.Edit1.Text);       //считываем из Edit’а кол-во шаров на стороне
L:=StrToInt(Form1.Edit2.Text);        // считываем размерность
Center:=0.5*(L-Nx)+0.5;                   //высчитываем координату центра 1-го шара 
Nat := Nx*Nx;                                   //всего шаров
k:= Form1.Image1.ClientWidth/L;  //единица измерения в пикселях
Rg := 0.45*k;	//радиус в пиклелях
For i:=0 to Nat-1 do
  begin
  Xcentr:= (i mod Nx) + Center;      //координата центра i-го шара в относит. координатах
  Xpix:= Xcentr*k;	//координата цетра i-го шара в пикселях
  Ycentr:= i div Nx + Center;           
  Ypix:= Ycentr*k;
  X1:=round(XcentrAd-Rg);		//координаты описываемого прямоугольника
  Y1:=round(YcentrAd-Rg);
  X2:=round(XcentrAd+Rg);
  Y2:=round(YcentrAd+Rg);
  Form1.Image1.Canvas.Ellipse(X1,Y1,X2,Y2);
  end;
end;
пару минут погодя...
лучше наверно будет два цикла пустить а не через один делать все...

еще через пару минут....
чувствуется вы раньше на бейсике работали =))))
Помог? Ну так нажми на весы!

Последний раз редактировалось SNUPY; 15.08.2010 в 22:46.
SNUPY вне форума Ответить с цитированием
Старый 17.08.2010, 13:41   #4
FrankyKaup
 
Регистрация: 11.08.2010
Сообщений: 4
По умолчанию

Спасибо, SNUPY, за помощь! Действительно проблема была в этом! А что значит на 2 цикла разбить, Вы имеете ввиду посчитать координаты, записать их в массив, а во втором цикле нарисовать?

По поводу Бэйсика - в яблочко!=))
FrankyKaup вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построение перепндикуляра в Delphi Desha Помощь студентам 1 25.04.2010 12:53
построение окружностей в Delphi Kurai Помощь студентам 8 08.04.2010 22:00
Упорядоченное хранение в файле NSvirus Паскаль, Turbo Pascal, PascalABC.NET 1 03.06.2009 12:04
Построение графика в Delphi сер4ей Помощь студентам 0 25.04.2009 15:15