Круговая диаграмма в Лазарус

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Яра
новенький
Сообщения: 13
Зарегистрирован: 06.10.2017 23:43:31

Круговая диаграмма в Лазарус

Сообщение Яра »

Добрый вечер!
Не дает мне покоя - круговая диаграмма... Хотелось бы построить ее (сектор), через координаты центра, радиус, и угол. Но либо я плохо искала, либо все таки такой процедуры в Лазарусе нет. Если ее нет, как с легкостью ее обойти. Для примера хочу построить диаграмму для такого примера...https://ru.wikihow.com/%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D1%8C-%D0%BA%D1%80%D1%83%D0%B3%D0%BE%D0%B2%D1%83%D1%8E-%D0%B4%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%83.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

то что ты ищешь, это метод Pie у Canvas-а

можешь и готовые решения взять
Яра
новенький
Сообщения: 13
Зарегистрирован: 06.10.2017 23:43:31

Сообщение Яра »

Как бы я знаю, про такую процедуру (метод)...Я не совсем понимаю, как посчитать StartX, StartY, EndX,EndY. Вот где у меня загвоздка)
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

Яра писал(а):Я не совсем понимаю, как посчитать StartX, StartY, EndX,EndY. Вот где у меня загвоздка)

тригонометрия:
x = cos(a)*R; y = sin(a)*R;

в случае с Pie() придётся к этим X и Y добавить ещё и координату левого верхнего угла (EllipseX1, EllipseY2).
что важно помнить, что сектор рисуется против часовой стрелки.

вот тут в примере, два сектора рисуются между самой верхней точкой окружности и самой правой точкой окружности.
и порядок передачи точек влияет на конечный результат.

Код: Выделить всё

procedure TForm1.FormPaint(Sender: TObject);
begin
  Canvas.Pie(100,100,200,200, 100+50,  100+0,  100+100, 100+50);

  Canvas.Pie(200,200,300,300, 200+100, 200+50, 200+50,  200+0);
end;


обрати внимание, что к каждой координате Start и End приходится прибавлять то же значение что в EllipseX1, EllipseY1
piepie.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ответить