Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабы / С++Builder / Laba3 / Task3 / Spline
.cpp//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Spline.h"
#include <math.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
CPoint::CPoint(TCanvas* _Cnv, int X, int Y)
{
x=X;
y=Y;
Cnv=_Cnv;
MoveTo(x,y);
}
void CPoint::MoveTo(int X, int Y)
{
//Стираем старое положение
Cnv->Pen->Color = clWhite;
Cnv->Brush->Color = clWhite;
Cnv->Ellipse(x-10, y-10, x+10, y+10);
//устанавливаем новое положение
x=X;
y=Y;
//рисуем в новом положении
Cnv->Pen->Color = clBlue;
Cnv->Brush->Color = clBlue;
Cnv->Ellipse(x-10, y-10, x+10, y+10);
Cnv->Pen->Color = clWhite;
Cnv->Brush->Color = clWhite;
Cnv->Ellipse(x-2-3, y-2-3, x+2-3, y+2-3);
}
CPoint::operator TPoint ()
{
TPoint pp;
pp.x=x;
pp.y=y;
return pp;
}
void BSpline::Draw(TPoint p0,TPoint p1,TPoint p2)
{
Cnv->Pen->Color = clWhite;
Cnv->Brush->Color = clWhite;
double t=0;
x1=(0.5-t+0.5*t*t)*P0.x+(0.5+t-t*t)*P1.x+0.5*t*t*P2.x;
y1=(0.5-t+0.5*t*t)*P0.y+(0.5+t-t*t)*P1.y+0.5*t*t*P2.y;
for (t=0;t<=1;t+=0.1)
{
x2=(0.5-t+0.5*t*t)*P0.x+(0.5+t-t*t)*P1.x+0.5*t*t*P2.x;
y2=(0.5-t+0.5*t*t)*P0.y+(0.5+t-t*t)*P1.y+0.5*t*t*P2.y;
Cnv->Pen->Width=3;
Cnv->MoveTo(x1,y1);
Cnv->LineTo(x2,y2);
Cnv->Pen->Width=1;
x1=x2;
y1=y2;
}
P0=p0;P1=p1;P2=p2;
t=0;
x1=(0.5-t+0.5*t*t)*P0.x+(0.5+t-t*t)*P1.x+0.5*t*t*P2.x;
y1=(0.5-t+0.5*t*t)*P0.y+(0.5+t-t*t)*P1.y+0.5*t*t*P2.y;
for (t=0;t<=1;t+=0.1)
{
x2=(0.5-t+0.5*t*t)*P0.x+(0.5+t-t*t)*P1.x+0.5*t*t*P2.x;
y2=(0.5-t+0.5*t*t)*P0.y+(0.5+t-t*t)*P1.y+0.5*t*t*P2.y;
Cnv->Pen->Width=3;
Cnv->Pen->Color = clRed;
Cnv->Brush->Color = clRed;
Cnv->MoveTo(x1,y1);
Cnv->LineTo(x2,y2);
Cnv->Pen->Width=1;
x1=x2;
y1=y2;
}
}
BSpline::BSpline(TCanvas* _Cnv)
{
Cnv=_Cnv;
}