| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > QVariant или double |
| Автор: htzg 4.9.2011, 17:46 |
| Здравствуйте, пишу программу на Qt для редактирования 3х мерных массивов данных. Представляю себе это так: будет 2Д окно в котором будут изображены ячейки(примерно как в IconEditor). Будет цветовая шкала от мин значения до макс. Мин будет синим цветом, макс красным...например. Можно будет послойно просматривать 3Д массив и править его. Править кистью. Как в Point и т.п. Данные для массива могут иметь тип: -целые числа -числа с запятой -логического типа: 1 или 0 Экспортироваться должны в том виде что и импортировались. Так вот как хранить этот 3д массив? В виде QVariant? В виде double (так как из этот тип можно перевести в любой другой). Что будет с памятью, скоростью работы? Массивы на практике будут иметь размеры ~100x100x100. и их в памяти будет порядка 20-30. Важна скорость. Правка будет выглядеть примерно так: кисти будет задаваться радиус(в ячейках) и множитель. Будет много мелких правок(много нажатий на кнопку мыши - несколько в секунду). Т.е. если нужно получить нужное значение не будет вычисляться нужный множитель, а просто будет задан заведомо меньший и применен необходимое кол-во раз что бы примерно получить необходимое значение. Если будет тупить - программу использовать не будут. Машины: i7 12Gb RAM. И еще есть у кого что нибудь подобное? Поделитесь? Или подскажите где искать. Я инженер |
| Автор: htzg 4.9.2011, 19:52 |
да Добавлено через 1 минуту и 8 секунд да, Paint Добавлено через 4 минуты и 1 секунду спасибо! |
| Автор: htzg 4.9.2011, 22:15 |
| один момент "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)." http://msdn.microsoft.com/en-us/library/5dxy4b7b%28VS.80%29.aspx Зачем использовать union если это память не экономит? Пусть тогда будет double. При экспорте будет перевод в нужный тип... |
| Автор: boostcoder 4.9.2011, 22:29 |
| нужно знать какие алгоритмы будут использоваться совместно с массивами и кто их будет реализовывать, для того чтоб оптимально принять решение, union или double. но одно стопроцентно - никакой QVariant или прочая run-time ерунда тебе не подходят. ибо производительность упадет в разы... |
| Автор: htzg 4.9.2011, 22:44 | ||
вопрос по union
|
| Автор: boostcoder 4.9.2011, 23:03 |
| http://liveworkspace.org/code/61740d91dee704ef6c8b6917441119ce |
| Автор: htzg 5.9.2011, 19:52 | ||
я правильно понимаю что теперь, если использовать union, чтобы совершать какие либо математические действия над элементами массива, для каждого массива мне нужно иметь переменную характеризующую тип данных этого массива?
так? Более "элегантного"(легкого) способа нет? |
| Автор: mes 5.9.2011, 21:18 | ||
каждая ячейка может иметь собственный тип или однотипность распространяется на некоторую область/плоскость ? |
| Автор: htzg 5.9.2011, 21:53 | ||||
однотипность распространяется на некоторую область/плоскость - т.е. на весь 3д массив. |
| Автор: boostcoder 5.9.2011, 21:57 |
т.е. твой 3D массив, может состоять только из одного типа? я правильно понял? Добавлено через 44 секунды тип элементов массива, известен в момент компиляции? или он определяется/выбирается во время работы программы? |
| Автор: htzg 5.9.2011, 22:05 | ||||
да
он определяется/выбирается во время работы программы как я уже писал может быть несколько массивов и у каждого может быть свой тип. это будет выглядеть так: главное окно: слева список массивов, справа - окно редактирования. импортируешь массив или сразу несколько; он(и) появляется в списке слева; выбираешь массив в списке; редактируешь; экспортируешь |
| Автор: mes 5.9.2011, 23:05 |
| тогда три раздельных типа массива под каждый тип данных - судя по всему у них и набор функций будет немного разный.. и адаптер для привязки к гуи.. Добавлено через 2 минуты и 15 секунд если операции над массивом примитивные, естественно сам массив может быть элементарным, и тогда вся задача свеждется к реализации адаптера/контролера.. |
| Автор: boostcoder 5.9.2011, 23:23 |
| а обрабатывать массив лучше параллельно, в несколько потоков. тут самое место для OpenMP или параллельных алгоритмов http://gcc.gnu.org/onlinedocs/libstdc++/manual/parallel_mode.html ;) |