Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.11.2011, 21:37
tcjkjl tcjkjl вне форума
Прохожий
 
Регистрация: 27.10.2011
Сообщения: 5
Репутация: 10
По умолчанию окружность кольца

Здравствуйте!
Прошу помощи. Мне нужно делить окружность на кольца задавая количество колец с помощью SpinEdit1 и также с помощью SpinEdit2 и SpinEdit3 менять внешний и внутренний радиус окружности (колец).
Ответить с цитированием
  #2  
Старый 04.11.2011, 21:56
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Зная радиус (даметр) основного кольца высчитываем длину окружности. Делим на значение из SpinEdit1, получаем примерный диаметр будущих окружностей. Более точно можно узнать, вычислив длину сегмента.
Также вопрос, где будут лежать будущие окружности? На внешней стороне основной окружности, на внутренней, по центру?
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 04.11.2011 в 22:00.
Ответить с цитированием
  #3  
Старый 04.11.2011, 22:15
tcjkjl tcjkjl вне форума
Прохожий
 
Регистрация: 27.10.2011
Сообщения: 5
Репутация: 10
По умолчанию

мне нужно сделать как это показано на вложенном файле "кольца"
Изображения
Тип файла: jpg кольца.jpg (48.9 Кбайт, 11 просмотров)
Ответить с цитированием
  #4  
Старый 04.11.2011, 22:20
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Учись правильно формулировать вопросы.
Цитата:
...Мне нужно делить окружность на кольца...
На рисунке делится не окружность, а круг.
Задача ещё проще, чем с окружностью.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 04.11.2011, 22:42
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Вычитаем радиусы внешнего и внутреннего, делим на количество, получаем дельта радиус каждой новой окружности относительно предыдущей.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #6  
Старый 04.11.2011, 22:45
tcjkjl tcjkjl вне форума
Прохожий
 
Регистрация: 27.10.2011
Сообщения: 5
Репутация: 10
По умолчанию

Ну значит круг надо разделить на кольца меняя их радиусы. angvelem если это для Вас так просто, то помогите мне пожалуйста.
Ответить с цитированием
  #7  
Старый 05.11.2011, 00:31
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Вот для рисования колец:
Код:
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  
Старый 05.11.2011, 10:37
tcjkjl tcjkjl вне форума
Прохожий
 
Регистрация: 27.10.2011
Сообщения: 5
Репутация: 10
По умолчанию

angvelem, Огромное спасибо!!
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:03.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025