Russian Qt Forum
Июнь 16, 2024, 05:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Построение графиков  (Прочитано 14352 раз)
daimon
Гость
« : Март 29, 2010, 21:43 »

Имеет ли смысл сортировать вектор координат (математических) для построения графика?
Или тогда теряется смысл графика?
Записан
Karl-Philipp
Гость
« Ответ #1 : Март 29, 2010, 23:47 »

Имеет ли смысл сортировать вектор координат (математических) для построения графика?
Или тогда теряется смысл графика?
Если график только для отрисовки, то смысл его сортировать?
В принципе отсортировать можно, если не будет соединительных линий между точками :-)
Есть

struct tabl
{
double x,y;
}

///

QVector<tabl> table

QVector<tabl>::iterator it;


Как получить значения из итератора it?

Доступ к элементам структуры с помощью итератора:
(*it).x
Записан
daimon
Гость
« Ответ #2 : Март 29, 2010, 23:54 »

Как перебрать все стандартные цвета в Qt:: с помощью rand() % x?
всего цветов 18
Какой x?

Для цветов мне нужно только число типа int.

Как вызвать по числу типа int чёрный цвет?
QColor(Qt::black), а по числу как
« Последнее редактирование: Март 30, 2010, 00:08 от daimon » Записан
JayFOX
Гость
« Ответ #3 : Март 30, 2010, 00:12 »

Код:
QStringList QColor::colorNames ()   [static]
ну и
Код:
QStringList list = QColor::colorNames();
list.at(rand()%list.count());
Записан
daimon
Гость
« Ответ #4 : Март 30, 2010, 00:18 »

Код:
QStringList QColor::colorNames ()   [static]
ну и
Код:
QStringList list = QColor::colorNames();
list.at(rand()%list.count());
А как перевести число 7 в пространство имен Qt и загнать QColor(Qt::.......?
Записан
JayFOX
Гость
« Ответ #5 : Март 30, 2010, 00:23 »

А зачем Qt::..
list.at(7) вернет имя цвета
тогда QColor(list.at(7))
« Последнее редактирование: Март 30, 2010, 00:26 от JayFOX » Записан
daimon
Гость
« Ответ #6 : Март 30, 2010, 00:31 »

А зачем Qt::..
list.at(7) вернет имя цвета
тогда QColor(list.at(7))
Зачем использовать список-лишняя память.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #7 : Март 30, 2010, 00:31 »

>>Или тогда теряется смысл графика?
Смотря что в векторе, если номеру позиции в векторе соответсвует координата Х, а значению в этой позиции - координата Y.
То конечно ты испортишь график
Записан

Юра.
daimon
Гость
« Ответ #8 : Март 30, 2010, 00:36 »

>>Или тогда теряется смысл графика?
Смотря что в векторе, если номеру позиции в векторе соответсвует координата Х, а значению в этой позиции - координата Y.
То конечно ты испортишь график
Сортиррую я строками вектора по х
Записан
daimon
Гость
« Ответ #9 : Март 30, 2010, 00:39 »

graph_line.setColor(QColor(int(rand()%256),int(rand()%256),int(rand()%256))); а если так
Записан
daimon
Гость
« Ответ #10 : Март 30, 2010, 01:16 »

Как отобрать только 12-13 цветов (без оттенков)?
Записан
voronElf
Гость
« Ответ #11 : Март 30, 2010, 05:32 »

Видимо, инициализировать список цветов нужными(понравившимися) цветами и выбирать из него
Записан
daimon
Гость
« Ответ #12 : Март 30, 2010, 23:14 »

QColor(Qt::red) - красный цвет, значение 7, а как записать, чтобы отправлять в QColor число 7 и была иниционализация красным цветом.
Записан
ieroglif
Гость
« Ответ #13 : Март 31, 2010, 00:51 »

прочитайте любую книгу из серии "С++ за 21 день" или "С++ для чайников" - это вам, Даймон, будет 100крат полезнее, и на многие другие вопросы вы тоже получите ответы автоматически Подмигивающий
Записан
daimon
Гость
« Ответ #14 : Апрель 03, 2010, 14:16 »

есть

Код
C++ (Qt)
///////////////класс координаты (точки)
struct tabl
{
tabl& tabl::operator = (const tabl &Other)
{
// Присваивание - не константный результат!!!!!
this->x_tabl = Other.x_tabl;
this->y_tabl = Other.y_tabl;
this->x_widget = Other.x_widget;
this->y_widget = Other.y_widget;
return *this;
}
 
inline bool tabl::operator == (const tabl &Other) const
{
// Равенство, константный метод
return ((this->x_tabl == Other.x_tabl) && (this->y_tabl == Other.y_tabl )&& (this->x_widget==Other.x_widget) && (this->y_widget==Other.y_widget));
}
inline bool tabl::operator < (const tabl &Other) const
{
if(this->x_tabl == Other.x_tabl)
return (this->y_tabl <Other.y_tabl);
 
return (this->x_tabl < Other.x_tabl);
}
 
double x_tabl;
double y_tabl;
double x_widget;
double y_widget;
tabl(){x_tabl=0; y_tabl=0; x_widget=0; y_widget=0;}
 
tabl(double x_tabl_,double y_tabl_,double x_widget_=0,double y_widget_=0)
{
x_tabl = x_tabl_;
y_tabl = y_tabl_;
x_widget =x_widget_;
y_widget = y_widget_;
}
 
 
};
 
//////////////////////////////////////////класс одной кривой
class Data
{
public:
QVector<tabl>table;
 
 
double maxX_graph_one;
double minX_graph_one;
double minY_graph_one;
double maxY_graph_one;
int count_point_in_tabl;
 
Data()
{
 
}
Data(QVector<tabl> table_)
{
 
table=table_;
 
defaultSettings();
 
 
 
 
}
void set_vector_table(QVector<tabl> table_)
{
table = table_;
defaultTable();
}
void defaultTable()
{
maxY_graph_one=table[0].y_tabl;
minY_graph_one=table[0].y_tabl;
 
minX_graph_one = std::min_element(table.begin(),table.end())->x_tabl;
maxX_graph_one = std::max_element(table.begin(),table.end())->x_tabl;
 
for(int i=0;i<count_point_in_tabl;i++)
{
           if(maxY_graph_one <=(table[i].y_tabl)) maxY_graph_one=(table[i].y_tabl);
if(minY_graph_one >= (table.at(i).y_tabl)) minY_graph_one = (table.at(i).y_tabl);
}
}
};
 
//////////////класс координатной плоскости, где накладываются кривые
class SettingsGraph
{
public:
 
double stepX;
double stepY;
double minX_graph_all;
double minY_graph_all;
double maxX_graph_all;
double maxY_graph_all;
 
QVector<Data> curves;
 
public:
SettingsGraph()
{
 
}
SettingsGraph(QVector<Data> curves_)
{
if(curves_!=curves)
curves = curves_;
 
 
 
}
void add_curves_one(Data graph_)
{
curves.push_back(graph_);
calculate_Min_Max();
 
}
void delete_curves_one(double number_)
{
curves.remove(number_);
calculate_Min_Max();
 
}
 
void calculate_Min_Max()
{
int countGraph=curves.size();
minX_graph_all=0;
maxX_graph_all=0;
minY_graph_all=0;
maxY_graph_all=0;
 
for(int i=0;i<countGraph;i++)
{
if(maxY_graph_all<=(curves[i].maxY_graph_one)&&curves[i].visible_graph_one) maxY_graph_all=(curves[i].maxY_graph_one);
 
if(minY_graph_all>=(curves[i].minY_graph_one)&&curves[i].visible_graph_one) minY_graph_all=(curves[i].minY_graph_one);
 
if(maxX_graph_all<=(curves[i].maxX_graph_one)&&curves[i].visible_graph_one) maxX_graph_all=(curves[i].maxX_graph_one);
 
if(minX_graph_all>=(curves[i].minX_graph_one)&&curves[i].visible_graph_one) minX_graph_all=(curves[i].minX_graph_one);
 
}
 
 
if(minX_graph_all == maxX_graph_all&& minY_graph_all == maxY_graph_all)
{
defaultAces();
return ;
}
 
}
//////////////////////////////////////////////////////////////////////////////
Вопрос

при вызове add добавляются кривая, graph-объект класса SettingsGraph

Код
C++ (Qt)
void Plotter::add(double x,double y)
{
Data data_;
QVector<tabl> tabl_;
 
tabl_.push_back(tabl(x,y));
data_.set_vector_table(tabl_);
graph.add_curves_one(data_);
 
}

Проблема- при удалении крывой из вектора curves класса SettingsGraph происходит прикол
например, есть 2 точки (-1000,2) (3,100)

вызову 2 раза подряд add(-1000,2) add(3,100)
в итоге в curves будет 2 элемента

-      curves   [2]
-      
  •    
      
+      table   [1]({x_tabl=-1000.0000000000000 y_tabl=2.0000000000000000 x_widget=0.00000000000000000 ...})   QVector<tabl>
      maxX_graph_one   -1000.0000000000000   double
      minX_graph_one   -1000.0000000000000   double
      minY_graph_one   2.0000000000000000   double
      maxY_graph_one   2.0000000000000000   double
      
-      [1]   
      
+      table   [1]({x_tabl=3.0000000000000000 y_tabl=100.00000000000000 x_widget=0.00000000000000000 ...})   QVector<tabl>
      maxX_graph_one   3.0000000000000000   double
      minX_graph_one   3.0000000000000000   double
      minY_graph_one   100.00000000000000   double
      maxY_graph_one   100.00000000000000   double
      
////////////////////////////////////////////

вызвав функцию graph.delete_curves_one(0);
получаю

-      curves   [1]
-      
  •    
+      table   [1]({x_tabl=3.0000000000000000 y_tabl=100.00000000000000 x_widget=0.00000000000000000 ...})   QVector<tabl>
      maxX_graph_one   -1000.0000000000000   double
      minX_graph_one   -1000.0000000000000   double
      minY_graph_one   2.0000000000000000   double
      maxY_graph_one   2.0000000000000000   double


Как решить прикол с вектором curves - удаление элементов происходит неправильно??


« Последнее редактирование: Апрель 06, 2010, 21:09 от daimon » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.221 секунд. Запросов: 22.