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

Лабы / Тельминов / набор_1 / LAB4 / 4 / V2 / UnitComplex

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

#include <vcl.h>
#pragma hdrstop

#include "UnitComplex.h"


//---------------------------------------------------------------------------

#pragma package(smart_init)


CComplex::CComplex(TImage* _Img,int _x,int _y,double _rho,double _phi)
{
	Img=_Img;x=_x;y=_y;rho=_rho;phi=_phi;_Marked = false;
  Draw();
}

CComplex::CComplex(int _x,int _y,TImage* _Img,double _rx,double _ry)
{
	Img=_Img;x=_x;y=_y;rho=sqrt(_rx*_rx+_ry*_ry);phi=atan2l(_ry,_rx);_Marked = false;
  Draw();
}

CComplex::~CComplex()
{
  Img->Canvas->FillRect(TRect(x-1,y-1,x+w,y+3+h));
/*
  Img->Canvas->Brush->Color = clRed;
  Img->Canvas->Ellipse(x+w,y+h-5,x+w+5,y+h);
*/
}


void CComplex::Draw()
{

	AnsiString Str = FloatToStr(rho)+"*exp(i*"+FloatToStr(phi)+")";
  Img->Canvas->Pen->Color = clWhite;
  Img->Canvas->Rectangle(x-1,y-1,x+w,y+3+h);
  Img->Canvas->Pen->Color = clBlack;
  if(!_Marked)
		Img->Canvas->Pen->Color = clWhite;
  Img->Canvas->Brush->Color = clWhite;
  Img->Canvas->Rectangle(x-1,y-1,x+w,y+3+h);
  Img->Canvas->Pen->Color = clBlack;
	Img->Canvas->TextOutA(x,y,Str);
	w = Str.Length()*6;
  h = 11;
}

long double CComplex::Angle(CComplex& z)
{
  long double temp = (z.phi - phi)*(1-2*(z.phi<phi));
  return temp;
//  return (temp - (int((temp/(2*pi))))*2*pi);
}


CComplex& CComplex::operator=(CComplex z)
{
  rho = z.rho;
  phi = z.phi;
  Draw();
  return *this;
}

CComplex CComplex::operator+(CComplex& z)
{
	CComplex temp(z);
  long double rx,ry;
  rx = z.rho*cos(z.phi)+rho*cos(phi);
  ry = z.rho*sin(z.phi)+rho*sin(phi);
  temp.rho = sqrt(rx*rx+ry*ry);
  temp.phi= atan2l(ry,rx);
	return temp;
}

CComplex CComplex::operator-(CComplex& z)
{
	CComplex temp(z);
  long double rx,ry;
  rx = -z.rho*cos(z.phi)+rho*cos(phi);
  ry = -z.rho*sin(z.phi)+rho*sin(phi);
  temp.rho = sqrt(rx*rx+ry*ry);
  temp.phi= atan2l(ry,rx);
	return temp;
}

CComplex CComplex::operator*(CComplex& z)
{
	CComplex temp(z);
  temp.rho = rho*z.rho;
  temp.phi= phi+z.phi;
	return temp;
}

CComplex CComplex::operator/(CComplex& z)
{
	CComplex temp(z);
  temp.rho = rho/z.rho;
  temp.phi= phi-z.phi;
	return temp;
}

ostream& operator<<(ostream& os, const CComplex& z)
{
  os<<z.rho << endl << z.phi;
  return os;
}
istream& operator>>(istream& is,       CComplex& z)
{
  is >> z.rho >> z.phi;
  return is;
}











Соседние файлы в папке V2