Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
41
Добавлен:
16.04.2013
Размер:
2.21 Кб
Скачать
//---------------------------------------------------------------------------

#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
  • #
    16.04.20131.22 Кб41Unit1.h
  • #
    16.04.201344.93 Кб41Unit1.obj
  • #
    16.04.20131.7 Кб41Unit1.~cpp
  • #
    16.04.2013698 б41Unit1.~dfm
  • #
    16.04.20131.22 Кб41Unit1.~h
  • #
    16.04.20132.21 Кб41Unit2.cpp
  • #
    16.04.2013559 б41Unit2.h
  • #
    16.04.201319.83 Кб41Unit2.obj
  • #
    16.04.20132.28 Кб41Unit2.~cpp
  • #
    16.04.2013559 б41Unit2.~h