MTTensor.cpp
Go to the documentation of this file.00001 #include "MTTensor.h"
00002
00003 namespace gplib
00004 {
00005 MTTensor::MTTensor() :
00006 Zxx(0), Zxy(0), Zyx(0), Zyy(0), dZxx(0), dZxy(0), dZyx(0), dZyy(0),
00007 frequency(0), rotangle(0), Rx(0), Ry(0), Nu(0)
00008 {
00009 }
00010
00011 MTTensor::MTTensor(const std::complex<double> &xx, const std::complex<
00012 double> &xy, const std::complex<double> &yx,
00013 const std::complex<double> &yy, const double freq, const double angle):
00014 Zxx(xx), Zxy(xy), Zyx(yx), Zyy(yy), dZxx(0), dZxy(0), dZyx(0), dZyy(0),
00015 frequency(freq), rotangle(angle), Rx(0), Ry(0), Nu(0)
00016 {
00017 }
00018
00019 MTTensor& MTTensor::operator=(const MTTensor& source)
00020 {
00021 if (this == &source)
00022 return *this;
00023 Zxx = source.Zxx;
00024 Zxy = source.Zxy;
00025 Zyx = source.Zyx;
00026 Zyy = source.Zyy;
00027 dZxx = source.dZxx;
00028 dZxy = source.dZxy;
00029 dZyx = source.dZyx;
00030 dZyy = source.dZyy;
00031 frequency = source.frequency;
00032 rotangle = source.rotangle;
00033 Rx = source.Rx;
00034 Ry = source.Ry;
00035 Nu = source.Nu;
00036 return *this;
00037 }
00038 MTTensor::~MTTensor()
00039 {
00040 }
00041
00042 void MTTensor::Rotate(double angle)
00043 {
00044 dcomp newxx, newxy, newyx, newyy;
00045 const double cangle = cos(angle);
00046 const double sangle = sin(angle);
00047 newxx = Zxx * cangle * cangle + (Zxy + Zyx) * sangle * cangle + Zyy
00048 * sangle * sangle;
00049 newxy = Zxy * cangle * cangle - (Zxx - Zyy) * sangle * cangle - Zyx
00050 * sangle * sangle;
00051 newyx = Zyx * cangle * cangle - (Zxx - Zyy) * sangle * cangle - Zxy
00052 * sangle * sangle;
00053 newyy = Zyy * cangle * cangle - (Zxy + Zyx) * sangle * cangle + Zxx
00054 * sangle * sangle;
00055 Zxx = newxx;
00056 Zxy = newxy;
00057 Zyx = newyx;
00058 Zyy = newyy;
00059 rotangle += angle;
00060 }
00061 }