Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 18.02.2017
Сообщений: 51
1

Прорисовка вертикальных линий на видимой части графика

13.12.2018, 18:56. Показов 2714. Ответов 5

Author24 — интернет-сервис помощи студентам
Добрый вечер!
Имеется некоторая функция, которая минимизируется с помощью алгоритма Фибоначчи. Суть проблемы такая: как сделать так, чтобы можно было показать на компоненте chart как "отбрасываются" отрезки, в которых нет минимума?
У меня в предположении такая идея, что нужно как-то сделать так, чтобы серия, которая выстраивает вертикальные линии подстраивалась под размер текущего графика. Однако, как сделать это таким образом не могу понять. Единственное до чего додумался:
Delphi
1
2
3
4
5
6
series4.clear;
       series4.AddXY(a,(f(a,ComboBox1.ItemIndex)+5));
       series4.AddXY(a,(f(a,ComboBox1.ItemIndex)-5));
       series5.clear;
       series5.AddXY(b,(f(b,ComboBox1.ItemIndex)+5));
       series5.AddXY(b,(f(b,ComboBox1.ItemIndex)-5));
Однако, график может быть очень большого масштаба, и тогда эти вертикальные линии не будут видны.
То есть нужно, чтобы вертикальные линии занимали все видимое пространство на графике.
Буду очень признателен, если поможете с решением этой проблемы.
Миниатюры
Прорисовка вертикальных линий на видимой части графика  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.12.2018, 18:56
Ответы с готовыми решениями:

MsChart - Первая точка видимой на экране части графика всегда уходит в ноль
первая точка видимой на экране части графика всегда уходит в ноль. Если я соответственно зумирую...

График без вертикальных линий
Доброго времени суток! Помогите, пожалуйста, построить график. В приложенном файле указаны...

Прямоугольная решетка из n горизонтальных и m вертикальных линий
Здравствуйте. Помогите пожалуйста решить такую задачу: Поместите на форму два компонента...

Можно ли создать гистограмму без вертикальных линий?
Можно ли в Матлабе создать гистограмму без вертикальных линий: как на примере? Как? второй...

5
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
13.12.2018, 19:40 2
Лучший ответ Сообщение было отмечено Zaniel1 как решение

Решение

Для рисования в Чарт есть процедура Chart1AfterDraw()

Вот отрывок из программы
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//рисование точек и заливка треугольника
procedure TForm1.Chart1AfterDraw(Sender: TObject);
begin
//перевод координат точек в экранные
x11:=series1.CalcXPosValue(x1);
y11:=series1.CalcYPosValue(y1);
x12:=series1.CalcXPosValue(x2);
y12:=series1.CalcYPosValue(y2);
x13:=series1.CalcXPosValue(x3);
y13:=series1.CalcYPosValue(y3);
//рисование закрашенного треугольника
with Chart1.Canvas do
 begin
  brush.Color:=clLime;
  pen.Color:=clLime;
  ellipse(x11-3,y11-3,x11+3,y11+3);
  ellipse(x12-3,y12-3,x12+3,y12+3);
  ellipse(x13-3,y13-3,x13+3,y13+3);
  polygon([point(x11,y11),point(x12,y12),point(x13,y13),point(x11,y11)]);
 end;
1
0 / 0 / 0
Регистрация: 18.02.2017
Сообщений: 51
13.12.2018, 20:21  [ТС] 3
Что-то уже начало получаться, однако, все равно остается неясным, как заменить эту самую "5" на максимальное или минимальное значение отображаемое на графике, чтобы полностью линия проходила через всю видимую часть графика?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TForm1.Chart1AfterDraw(Sender: TObject);
var
x11,
y11,
x12,
y12 :integer;
begin
x11:=series4.CalcXPosValue(z);
y11:=series4.CalcYPosValue(5);
x12:=series4.CalcXPosValue(z);
y12:=series4.CalcYPosValue(-5);
with Chart1.Canvas do
 begin
  brush.Color:=clLime;
  pen.Color:=clLime;
  line(x11,y11,x12,y12);
 end;
end;
0
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
13.12.2018, 20:48 4
x11, x12 значения по оси Х,
y11,y13 минимальные значения по оси Y=Chart1.LeftAxis.Minimum
y12,y14 максимальные значения по оси Y=Chart1.LeftAxis.Maximum
//значения мин и макс должны быть настроены, или линии не от начала до конца, найти min,max по Y.

Добавлено через 1 минуту
И почему у Вас значения х11 и х12 одинаковые?
1
0 / 0 / 0
Регистрация: 18.02.2017
Сообщений: 51
13.12.2018, 21:05  [ТС] 5
Все, получилось сделать так как было задумано. Спасибо вам!
Значения одинаковы для того, чтобы построить вертикальную прямую, для этого нужно 3 точки, то есть чтобы было (Chart1.LeftAxis.Minimum, z, Chart1.LeftAxis.Maximum).
Понял что вы имели ввиду, что можно было обойтись 3 переменными вместо 4. Сразу об этом и не подумал даже...
0
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
13.12.2018, 21:08 6
Нет, нужно 4 точки х1,х2, ymin,ymax
Delphi
1
2
moveto(x1,ymin);lineto(x1,ymax);
moveto(x2,ymin);lineto(x2,ymax);
1
13.12.2018, 21:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.12.2018, 21:08
Помогаю со студенческими работами здесь

Canvas. Отрисовка заданного количества вертикальных линий с определенным шагом
Здравствуйте. Помогите разобраться с проблемой. Есть таблица StringGrid1. В ней будет определенное...

Отображение вертикальных линий, соединяющих фигурные скобки в редакторе кода
В VS 2013 в C# можно то ли включить, то ли установить плагин, чтобы отображались вертикальные...

Изобразить на экране компьютера решётку, состоящую из n вертикальных и m горизонтальных линий
Изобразить на экране компьютера решётку, состоящую из n вертикальных и m горизонтальных линий....

Нарисовать 10 разноцветных вертикальных линий отстоящих друг от друга на равном расстоянии
Нарисовать 10 разноцветных вертикальных линий отстоящих друг от друга на равном расстоянии, причем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru