Вывод графика из масива
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;
}
Цитата:
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;
}
Есть такой вопрос. В общем есть такая вещь
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;
}
В код не вникал (сильно много для меня значков :-)) но если ломанная то причина очевидна - мало точек. Значит либо нужно увеличить количество отсчетов, либо ... каким то хитрым алгоритмом "закруглить" линию сисусоиды. Первое явно проще.
Цитата:
Originally posted by Andreww
В код не вникал (сильно много для меня значков :-)) но если ломанная то причина очевидна - мало точек. Значит либо нужно увеличить количество отсчетов, либо ... каким то хитрым алгоритмом "закруглить" линию сисусоиды. Первое явно проще.
В код не вникал (сильно много для меня значков :-)) но если ломанная то причина очевидна - мало точек. Значит либо нужно увеличить количество отсчетов, либо ... каким то хитрым алгоритмом "закруглить" линию сисусоиды. Первое явно проще.
Абсолютно согдасен - ужно уменьщить шаг. А еще можна сделать график абсолютно гладким (с идеальным закруглением) - для этого воспользуйся сплайнами третьего порядка - правда добавится кода строк на 200:)
:о) это я уже выкладывал))) Согласен, чем меньше шаг, тем лучше) но на маленьком графике все равно ребристость никак не убрать :о)
А вы как хотели: надискретном экране изобразить закругления невозможно без определенных упрощений. Так же и синусоиду. Тем более мелкую. Выход такой: делай антиалиасинг. Т.е. сглаживание (все же, попроще, чем сплайны тертьего порядка). Идея следующая: рисуешь в буфер свою синусоиду скажем в пропорции, скажем, 4 к 1 (т.е. в буффере она у тебя должна быть в 4 раза больше, чем на экране). А потом использую бикубическую фильтрацию (не, ну можно и по проще, хотя бы трилинейную) уменьшаешь изображение и выводишь на экран (последние два пункта можно делать вместе). Только сам понимаешь, придется рисовать по пикселям. Никаких тебе LineTo и в омине не должно быть.