Учись программированию на C++ Builder бесплатно!

Описание


Методы PolyBezier и PolyBezierTo сглаживают множество точек Points_Size, содержащихся в массиве Points, кусочной кривой третьего порядка. При этом функция PolyBezier точно отображает первую и последнюю точку, a PolyBezierTo - только последнюю. Число точек Points_Size для каждого метода должно быть строго определенным (хотя это, к сожалению, не указано в справке C++ Builder).

Для PolyBezier оно должно быть кратно 3 (т.е. i*3), а для PolyBezierTo - на единицу меньше числа, кратного 3 (т.е. i*3-1).

Если число точек не равно заданному, то функции просто ничего не рисуют.

Исходя из этого при произвольном числе точек N имеет смысл автоматически приводить число точек к требуемому, например, такими операторами:

PolyBezier(points, (N/3)*3);
PolyBezierTo(points, (N/3)*3-1);

В этих операторах число точек N за счет округления при целочисленном делении автоматически приводится к требуемому.

Классы


TCanvas

Прототип


void __fastcall PolyBezier(const Windows::TPoint * Points, const int Points_Size);
void __fastcall PolyBezierTo(const Windows::TPoint * Points, const int Points_Size);

Пример


Приведенный код строит аппроксимацию функции -sin(x) методами PolyBezier, PolyBezierTo и Polyline.

const N=10, Lx=500, Ly=100, T=10;
TPoint points[N];
for (int i = 0; i <= N; i++)
points[i] = Point((int)(i * Lx / (N-1)),(int)(sin((double)i * T / (N-1))*Ly) + Image1->ClientHeight / 2) ;
Image1->Canvas->Pen->Color = clBlack;
Image1->Canvas->Polyline(points, N-1);
Image1->Canvas->Pen->Color = clRed;
Image1->Canvas->PolyBezier(points, (N/3)*3);
Image1->Canvas->Pen->Color = clGreen;
Image1->Canvas->PolyBezierTo(points, (N/3)*3-1);

Для работы синуса подключаем математическую директиву в файл Unit1.h:

#include <math.h>

Скриншот


Пример - PolyBezier и PolyBezierTo

Polyline - черный.
PolyBezier - красный.
PolyBezierTo - зеленый.


Поиск по сайту