В предыдущей заметке я писала о построении графика косинуса (cos). На сей раз желаю поведать о построении графика другой математической функции – синус (sin).
В серию о построении графиков в C++ Builder уже вошли такие посты:
- Построение косинусов (cos);
- Построение синусов (sin);
- Построение тангенсов (tg);
- Построение котангенсов (ctg).
Разлиновку канвы (под этим действием я понимаю добавление линий на компонент Image
) я разбирала в предыдущей статье (ссылка выше).
В этой разберу лишь масштабирование по оси Y (масштабирование по оси X также разобрано в предыдущей статье – иксы то у нас известны на начальном этапе построения графика, а игреки еще нужно посчитать).
В общем, поехали!
Строить будем функцию вида a*sin(X)+k
. Естественно, a
может быть равно 1 (т.е. фактически не влиять на результат), а k
– 0.
// делаем компонент Image видимым
Image1->Visible=true;
// циклически рассчитываем максимальное и минимальное
// значения Y
for (X=Xmin;X<=Xmax;X+=dX)
{
Y=a*sin(X)+k;
if(YmaxY) Ymin=Y;
}
// рассчитываем масштаб по оси Y
MasY=(LY-40)/(Ymax-Ymin);
// выводим «промасштабированные» значения возле оси Y
// для обозначения уже нарисованных дополнительных линий
float B[11];
for (i=0;i<=10;i++)
{
B[i]=50+LY/11*i;
AnsiString S = FloatToStrF(Ymax-((Ymax-Ymin)/10)*i,ffFixed,5,2);
Image1->Canvas->TextOutA(20,B[i]-15,S);
}
//помещаем курсора (карандаш) в нужную точку на
// объекте Image
Image1->Canvas->MoveTo(50,LY-(Ymin*(-1)+a*sin(Xmin))*MasY);
// рисуем график
for (X=Xmin;X<=Xmax;X+=dX)
{
Y=a*sin(X);
PY=LY-(Ymin*(-1)+Y)*MasY;
PX=X*MasX+50;
Image1->Canvas->LineTo(PX-Xmin*MasX,PY);
}
Вот и все. На рисунке график функции синус (sin) построенный с такими исходными данными:
Xmin = 0;
Xmax=10;
dX=0.02;
a=1;
k=0;
И вот что получилось:
Надеюсь, у вас все получится.
Толковая статья , очень помогла в работе с компонентой Image.
Огромный респект автору и создателю сайта.
Заходите еще )))
у меня не работает сей обравзец
Что именно не работает? Какую ошибку выдает? Чем компилите?