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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> QVariant или double, что выбрать: QVariant или double 
:(
    Опции темы
htzg
Дата 4.9.2011, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Здравствуйте,
пишу программу на Qt для редактирования 3х мерных массивов данных.
Представляю себе это так:
будет 2Д окно в котором будут изображены ячейки(примерно как в IconEditor). Будет цветовая шкала от мин значения до макс.
Мин будет синим цветом, макс красным...например.
Можно будет послойно просматривать 3Д массив и править его. Править кистью. Как в Point и т.п.
Данные для массива могут иметь тип:
-целые числа
-числа с запятой
-логического типа: 1 или 0
Экспортироваться должны в том виде что и импортировались.

Так вот как хранить этот 3д массив? В виде QVariant? В виде double (так как из этот тип можно перевести в любой другой). Что будет с памятью, скоростью работы? 

Массивы на практике будут иметь размеры ~100x100x100.
и их в памяти будет порядка 20-30.
Важна скорость. Правка будет выглядеть примерно так: кисти будет задаваться радиус(в ячейках) и множитель. Будет много мелких правок(много нажатий на кнопку мыши - несколько в секунду). Т.е. если нужно получить нужное значение не будет вычисляться нужный множитель, а просто будет задан заведомо меньший и применен необходимое кол-во раз что бы примерно получить необходимое значение. Если будет тупить - программу использовать не будут. 
Машины: i7 12Gb RAM.

И еще есть у кого что нибудь подобное? 
Поделитесь? Или подскажите где искать.
Я инженер   smile 
PM MAIL   Вверх
boostcoder
Дата 4.9.2011, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(htzg @  4.9.2011,  17:46 Найти цитируемый пост)
Как в Point

paint?

Цитата(htzg @  4.9.2011,  17:46 Найти цитируемый пост)
Данные для массива могут иметь тип:
-целые числа
-числа с запятой
-логического типа: 1 или 0

union.

Добавлено через 1 минуту и 36 секунд
Цитата(htzg @  4.9.2011,  17:46 Найти цитируемый пост)
Массивы на практике будут иметь размеры ~100x100x100.

размер массива константен?
PM WWW   Вверх
htzg
Дата 4.9.2011, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(boostcoder @  4.9.2011,  18:04 Найти цитируемый пост)
размер массива константен? 

да

Добавлено через 1 минуту и 8 секунд
Цитата(boostcoder @  4.9.2011,  18:04 Найти цитируемый пост)
paint?

да, Paint

Добавлено через 4 минуты и 1 секунду
Цитата(boostcoder @  4.9.2011,  18:04 Найти цитируемый пост)
union.

спасибо! 
PM MAIL   Вверх
htzg
Дата 4.9.2011, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



один момент
"The member-list of a union represents the kinds of data the union can contain. A union requires enough storage to hold the largest member in its member-list. For more information, refer to Union Declarations (C Language Reference)." Unions
Зачем использовать union если это память не экономит? 
Пусть тогда будет double. При экспорте будет перевод в нужный тип...

PM MAIL   Вверх
boostcoder
Дата 4.9.2011, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



нужно знать какие алгоритмы будут использоваться совместно с массивами и кто их будет реализовывать, для того чтоб оптимально принять решение, union или double. но одно стопроцентно - никакой QVariant или прочая run-time ерунда тебе не подходят. ибо производительность упадет в разы...

Это сообщение отредактировал(а) boostcoder - 4.9.2011, 22:30
PM WWW   Вверх
htzg
Дата 4.9.2011, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



вопрос по union
Код

union MyType
{
    int i;
    double d;
    bool b;
};

MyType v1,v2;

v1.d = 1.2345;
v2 = v1 // <- так можно
v2.d = v1.d // или только так?


PM MAIL   Вверх
boostcoder
Дата 4.9.2011, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



PM WWW   Вверх
htzg
Дата 5.9.2011, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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

Код

union MyType
{
   int i;
   double d;
   bool b;
};

class arr
{
   MyType vals[100][100][100];
   enum Type {I,D,B};  
   Type type;  
   void multiply(MyType mult)
   {
     if (type == arr::I) {
           for (int i=0; i<100; ++i)
              for (int j=0; j<100; ++j)
                 for (int k=0; k<100; ++k)
                    vals[i][j][k].i  *= mult.i;
      } else if (type == arr::D) {
           for (int i=0; i<100; ++i)
              for (int j=0; j<100; ++j)
                 for (int k=0; k<100; ++k)
                    vals[i][j][k].d *= mult.d;
      } else if (type == arr::B) {
           for (int i=0; i<100; ++i)
              for (int j=0; j<100; ++j)
                 for (int k=0; k<100; ++k)
                    vals[i][j][k].b *= mult.b;
      }
    }   
};


так? Более "элегантного"(легкого) способа нет?

PM MAIL   Вверх
mes
Дата 5.9.2011, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(htzg @  4.9.2011,  16:46 Найти цитируемый пост)
Данные для массива могут иметь тип:
-целые числа
-числа с запятой
-логического типа: 1 или 0

каждая ячейка может иметь собственный тип или однотипность распространяется на некоторую область/плоскость ?



--------------------
PM MAIL WWW   Вверх
htzg
Дата 5.9.2011, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(mes @ 5.9.2011,  21:18)
Цитата(htzg @  4.9.2011,  16:46 Найти цитируемый пост)
Данные для массива могут иметь тип:
-целые числа
-числа с запятой
-логического типа: 1 или 0

каждая ячейка может иметь собственный тип или однотипность распространяется на некоторую область/плоскость ?

однотипность распространяется на некоторую область/плоскость - т.е. на весь 3д массив.
PM MAIL   Вверх
boostcoder
Дата 5.9.2011, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(htzg @  5.9.2011,  21:53 Найти цитируемый пост)
на весь 3д массив

т.е. твой 3D массив, может состоять только из одного типа? я правильно понял?

Добавлено через 44 секунды
тип элементов массива, известен в момент компиляции? или он определяется/выбирается во время работы программы?
PM WWW   Вверх
htzg
Дата 5.9.2011, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(boostcoder @  5.9.2011,  21:57 Найти цитируемый пост)
т.е. твой 3D массив, может состоять только из одного типа? я правильно понял?

да


Цитата(boostcoder @  5.9.2011,  21:57 Найти цитируемый пост)
тип элементов массива, известен в момент компиляции? или он определяется/выбирается во время работы программы? 

он определяется/выбирается во время работы программы


как я уже писал может быть несколько массивов и у каждого может быть свой тип.
это будет выглядеть так: 
главное окно:
слева список массивов, справа - окно редактирования.
импортируешь массив или сразу несколько; он(и) появляется в списке слева;
выбираешь массив в списке; редактируешь; экспортируешь

Это сообщение отредактировал(а) htzg - 5.9.2011, 22:06
PM MAIL   Вверх
mes
Дата 5.9.2011, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



тогда три раздельных типа массива под каждый тип данных - судя по всему у них и набор функций будет немного разный..
и адаптер  для привязки к гуи..

Добавлено через 2 минуты и 15 секунд
если операции над массивом примитивные, естественно сам массив может быть элементарным, и тогда вся задача свеждется к реализации адаптера/контролера..  

Это сообщение отредактировал(а) mes - 5.9.2011, 23:06


--------------------
PM MAIL WWW   Вверх
boostcoder
Дата 5.9.2011, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



а обрабатывать массив лучше параллельно, в несколько потоков. тут самое место для OpenMP или параллельных алгоритмов GCC-STL ;)
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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