Приклад. Побудова кривої Без’є по опорних точках.
TPoint points[7];
points[0]=TPoint(0,0);
points[1]=TPoint(500,30);
points[2]=TPoint(0,40);
points[3]=TPoint(300,400);
points[4]=TPoint(200,200);
points[5]=TPoint(600,500);
points[6]=TPoint(0,550);
Canvas->PolyBezier(points,6);
Приклад. Вивести напис "C++ Builder" у середині зафарбованого еліпса. Передбачити у випадку зміни розмірів форми (подія OnResize) пропорційне до розмірів форми масштабування побудованого зображення.
void __fastcall TForm1::FormPaint(TObject *Sender)
{
int X,Y;
Canvas->Brush->Color= clYellow;
Canvas->Ellipse(0,0,ClientWidth,ClientHeight);
Canvas->Font->Size = Height/8;
X=(ClientWidth-Canvas->TextWidth("C++ Builder"))/2;
Y=(ClientHeight-Canvas->TextHeight("C"))/2;
Canvas->TextOut(X,Y,"C++ Builder");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{
// очистити форму
Form1->Canvas->Brush->Color=Form1->Color;
Form1->Canvas->FillRect(Rect(0,0,ClientWidth,ClientHeight));
// виклик методу FormPaint
FormPaint(Form1);
}
//---------------------------------------------------------------------------
Приклад. Побудувати графік функції y= на проміжку [0,25].
Текст модуля наведено нижче. Графік будується на канві форми.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <math.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
// Функція, графік якої потрібно побудувати
float f(float x)
{
return 2*sin(x)*exp(x/5);
}
const char * FN="2*Sin(x)*exp(x/5)";
//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
// будує графік функції
float x1,x2; // межі для аргумента функції
float y1,y2; // межі для значень функції
float x; // аргумент функції
float y; // значення функції в точці x
float dx; // приріст аргумента
int l,b; // левий нижній кут області побудови графіка
int w,h; // ширина і висота області побудови графіка
int mx,my; // масштаб по осях X і Y
int x0,y0; // точка - початок координат
// область побудови графіка
l=20; // X - координата лівого нижнього кута
b=ClientHeight-20; // Y - координата лівого нижнього кута
h=ClientHeight-40; // висота
w=ClientWidth-40; // ширина
x1=0; // нижня межа прожімку для аргумента
x2=25; // верхня межа прожімку для аргумента
dx=0.01; // крок для аргумента
// знаходження максимального і мінімального значення
// функції на відрізку [x1,x2]
y1=f(x1); // мінімум
y2=f(x1); // максимум
x=x1+dx;
do
{ y = f(x);
if (y < y1) y1=y;
if (y > y2) y2=y;
x=x+dx; }
while (x<=x2);
// знайдемо масштаб
my=h/abs(y2-y1); // масштаб по осі Y
mx=w/abs(x2-x1); // масштаб по осі X
// початок системи координат
x0=l;
y0=b-abs(floor(y1*my));
// осi
Canvas->Pen->Color=clGreen;
Canvas->MoveTo(l,b);Canvas->LineTo(l,b-h);
Canvas->MoveTo(x0,y0);Canvas->LineTo(x0+w,y0);
Canvas->TextOut(l+5,b-h,FloatToStrF(y2,ffFixed,6,2));
Canvas->TextOut(l+5,b,FloatToStrF(y1,ffFixed,6,2));
// побудова графіка
x=x1;
do
{ y=f(x);
Canvas->Pixels[x0+floor(x*mx)][y0-floor(y*my)]=clRed;
x=x+dx; }
while (x<=x2);
Canvas->Font->Color=clPurple;
Canvas->TextOut(l+40,y0+60,FN);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{
// очистити форму
Canvas->FillRect(Rect(0,0,ClientWidth,ClientHeight));
// побудувати графік
FormPaint(Form1);
}
//---------------------------------------------------------------------------