![]() |
|
#1
|
|||
|
|||
![]() Здравствуйте!
Прошу помощи. Мне нужно делить окружность на кольца задавая количество колец с помощью SpinEdit1 и также с помощью SpinEdit2 и SpinEdit3 менять внешний и внутренний радиус окружности (колец). |
#2
|
||||
|
||||
![]() Зная радиус (даметр) основного кольца высчитываем длину окружности. Делим на значение из SpinEdit1, получаем примерный диаметр будущих окружностей. Более точно можно узнать, вычислив длину сегмента.
Также вопрос, где будут лежать будущие окружности? На внешней стороне основной окружности, на внутренней, по центру? Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. Последний раз редактировалось angvelem, 04.11.2011 в 22:00. |
#3
|
|||
|
|||
![]() мне нужно сделать как это показано на вложенном файле "кольца"
|
#4
|
||||
|
||||
![]() Учись правильно формулировать вопросы.
Цитата:
Задача ещё проще, чем с окружностью. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#5
|
||||
|
||||
![]() Вычитаем радиусы внешнего и внутреннего, делим на количество, получаем дельта радиус каждой новой окружности относительно предыдущей.
jmp $ ; Happy End! The Cake Is A Lie. |
#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. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. Последний раз редактировалось angvelem, 05.11.2011 в 01:50. |
#8
|
|||
|
|||
![]() angvelem, Огромное спасибо!!
|