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

ООП / ООП / 3-1 / Unit2

.cpp
Скачиваний:
8
Добавлен:
18.02.2017
Размер:
2.21 Кб
Скачать
// ---------------------------------------------------------------------------

#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();
}
Соседние файлы в папке 3-1
  • #
    18.02.201711.01 Mб8Project2.tds
  • #
    18.02.20171.74 Кб8Unit1.cpp
  • #
    18.02.2017728 б8Unit1.dfm
  • #
    18.02.20171.23 Кб8Unit1.h
  • #
    18.02.201744.93 Кб8Unit1.obj
  • #
    18.02.20172.21 Кб8Unit2.cpp
  • #
    18.02.2017621 б9Unit2.h
  • #
    18.02.201719.83 Кб9Unit2.obj