![]() |
|
|
|
|
#1
|
|||
|
|||
|
Здравствуйте!
Прошу помощи. Мне нужно делить окружность на кольца задавая количество колец с помощью SpinEdit1 и также с помощью SpinEdit2 и SpinEdit3 менять внешний и внутренний радиус окружности (колец). |
|
#2
|
||||
|
||||
|
Зная радиус (даметр) основного кольца высчитываем длину окружности. Делим на значение из SpinEdit1, получаем примерный диаметр будущих окружностей. Более точно можно узнать, вычислив длину сегмента.
Также вопрос, где будут лежать будущие окружности? На внешней стороне основной окружности, на внутренней, по центру? Последний раз редактировалось angvelem, 04.11.2011 в 22:00. |
|
#3
|
|||
|
|||
|
мне нужно сделать как это показано на вложенном файле "кольца"
|
|
#4
|
||||
|
||||
|
Учись правильно формулировать вопросы.
Цитата:
Задача ещё проще, чем с окружностью. |
|
#5
|
||||
|
||||
|
Вычитаем радиусы внешнего и внутреннего, делим на количество, получаем дельта радиус каждой новой окружности относительно предыдущей.
|
|
#6
|
|||
|
|||
|
Ну значит круг надо разделить на кольца меняя их радиусы. angvelem если это для Вас так просто, то помогите мне пожалуйста.
|
|
#7
|
||||
|
||||
|
Вот для рисования колец:
Код:
unit Unit19;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin, ExtCtrls;
type
TForm2 = class(TForm)
Image1 : TImage;
Panel1 : TPanel;
Label1 : TLabel;
Label2 : TLabel;
Label3 : TLabel;
Label4 : TLabel;
OuterRadius: TSpinEdit;
InnerRadius: TSpinEdit;
CountCircle: TSpinEdit;
CountSectors: TSpinEdit;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2 : TForm2;
bmp : TBitmap;
Center : TPoint;
implementation
uses
Math;
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
begin
bmp := TBitmap.Create;
bmp.Width := Image1.Width;
bmp.Height := Image1.Height;
Center.X := Image1.Width div 2;
Center.Y := Image1.Height div 2;
InnerRadius.MinValue := 10;
InnerRadius.MaxValue := (Image1.Width - 10) div 2;
InnerRadius.Value := InnerRadius.MaxValue;
end;
procedure TForm2.FormDestroy(Sender: TObject);
begin
bmp.Free;
end;
procedure TForm2.Timer1Timer(Sender: TObject);
var
I, J : Integer;
X, Y : Integer;
begin
bmp.Canvas.Brush.Style := bsSolid;
bmp.Canvas.Brush.Color := clBtnFace;
bmp.Canvas.FillRect(Image1.ClientRect);
bmp.Canvas.Brush.Style := bsClear;
I := InnerRadius.Value div CountCircle.Value;
for J := 1 to CountCircle.Value do
bmp.Canvas.Ellipse(Center.X - J * I, Center.Y - J * I, Center.X + J * I, Center.Y + J * I);
if CountSectors.Value > 1 then
for J := 0 to CountSectors.Value - 1 do
begin
bmp.Canvas.LineTo(Center.X, Center.Y);
X := Round(Sin(J / CountSectors.Value * (pi * 2)) * InnerRadius.Value);
Y := Round(Cos(J / CountSectors.Value * (pi * 2)) * InnerRadius.Value);
bmp.Canvas.MoveTo(X + Center.X, Y + Center.Y);
end;
Image1.Canvas.Draw(0, 0, bmp);
end;
end.Последний раз редактировалось angvelem, 05.11.2011 в 01:50. |