Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите разобратся ТСhart, TChart 
:(
    Опции темы
vudu91
Дата 25.5.2009, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите пожалуйста кто может разобратся с компонентом  TChart... в меня при роботе с ним возникло два вопроса на какие не могу найти ответа
1)как можно сделать чтобы осий Оу и Ох пересекались в точке (0;0) при любых значениях min,max х и у??? 
2)а как можно сохранить а потом загрузить  в програму  мой Chart???
помогите пожалуйста  smile  smile  smile   
PM MAIL   Вверх
mrbrooks
Дата 25.5.2009, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

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




Цитата(vudu91 @  25.5.2009,  10:34 Найти цитируемый пост)
1) как можно сделать чтобы осий Оу и Ох пересекались в точке (0;0) при любых значениях min,max х и у??? 

Начальные координаты должны быть в 0,0


Цитата(vudu91 @  25.5.2009,  10:34 Найти цитируемый пост)
2)а как можно сохранить а потом загрузить  в програму  мой Chart???

никак. сохранять можно координаты в виде массива в файле и загрузить их из него.
PM MAIL   Вверх
vudu91
Дата 25.5.2009, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



mrbrooks, 
я понимаю что в 0;0 но как это сделать,  я никак не могу найти, просто я задаю в Chart в процентах  месторосположение осе но а как задать начальные координаты в 0;0  я не знаю ... подскажи пожалуйста
PM MAIL   Вверх
Usper
Дата 26.5.2009, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Можно, например, принудительно установить минимальное значение шкалы в ноль. Пример для оси Y (левой):
Код

Chart1->LeftAxis->AutomaticMinimum=false;
Chart1->LeftAxis->Minimum=0;


Или максимальное, в зависимости от задачи.

Это сообщение отредактировал(а) Usper - 26.5.2009, 09:19


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
vudu91
Дата 26.5.2009, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Usper, 
cпасибо но такое мне не подходит, дело в том что мои оси находятся по середине при любых значениях min i max  но когда пользователь изменяетн например maxY из 10 на 5 то ось Х пересекает у точке У в точке -2.5.. но а когда я и  minY меняю на на -5 все норм, тоже самое по осью oY... и что делать не знаю  smile    
PM MAIL   Вверх
Usper
Дата 26.5.2009, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Так может быть при каждом новом добавлении точки на график проверять координаты этой точки по Х и У, а после этого, если координаты выходят за текущий максимум по модулю увеличить минмальное и максимальное допустимое значение шкалы соответствующей оси синхронно?



--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
vudu91
Дата 26.5.2009, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



нет, мне просто надо чтобы оси Х и У всегда пересекались в (0;0) всегда
PM MAIL   Вверх
Usper
Дата 26.5.2009, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В результате они и будут всегда пересекаться в нуле. Вот код:
Код

....
#include <math.h>
....
double XMax, YMax; //глобальные переменные
...
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    XMax=1;
    YMax=1;
    Chart1->LeftAxis->Automatic=false;
    Chart1->BottomAxis->Automatic=false;
    Chart1->LeftAxis->Maximum=YMax;
    Chart1->LeftAxis->Minimum=-YMax;
    Chart1->BottomAxis->Maximum=XMax;
    Chart1->BottomAxis->Minimum=-XMax;
}
...
void __fastcall TForm1::Series1AfterAdd(TChartSeries *Sender, 
      int ValueIndex)                   //событие возникает, когда добавляется точка в Series
{
    if(fabs(Series1->YValue[ValueIndex])>YMax)
    {
        YMax=fabs(Series1->YValue[ValueIndex]);
        Chart1->LeftAxis->Maximum=fabs(YMax);
        Chart1->LeftAxis->Minimum=-fabs(YMax);
    }
    if(fabs(Series1->XValue[ValueIndex])>XMax)
    {
        XMax=fabs(Series1->XValue[ValueIndex]);
        Chart1->BottomAxis->Maximum=fabs(XMax);
        Chart1->BottomAxis->Minimum=-fabs(XMax);
    }
}
...



--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
vudu91
Дата 26.5.2009, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а если Ymax а Ymin не равно -Ymax???  например 3 и -9 

Это сообщение отредактировал(а) vudu91 - 26.5.2009, 20:25
PM MAIL   Вверх
Usper
Дата 26.5.2009, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(vudu91 @  26.5.2009,  21:18 Найти цитируемый пост)
а если Ymax а Ymin не равно -Ymax???  например 3 и -9 
 
Вопрос администраторам: может при регистрации новых пользователей на форуме надо ввести тест на знание русского языка?  smile 
vudu91, я не понял смысл последнего вопроса. Где Вы нашли в моём примере Ymin? Вас интересует что произойдёт когда ряд данных будет несимметричен относительно нуля (т.е. координата Y будет меняться например так -1, 2, 10, 100)? На графике просто будет куча незанятого места. Но ведь Вы и хотели пересечение осей в точке 0. Пример можно усложнить, ввести проверку знака максимального и минимального значения в ряде данных. Например если ряд данных такой: 1,2,3,4, то установить Chart1->LeftAxis->Minimum (или Chart1->BottomAxis->Minimum) в ноль. Однако если ряд данных будет такой: 100, 101, 102, 103, то мы опять будем иметь кучу пустого места и с этим ничего поделать не получиться. У нас или более-менее заполненное место на графике или пересечение осей в точке 0.


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
vudu91
Дата 26.5.2009, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



это у меня первоначальное
user posted image[/URL][/IMG]
это когда я изменяю max и min
user posted image[/URL][/IMG]

мне нужно чтобы они пересекались в (0;0).. график строится только в этом диапазоне, за грани min и max он невыходит
вот пример  
user posted image[/URL][/IMG]
  а при изменении
user posted image[/URL][/IMG]
 

PM MAIL   Вверх
Usper
Дата 27.5.2009, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ага, вот оно что, я использовал XMax и YMax для своих целей, чтобы вычислить в каких диапазонах изменяются значения по шкале оси. Если Вам надо вручную вводить эти самые диапазоны (как я понял по скриншотам, которые, кстати, смог посмотреть только шаманскими методами) то придётся вычислять значение Chart1->LeftAxis->PositionPercent (это для левой оси) например так: Chart1->LeftAxis->PositionPercent=fabs(Xmin)*100/(Xmax-Xmin), не забыв установить Chart1->LeftAxis->Maximum=Ymax; Chart1->LeftAxis->Minimum=Ymin. 

Это сообщение отредактировал(а) Usper - 27.5.2009, 08:56


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
vudu91
Дата 27.5.2009, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Usper, спасибо... зараз попробую и так..

Добавлено через 7 минут и 55 секунд
а у меня теперь новый созрел вопрос...
а как можно обновить сам Chart
например у меня есть кнопка показать и убрать сетку и ColorBox каким я меняю цвет этой сетки
Код

void __fastcall TForm1::Button5Click(TObject *Sender)
{g++;
Chart1->LeftAxis->Grid->Color=ColorBox2->Selected;
Chart1->BottomAxis->Grid->Color=ColorBox2->Selected;
Chart1->LeftAxis->Grid->Color=ColorBox2->Selected;
if(g%2==0){
Chart1->LeftAxis->Grid->Visible=false;
Chart1->BottomAxis->Grid->Visible=false;
ColorBox2->Visible=false;
Button5->Caption="Показать сетку";
}
if(g%2!=0){
Chart1->LeftAxis->Grid->Visible=true;
Chart1->BottomAxis->Grid->Visible=true;
ColorBox2->Visible=true;
Button5->Caption="Убрать сетку";
}
}

ну цвет меняется только когда я уберу и обратно покажу сетку, а как сделать так чтобы сразу??? smile 

PM MAIL   Вверх
Usper
Дата 27.5.2009, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



То есть поменять цвет сетки просто выбрав его в ColorBox? Воспользоваться обработчиком события OnChange ColorBox'а например.


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
vudu91
Дата 27.5.2009, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Ага, вот оно что, я использовал XMax и YMax для своих целей, чтобы вычислить в каких диапазонах изменяются значения по шкале оси. Если Вам надо вручную вводить эти самые диапазоны (как я понял по скриншотам, которые, кстати, смог посмотреть только шаманскими методами) то придётся вычислять значение Chart1->LeftAxis->PositionPercent (это для левой оси) например так: Chart1->LeftAxis->PositionPercent=fabs(Xmin)*100/(Xmax-Xmin), не забыв установить Chart1->LeftAxis->Maximum=Ymax; Chart1->LeftAxis->Minimum=Ymin. 

Usper, 
а не посоветуеш как сделать более точно, а то у меня оно  проходит не через (0;0) а на приближонно, например (0.3;0.5) и єта погрешность зависит от min и max значений??? 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

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

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

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

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


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

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


 




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


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

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