Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабы / Тельминов / набор_1 / лабы.3(1,2,3) / Part3 / Unit2
.cpp//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
#include <math.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
void CSinusoid::Draw()
{
int i;
Img->Canvas->MoveTo(0,Img->Height-1-Amplitude);
for(i=1;i<=Period*1.5;i++)
{
Img->Canvas->LineTo(i,(Img->Height-1-Amplitude)+
Amplitude*sin(2*PI*(i)/Period));
}
Img->Canvas->LineTo(i,Img->Height-1-Amplitude);
}
void CSinusoid::DrawMarkers()
{
Img->Canvas->FillRect(Rect(Period/4*3-HalfMSize,
(Img->Height-1-2*Amplitude-HalfMSize),
Period/4*3+HalfMSize,
(Img->Height-1-2*Amplitude+HalfMSize)));
Img->Canvas->FillRect(Rect(Period*1.5-HalfMSize,
(Img->Height-1-Amplitude-HalfMSize),
Period*1.5+HalfMSize,
(Img->Height-1-Amplitude+HalfMSize)));
}
int CSinusoid::InMarker(int X, int Y)
{
if( (abs(X-Period/4*3) <= HalfMSize) &&
(Y <= Img->Height-1-2*Amplitude+HalfMSize) &&
(Y >= Img->Height-1-2*Amplitude-HalfMSize)
)
return 1;
if( (abs(X-Period*1.5) <= HalfMSize) &&
(Y <= Img->Height-1-Amplitude+HalfMSize) &&
(Y >= Img->Height-1-Amplitude-HalfMSize)
)
return 2;
return 0;
}
void CSinusoid::ReDraw()
{
Img->Canvas->Brush->Color = clWhite;
Img->Canvas->FillRect(Rect(0,0,Img->Width,Img->Height));
Img->Canvas->Pen->Color = clRed;
Img->Canvas->Brush->Color = clBlack;
Draw();
DrawMarkers();
}
void CSinusoid::SetAmplitude(double Amp)
{
Amplitude=Amp;
if(Amp*2+HalfMSize>=Img->Height)
Amplitude=(Img->Height-HalfMSize)/2;
if(Amp-HalfMSize<=0)
Amplitude=HalfMSize;
}
void CSinusoid::SetPeriod(double Per)
{
Period=Per;
if(Per*1.5+HalfMSize>=Img->Width)
Period=(Img->Width-HalfMSize)/1.5;
if(Per*1.5-HalfMSize*2 < 0)
Period=float(HalfMSize*2)/1.5;
}
CSinusoid::CSinusoid(TImage* _Img)
{
HalfMSize = 4;
Img = _Img;
SetAmplitude(10000);
SetPeriod(10000);
ReDraw();
}
Соседние файлы в папке Part3