RoundRect(X1,Y1,X2,Y2) — будує прямокутник з округленими кутами

 

Приклад. Побудова кривої Без’є по опорних точках.

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);

}

//---------------------------------------------------------------------------