Russian Belarusian English German Japanese Ukrainian

Rashka.studio - игры и приложения для Android! Заходи, ждём тебя =)

PolyBezier и PolyBezierTo

CuBook05

Описание

Методы 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 - зеленый.
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

Добавить комментарий


Защитный код Обновить