Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы / С++Builder / Laba3 / Task3 / Spline

.cpp
Скачиваний:
12
Добавлен:
17.04.2013
Размер:
2.06 Кб
Скачать
//---------------------------------------------------------------------------
#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;
}
Соседние файлы в папке Task3