crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
> Фигуры Лиссажу, Вопрос по написанию
QMainWindow
  опции профиля:
сообщение 18.10.2010, 21:54
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 1.8.2010
Пользователь №: 1922

Спасибо сказали: 0 раз(а)




Репутация:   0  


Добрый день!
Вот подумываю написать по фану программу, генерирующая эти фигуры. Возникли 3 вопроса:
1. Какой класс лучше использовать? Здесь придется очень часто обновлять экран - 0-500ГЦ. Пейнтер, наверное, не подойдет.
2. С помощью чего обновлять экран. Можно отталкиваться от QTimer. Но рационально ли это?
3. Как сделать остаточный след на экране (как в осциллографе, даже если двигать точку медленно, то все равно будет заметна светимость следа)?

Заранее СПС.))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ufna
  опции профиля:
сообщение 18.10.2010, 21:58
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 362
Регистрация: 24.5.2008
Из: Курган/СПб
Пользователь №: 182

Спасибо сказали: 29 раз(а)




Репутация:   5  


1. обновления в Гцах - это уже для монитора вопрос, в мс сколько?

Если не QPainter - советую писать на ассемблере или уж лучше напрямую работать с видеокарточкой :) Ну или забить на Qt и юзать DirectX/OGL, шейдеры и т.п.

Вопрос - что это за фигуры в принципе?

2. обновлять экран - можно по таймеру, это рациоально. Можно - тупо апдейтить и апдейтить в конце каждой перерисовки.

3. двойная буферизация как возможный вариант. Хотя это к вопросу №1 больше, т.к. далее - дело техники
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QMainWindow
  опции профиля:
сообщение 18.10.2010, 22:28
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 1.8.2010
Пользователь №: 1922

Спасибо сказали: 0 раз(а)




Репутация:   0  


Гц - это я вспоминаю значения, стоявшие на осциллографе у нас, когда была практическая работа по данной теме. Т.е. в данном случае - герцы - значения на осциллографе.
Ну я не такой крутой кодер, чтобы уж прям с видеокартой напрямую работать))) Лучше средствами Qt. А OpenGL на Qt может подойти? Или для таких дел QPainter тоже может сгодиться. Я просто почему спрашиваю, потому вот сделаю через Пейнтер, а потом окажется, что можно было делать через другой класс, который подходит лучше.))
Вот ссылка: http://ru.wikipedia.org/wiki/Фигуры_Лиссажу. Тут написано лучше, чем скажу я.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ufna
  опции профиля:
сообщение 18.10.2010, 22:51
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 362
Регистрация: 24.5.2008
Из: Курган/СПб
Пользователь №: 182

Спасибо сказали: 29 раз(а)




Репутация:   5  


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

OpenGL и Qt дружат отлично, но - здесь те же системы отрисовки, графика то 2Д и динамическая.

Тут как бы - а "другой" - это какой класс? :) QPainter - по сути основа всей отрисовки в Qt. Если не оно, то уже только в видеокарту лезть :)

Вначале переведите герцы нужные Вам в фпс, просчитайте скорость обработки одного кадра чисто математически - а потом уже начинайте реализацию :) логика отрисовки не сильно зависит от выбранного АПИ в данном случае, имхо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 19.10.2010, 6:22
Сообщение #5


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


никаких жутких ухищрений не нужно, компутер успеет такую фигуру нарисовать и в динамике :)

параметрически кривая задана


единственное, что надо сделать - задать инерцию люминофора. То есть просто точку гонять по кривой недостаточно - глаз не обманется. Надо запоминать шлейф на 1/24 секунды назад и отрисовывать эту линию

тактировать можно таймером этак 40...200 мс

Сообщение отредактировал Алексей1153 - 19.10.2010, 6:23
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 19.10.2010, 8:50
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(QMainWindow @ 19.10.2010, 1:28) *
а потом окажется, что можно было делать через другой класс, который подходит лучше.))
а другого в Qt нету. QPainter - рисовальщик всех примитивов

Цитата(QMainWindow @ 19.10.2010, 0:54) *
2. С помощью чего обновлять экран. Можно отталкиваться от QTimer. Но рационально ли это?
Цитата(QMainWindow @ 19.10.2010, 0:54) *
3. Как сделать остаточный след на экране (как в осциллографе, даже если двигать точку медленно, то все равно будет заметна светимость следа)?
полностью имитировать работу осциллографа на компьютере не стоит.
Для начала просто рисуй, пусть накладываются. Если дальше захочешь развивать программу там и видно будет.

П.С. где-то у меня была программка на дельфи 4, которая именно фигуры Лисажу рисовала
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QMainWindow
  опции профиля:
сообщение 19.10.2010, 17:02
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 1.8.2010
Пользователь №: 1922

Спасибо сказали: 0 раз(а)




Репутация:   0  


А OpenGL? Или пейнтера с головой хватит?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 19.10.2010, 19:13
Сообщение #8


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


QMainWindow, ты сначала с QPainter сделай что-нибудь, а там увидим :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QMainWindow
  опции профиля:
сообщение 27.10.2010, 20:13
Сообщение #9


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 1.8.2010
Пользователь №: 1922

Спасибо сказали: 0 раз(а)




Репутация:   0  


Привет всем!
Короч только что написал прогу. Все хорошо получилось, делал через QPainter. Единственное, что осталось - это след на экране. Как правильно сделать - не знаю. На данный момент, чтобы изображение отображалось, в paintEvent записал цикл с N = 200. Но это все же не след.
Вот тут говорили про буфер. Никогда не работал, не знаю как это работает. Какие классы хоть смотреть? :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 27.10.2010, 20:18
Сообщение #10


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


QMainWindow, используй вектор

std::vector<QLine>(200) trace_buffer;

организуй кольцо - заведи два итератора- один на начало следа, второй на конец


отрисовав ломаную линию (кстати, по любасу метод есть, чтобы цепь QLine вывести разом) , делай сдвиг, выкидывая из начала несколько звеньев. А новые добавляй в конец. Приоритет делай для конца - если кольцо полностью забито, то выкидывай начальные и добавляй новые в конец

можно ещё поиграться с градиентным цветом очередных линий (QLine), будет совсем как люминофор ))

Сообщение отредактировал Алексей1153 - 29.10.2010, 8:58
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V   1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.12.2024, 14:54