Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вывод графика из масива

12K
07 декабря 2005 года
nirv
5 / / 23.10.2005
Есть такой вопрос. В общем есть такая вещь
for (k=0;k<=kd*d;k=k+d)
{
mas[k]=sin(2*pi*n*k+fn);
}
после этого вывожу эту синусойду на экран, значения по у беру из масива. А на экране ресуется какая то ломанная синусойда
double xbuf;
double ybuf1,xbuf1;
double ybuf;
int n=0;
for (xbuf=0;xbuf<reck.Width();xbuf++)
{
ybuf=buf[n]+70;
n++;
//ybuf=0.5*sin((xbuf+30)*(20+xbuf/40)*pi/180)*100+50;//+ sin((xbuf+12)*47*pi/180)*10+55;
dc4.MoveTo(xbuf1,ybuf1);
dc4.LineTo(xbuf,ybuf);
ybuf1=ybuf;xbuf1=xbuf;
}
1.8K
07 декабря 2005 года
Andreww
81 / / 02.01.2004
Цитата:
Originally posted by nirv
Есть такой вопрос. В общем есть такая вещь
for (k=0;k<=kd*d;k=k+d)
{
mas[k]=sin(2*pi*n*k+fn);
}
после этого вывожу эту синусойду на экран, значения по у беру из масива. А на экране ресуется какая то ломанная синусойда
double xbuf;
double ybuf1,xbuf1;
double ybuf;
int n=0;
for (xbuf=0;xbuf<reck.Width();xbuf++)
{
ybuf=buf[n]+70;
n++;
//ybuf=0.5*sin((xbuf+30)*(20+xbuf/40)*pi/180)*100+50;//+ sin((xbuf+12)*47*pi/180)*10+55;
dc4.MoveTo(xbuf1,ybuf1);
dc4.LineTo(xbuf,ybuf);
ybuf1=ybuf;xbuf1=xbuf;
}



В код не вникал (сильно много для меня значков :-)) но если ломанная то причина очевидна - мало точек. Значит либо нужно увеличить количество отсчетов, либо ... каким то хитрым алгоритмом "закруглить" линию сисусоиды. Первое явно проще.

2.0K
18 декабря 2005 года
integral
86 / / 12.11.2005
Цитата:
Originally posted by Andreww
В код не вникал (сильно много для меня значков :-)) но если ломанная то причина очевидна - мало точек. Значит либо нужно увеличить количество отсчетов, либо ... каким то хитрым алгоритмом "закруглить" линию сисусоиды. Первое явно проще.


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

354
17 июня 2006 года
ШпиЁн
468 / / 19.02.2006
:о) это я уже выкладывал))) Согласен, чем меньше шаг, тем лучше) но на маленьком графике все равно ребристость никак не убрать :о)
12K
19 июня 2006 года
leeb
32 / / 01.02.2006
А вы как хотели: надискретном экране изобразить закругления невозможно без определенных упрощений. Так же и синусоиду. Тем более мелкую. Выход такой: делай антиалиасинг. Т.е. сглаживание (все же, попроще, чем сплайны тертьего порядка). Идея следующая: рисуешь в буфер свою синусоиду скажем в пропорции, скажем, 4 к 1 (т.е. в буффере она у тебя должна быть в 4 раза больше, чем на экране). А потом использую бикубическую фильтрацию (не, ну можно и по проще, хотя бы трилинейную) уменьшаешь изображение и выводишь на экран (последние два пункта можно делать вместе). Только сам понимаешь, придется рисовать по пикселям. Никаких тебе LineTo и в омине не должно быть.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог