В предыдущей заметке я писала о построении графика косинуса (cos). На сей раз желаю поведать о построении графика другой математической функции – синус (sin).
В серию о построении графиков в C++ Builder уже вошли такие посты:
- Построение косинусов (cos);
- Построение синусов (sin);
- Построение тангенсов (tg);
- Построение котангенсов (ctg).
Разлиновку канвы (под этим действием я понимаю добавление линий на компонент Image
) я разбирала в предыдущей статье (ссылка выше).
В этой разберу лишь масштабирование по оси Y (масштабирование по оси X также разобрано в предыдущей статье – иксы то у нас известны на начальном этапе построения графика, а игреки еще нужно посчитать).
В общем, поехали!
Строить будем функцию вида a*sin(X)+k
. Естественно, a
может быть равно 1 (т.е. фактически не влиять на результат), а k
– 0.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | // делаем компонент Image видимым Image1->Visible=true; // циклически рассчитываем максимальное и минимальное // значения Y for (X=Xmin;X<=Xmax;X+=dX) { Y=a*sin(X)+k; if(Ymax<Y) Ymax=Y; if(Ymin>Y) 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) построенный с такими исходными данными:
1 2 3 4 5 | Xmin = 0; Xmax=10; dX=0.02; a=1; k=0; |
И вот что получилось:

Надеюсь, у вас все получится.
Толковая статья , очень помогла в работе с компонентой Image.
Огромный респект автору и создателю сайта.
Заходите еще )))
у меня не работает сей обравзец
Что именно не работает? Какую ошибку выдает? Чем компилите?