crossplatform.ru

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

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


Участник
**

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

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




Репутация:   0  


Сделал через вектор на 200 элементов - тормознуто! При одной и той же частоте W цикл бегает по экрану много быстрее чем вектор.((
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 27.10.2010, 22:20
Сообщение #12


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


Цитата(QMainWindow @ 27.10.2010, 23:14) *
Сделал через вектор на 200 элементов - тормознуто!

код покажи?
как сделал?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QMainWindow
  опции профиля:
сообщение 27.10.2010, 22:32
Сообщение #13


Участник
**

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

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




Репутация:   0  


MainWindow::MainWindow()
{...
for(i=0; i<200; i++)
    {
        TraceBufferX.push_front(0);
        TraceBufferY.push_front(0);
    }
...
}

void MainWindow::Start()
{
    connect(timer, SIGNAL(timeout()), this, SLOT(NewFrame()));
    timer->start(10);
}

void MainWindow::NewFrame()
{
    TraceBufferX.pop_back();
    TraceBufferY.pop_back();
    TraceBufferX.push_front(R1*cos(w1*t+f1));
    TraceBufferY.push_front(R2*sin(w2*t+f2));
    t=t+dt;
    update();
}

void MainWindow::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.fillRect(2,2,506,506,QColor("#67b56c"));
    painter.setMatrix(QMatrix(1,0,0,-1,255,255));
    painter.setRenderHint(QPainter::Antialiasing, true);
    painter.setPen(QPen(QColor(255,0,0), 3, Qt::SolidLine, Qt::RoundCap));
    for(i=0; i<int(exp(w0/4.5)); i++)
    {
        painter.drawPoint(R1*cos(w1*(t-0.1*i)+f1), R2*sin(w2*(t-0.1*i)+f2)); //-- цикл
        //painter.drawLine(TraceBufferX.value(i), TraceBufferY.value(i), TraceBufferX.value(i-1), TraceBufferY.value(i-1)); //--либо линией рисовать
        //painter.drawPoint(TraceBufferX.value(i), TraceBufferY.value(i)); //--либо точками.
    }

}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 27.10.2010, 22:41
Сообщение #14


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


Цитата(QMainWindow @ 27.10.2010, 23:14) *
При одной и той же частоте W цикл бегает по экрану много быстрее чем вектор

этого в коде не увидел.
где вектор.?
подпиши все переменные.

Цитата(QMainWindow @ 27.10.2010, 23:32) *
for(i=0; i<200; i++)
{
TraceBufferX.push_front(0);
TraceBufferY.push_front(0);
}

вот это вообще странная запись
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QMainWindow
  опции профиля:
сообщение 27.10.2010, 22:49
Сообщение #15


Участник
**

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

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




Репутация:   0  


Сделал, чтобы не писать оператора if, когда нужно удалять последний элемент, след же не бесконечный. Буфера - координаты точек следа по x и y. t - время.

могу прогу скинуть, код короткий
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 28.10.2010, 0:17
Сообщение #16


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

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

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




Репутация:   34  


QMainWindow, я ж предложил кольцо сделать. Размер вектора не меняется при этом. Это будет просто аналог статического массива на время жизни экземпляра вектора

а тормоза вот тут
    for(i=0; i<int(exp(w0/4.5)); i++)
    {
        painter.drawPoint(R1*cos(w1*(t-0.1*i)+f1), R2*sin(w2*(t-0.1*i)+f2)); //-- цикл
    }


вот, чем надо выводить полилинию из вектора-кольца :)

void QPainter::drawLines ( const QLine * lines, int lineCount )

Цитата(kwisp @ 28.10.2010, 1:41) *
могу прогу скинуть, код короткий

скинь. Только в 3 ночи возиться лично я не буду - я скоро спать ))

Сообщение отредактировал Алексей1153 - 29.10.2010, 8:35
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QMainWindow
  опции профиля:
сообщение 28.10.2010, 8:28
Сообщение #17


Участник
**

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

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




Репутация:   0  


Вот: http://ifolder.ru/19986495
Код простой, подписывать ничего не стал, т.к. особо и нечего.))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 28.10.2010, 8:37
Сообщение #18


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

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

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




Репутация:   34  


QMainWindow, не открывается ссылка. Сделай проще - удали папки release и debug, да архивчик тут подвесь
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 28.10.2010, 9:35
Сообщение #19


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

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

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




Репутация:   34  


QMainWindow, я скачал таки. Ищу драчовый напильник, доводить до ума )))

вообще то, плоттеры обычно делают в новом классе, так ГОРАЗДО УДОБНЕЕ. Но это переделывать я не буду - сам уж сделаешь

Сообщение отредактировал Алексей1153 - 28.10.2010, 9:37
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 28.10.2010, 11:28
Сообщение #20


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

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

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




Репутация:   34  


вот, что у меня вышло. Правда, кольцевой буфер содержит сейчас QPoint, но нпеределать в QLine не сложно - когда кладёшь очередную точку добавляй линию. Это сделай сам, а мне щас работать надо ))


приращение времени я в регулируемое окошко не выводил, тоже сам делай

m_t+=3;//dt;

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 1.12.2024, 2:31