Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TChart 
:(
    Опции темы
lotax
  Дата 8.9.2006, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 18.4.2005
Где: KZ

Репутация: нет
Всего: нет



Привет, всем!!!
Вопрос:
Есть диаграмма (TChart) (тип: график(Line)) как можно узнать значение оси Y,
при пересечении оси X с графиком.

Это сообщение отредактировал(а) lotax - 8.9.2006, 15:38
--------------------
Говори, что думаешь и думай, что говоришь.
PM MAIL ICQ   Вверх
Alexeis
Дата 8.9.2006, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Код

procedure TForm1.btn1Click(Sender: TObject);
begin
  LineSeries1Series1.AddXY(1,1);
  LineSeries1Series1.AddXY(2,2);
  LineSeries1Series1.AddXY(3,3);
  Application.ProcessMessages;
  ShowMessage(FloatToStr(cht1.LeftAxis.Minimum) +
              ' ' + FloatToStr(cht1.LeftAxis.Minimum));

end;



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
lotax
Дата 10.9.2006, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 18.4.2005
Где: KZ

Репутация: нет
Всего: нет



alexeis1 спасибо за ответ, но этот вариант не подходит.

Имеется в виду что значение оси Х известное, например X=10, смотрим по графику, где идет пересечение с графиком, надо узнать значение Y (график по определенным координатам уже построен).

Присоединённый файл ( Кол-во скачиваний: 34 )
Присоединённый файл  Chr.JPG 50,06 Kb
--------------------
Говори, что думаешь и думай, что говоришь.
PM MAIL ICQ   Вверх
Alexeis
Дата 10.9.2006, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Ну встроеной функции я не нашел, приходит в голову только такое
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  i, xn : Integer;
  found : Boolean;

const
  err = 0.1;

begin
  Series1.AddXY(1,1);
  Series1.AddXY(2, 1.5);
  Series1.AddXY(3,4);
  Series1.AddXY(8,7);

  found := False;
  for i := 0 to Series1.Count - 1
  do
    if abs(Series1.XValue[i] - 2) < err
    then
      Begin
        found := True;
        xn := i
      end;

  ShowMessage(FloatToStr(Series1.YValue[xn]));
end;



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
lotax
Дата 11.9.2006, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 18.4.2005
Где: KZ

Репутация: нет
Всего: нет



Все верно, только значения могут быть не постоянными, по которым построен график 
(если укажем x=2, то соответст. y=1.5 ), например X=2.0063
 smile 

Может есть компоненты, которые дают выше указанные возможности...

Это сообщение отредактировал(а) lotax - 11.9.2006, 09:20
--------------------
Говори, что думаешь и думай, что говоришь.
PM MAIL ICQ   Вверх
Guedda
Дата 11.9.2006, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Тогда тебе лучше не Tchart пользоваться, а на канве рисовать, предварительно высчитывая нужные тебе значения, и помещая их на канву. Моё ИМХО, так быстрее будет.


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Alexeis
Дата 11.9.2006, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



lotax, В таких делах привязка алгоритма к отображению, не самый лучший способ програмирования. Я обычно все расчеты и интерполяции (линейные, параболические) между точками делаю в алгоритме, а Chart использую, по его назначенью, т.е. по выводу информации, а не по обработке.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Fedia
Дата 11.9.2006, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 8
Всего: 13



lotax, находим две точки графика, соответствующие условию: 
1. Они следуют одна за другой.
2. Координата X искомой точки находится между значениями X этих точек. 
Составляем уравнение прямой по этим двум точкам. Подставляем в это уравнение значение X искомой точки и находим Y. Математика, класс 5 или 6-й.


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
lotax
Дата 11.9.2006, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 18.4.2005
Где: KZ

Репутация: нет
Всего: нет



Цитата

lotax, В таких делах привязка алгоритма к отображению, не самый лучший способ програмирования. Я обычно все расчеты и интерполяции (линейные, параболические) между точками делаю в алгоритме, а Chart использую, по его назначенью, т.е. по выводу информации, а не по обработке.


Не подскажешь ссылки или примеры как примерно реализовать. С такими вещами не сталкивался... smile  
--------------------
Говори, что думаешь и думай, что говоришь.
PM MAIL ICQ   Вверх
Alexeis
Дата 11.9.2006, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Ну вот возьмем реальный фрагмент программы, в которой требуется получение интерполированого значения определенного коэффициента в случае если значения абсцис заданы ввиде равномерной сетки значений
Код

  c : array[1..20] of Extended = (1, 1.15, 1.2, 1.15, 1.25, 1.28, 1.25, 1.3,
                                  1.3, 1.35, 1.15, 1.1, 1.25, 1.2, 1.32,
                                  1.25, 1.3, 1.1, 1.1, 1.1);

       {$O-}
       
function C1(d : Extended) : Extended;
var
  index : Integer;
begin
  if (d < 0.05) or (d > 1)
  then
    begin
      Result := 0;
      Exit;
    end
  else
    if d = 1
    then
      begin
        Result := a[20];
        Exit;
      end;

  index := Trunc(d * 20);
  Result := 20 * (a[index+1]-a[index]) * (d - index / 20) + a[index];
end;


 c : array[1..20] of - это значения в точках индекс номер точки.
в данном случае для получения индекса точки, по известной абсцисе надо, умножить ее на 20 (такой здесь масштаб), 
  index := Trunc(d * 20); - определяет ближайшую левую тчку.
index + 1 это ближайшая правая точка. И просто из уравнения прямой, полученной по 2 точкам (тут уже оно упрощеное), подставляя, значение абсциссы, получаем ординату. Для неравностоящих узлов все сложнее, нужно более сложный алгоритм поиска близлежащих точек, например бинарный поиск. 

Это сообщение отредактировал(а) alexeis1 - 11.9.2006, 10:20


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
lotax
Дата 11.9.2006, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 121
Регистрация: 18.4.2005
Где: KZ

Репутация: нет
Всего: нет



Всем спасибо,  в особенности alexeis1, буду разбираться...
--------------------
Говори, что думаешь и думай, что говоришь.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0764 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.