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