📄 ana2_32view.cpp
字号:
// Ana2_32View.cpp : implementation file
//
#include "stdafx.h"
#include "wgl_32.h"
#include "Ana2_32View.h"
#include "math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
const COLORREF ARGB = RGB(255,255,0);
const COLORREF BRGB = RGB(0, 255,0);
const COLORREF CRGB = RGB(255,0, 0);
#define PI 3.1415926
/////////////////////////////////////////////////////////////////////////////
// CAna2_32View
IMPLEMENT_DYNCREATE(CAna2_32View, CAna_32View)
CAna2_32View::CAna2_32View()
{WyyFactor = 0;}
CAna2_32View::~CAna2_32View()
{}
BEGIN_MESSAGE_MAP(CAna2_32View, CAna_32View)
//{{AFX_MSG_MAP(CAna2_32View)
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_RBUTTONDOWN()
ON_WM_RBUTTONUP()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAna2_32View drawing
void CAna2_32View::OnDraw(CDC* pDC)
{
CWgl_32Doc* pDoc = GetDocument();
if(pDoc->AnaError)
{ pDC->TextOut(100, 80, "无法正确取得故障线路的数据!"); return; }
if(pDoc->m_FaultLineNo == -1)
{ pDC->TextOut(100,100, "无故障线路!"); return; }
FFT();
CPen Pen[2][3], *OldPen;
//CBrush Brush[3], *OldBrush;
//LOGBRUSH lb;
CRect rect;
GetClientRect( &rect );
WORD CurveHeigh = m_HalfCurveHeigh*2;
int xl = rect.left+10;
int xr = rect.right;
int yt = rect.top+10;
int yb = rect.bottom;
int i;
Pen[0][0].CreatePen(PS_SOLID, 1, ARGB);
Pen[0][1].CreatePen(PS_SOLID, 1, BRGB);
Pen[0][2].CreatePen(PS_SOLID, 1, CRGB);
Pen[1][0].CreatePen(PS_SOLID, 1, ARGB);
Pen[1][1].CreatePen(PS_SOLID, 1, BRGB);
Pen[1][2].CreatePen(PS_SOLID, 1, CRGB);
/* lb.lbStyle = BS_SOLID;
lb.lbColor = ARGB;
Brush[0].CreateBrushIndirect(&lb);
lb.lbStyle = BS_SOLID;
lb.lbColor = BRGB;
Brush[1].CreateBrushIndirect(&lb);
lb.lbStyle = BS_SOLID;
lb.lbColor = CRGB;
Brush[2].CreateBrushIndirect(&lb);*/
as = -0.5; ax = sqrt(3)/2.;
bs = -0.5; bx = -sqrt(3)/2.;
///////////////////// UUUUUU ////////////////////////
Uas = A[0][1] + A[1][1] + A[2][1]; //ua实部
Uax = B[0][1] + B[1][1] + B[2][1]; //ua虚部
Ua = sqrt(Uas*Uas + Uax*Uax)/3.0;
if(Uas<0)Ualpha[0] = 180 + atan(Uax/Uas)*180/PI;
else Ualpha[0] = atan(Uax/Uas)*180/PI;
Ubs = A[0][1] + (as*A[1][1] -ax*B[1][1]) + (bs*A[2][1] - bx*B[2][1]); //ub实部
Ubx = B[0][1] + (as*B[1][1] +ax*A[1][1]) + (bs*B[2][1] + bx*A[2][1]); //ub虚部
Ub = sqrt(Ubs*Ubs + Ubx*Ubx)/3.0;
if(Ubs<0) Ualpha[1] = atan(Ubx/Ubs)*180/PI +180;
else Ualpha[1] = atan(Ubx/Ubs)*180/PI;
Ucs = A[0][1] + (bs*A[1][1] -bx*B[1][1]) + (as*A[2][1] - ax*B[2][1]); //uc实部
Ucx = B[0][1] + (bs*B[1][1] +bx*A[1][1]) + (as*B[2][1] + ax*A[2][1]); //uc虚部
Uc = sqrt(Ucs*Ucs + Ucx*Ucx)/3.0;
if(Ucs<0) Ualpha[2] = 180 + atan(Ucx/Ucs)*180/PI;
else Ualpha[2] = atan(Ucx/Ucs)*180/PI;
/////// Fa0, Fb0, Fc0 ///////
Fa0s[0] = Ua*cos(Ualpha[0]*PI/180.);
Fa0x[0] = Ua*sin(Ualpha[0]*PI/180.);
Fa0[0] = Ua;
F0alpha[0][0] = Ualpha[0];
Fb0s[0] = Fa0s[0];
Fb0x[0] = Fa0x[0];
Fb0[0] = Ua;
F0alpha[0][1] = Ualpha[0];
Fc0s[0] = Fa0s[0];
Fc0x[0] = Fa0x[0];
Fc0[0] = Ua;
F0alpha[0][2] = Ualpha[0];
/////// Fa1, Fb1, Fc1 ///////
Fa1s[0] = Ub*cos(Ualpha[1]*PI/180.);
Fa1x[0] = Ub*sin(Ualpha[1]*PI/180.);
Fa1[0] = Ub;
F1alpha[0][0] = Ualpha[1];
Fb1s[0] = bs*Fa1s[0] - bx*Fa1x[0];
Fb1x[0] = bs*Fa1x[0] + bx*Fa1s[0];
Fb1[0] = sqrt(Fb1s[0]*Fb1s[0] + Fb1x[0]*Fb1x[0]);
if(Fb1s[0] < 0) F1alpha[0][1] = 180 + 180*atan(Fb1x[0]/Fb1s[0])/PI;
else F1alpha[0][1] = 180*atan(Fb1x[0]/Fb1s[0])/PI;
Fc1s[0] = as*Fa1s[0] - ax*Fa1x[0];
Fc1x[0] = as*Fa1x[0] + ax*Fa1s[0];
Fc1[0] = sqrt(Fc1s[0]*Fc1s[0] + Fc1x[0]*Fc1x[0]);
if(Fc1s[0] < 0) F1alpha[0][2] = 180 + atan(Fc1x[0]/Fc1s[0])*180/PI;
else F1alpha[0][2] = atan(Fc1x[0]/Fc1s[0])*180/PI;
////////////// Fa2, Fb2, Fc2 /////////////////
Fa2s[0] = Uc*cos(Ualpha[2]*PI/180.);
Fa2x[0] = Uc*sin(Ualpha[2]*PI/180.);
Fa2[0] = Uc;
F2alpha[0][0] = Ualpha[2];
Fb2s[0] = as*Fa2s[0] - ax*Fa2x[0];
Fb2x[0] = as*Fa2x[0] + ax*Fa2s[0];
Fb2[0] = sqrt(Fb2s[0]*Fb2s[0] + Fb2x[0]*Fb2x[0]);
if(Fb2s[0] < 0) F2alpha[0][1] = 180 + 180*atan(Fb2x[0]/Fb2s[0])/PI;
else F2alpha[0][1] = 180*atan(Fb2x[0]/Fb2s[0])/PI;
Fc2s[0] = bs*Fa2s[0] - bx*Fa2x[0];
Fc2x[0] = bs*Fa2x[0] + bx*Fa2s[0];
Fc2[0] = sqrt(Fc2s[0]*Fc2s[0] + Fc2x[0]*Fc2x[0]);
if(Fc2s[0] < 0) F2alpha[0][2] = 180 + atan(Fc2x[0]/Fc2s[0])*180/PI;
else F2alpha[0][2] = atan(Fc2x[0]/Fc2s[0])*180/PI;
////////////// Fa, Fb, Fc /////////////////
Fas[0] = Fa0s[0] + Fa1s[0] + Fa2s[0];
Fax[0] = Fa0x[0] + Fa1x[0] + Fa2x[0];
Fa[0] = sqrt(Fas[0]*Fas[0] + Fax[0]*Fax[0]);
if(Fas[0] < 0)Falpha[0][0] = 180 + atan(Fax[0]/Fas[0])*180/PI;
else Falpha[0][0] = atan(Fax[0]/Fas[0])*180/PI;
Fbs[0] = Fb0s[0] + Fb1s[0] + Fb2s[0];
Fbx[0] = Fb0x[0] + Fb1x[0] + Fb2x[0];
Fb[0] = sqrt(Fbs[0]*Fbs[0] + Fbx[0]*Fbx[0]);
if(Fbs[0] < 0)Falpha[0][1] = 180 + atan(Fbx[0]/Fbs[0])*180/PI;
else Falpha[0][1] = atan(Fbx[0]/Fbs[0])*180/PI;
Fcs[0] = Fc0s[0] + Fc1s[0] + Fc2s[0];
Fcx[0] = Fc0x[0] + Fc1x[0] + Fc2x[0];
Fc[0] = sqrt(Fcs[0]*Fcs[0] + Fcx[0]*Fcx[0]);
if(Fcs[0] < 0)Falpha[0][2] = 180 + atan(Fcx[0]/Fcs[0])*180/PI;
else Falpha[0][2] = atan(Fcx[0]/Fcs[0])*180/PI;
/////////////////// IIIIII ////////
Ias = A[4][1] + A[5][1] + A[6][1]; //ua实部
Iax = B[4][1] + B[5][1] + B[6][1]; //ua虚部
Ia = sqrt(Ias*Ias + Iax*Iax)/3.0;
if(Ias < 0) Ialpha[0] = 180 + 180*atan(Iax/Ias)/PI;
else Ialpha[0] = 180*atan(Iax/Ias)/PI;
Ibs = A[4][1] + (as*A[5][1] -ax*B[5][1]) + (bs*A[6][1] - bx*B[6][1]); //ub实部
Ibx = B[4][1] + (as*B[5][1] +ax*A[5][1]) + (bs*B[6][1] + bx*A[6][1]); //ub虚部
Ib = sqrt(Ibs*Ibs + Ibx*Ibx)/3.0;
if(Ibs < 0)Ialpha[1] = 180 + 180*atan(Ibx/Ibs)/PI;
else Ialpha[1] = 180*atan(Ibx/Ibs)/PI;
Ics = A[4][1] + (bs*A[5][1] -bx*B[5][1]) + (as*A[6][1] - ax*B[6][1]); //uc实部
Icx = B[4][1] + (bs*B[5][1] +bx*A[5][1]) + (as*B[6][1] + ax*A[6][1]); //uc虚部
Ic = sqrt(Ics*Ics + Icx*Icx)/3.0;
if(Ics < 0) Ialpha[2] = 180 + 180*atan(Icx/Ics)/PI;
else Ialpha[2] = 180*atan(Icx/Ics)/PI;
/////// Fa0, Fb0, Fc0 ///////
Fa0s[1] = Ia*cos(Ialpha[0]*PI/180.);
Fa0x[1] = Ia*sin(Ialpha[0]*PI/180.);
Fa0[1] = Ia;
F0alpha[1][0] = Ialpha[0];
Fb0s[1] = Fa0s[1];
Fb0x[1] = Fa0x[1];
Fb0[1] = Ia;
F0alpha[1][1] = Ialpha[0];
Fc0s[1] = Fa0s[1];
Fc0x[1] = Fa0x[1];
Fc0[1] = Ia;
F0alpha[1][2] = Ialpha[0];
//////// Fa1, Fb1 ,Fc1 //////////////////
Fa1s[1] = Ib*cos(Ialpha[1]*PI/180.);
Fa1x[1] = Ib*sin(Ialpha[1]*PI/180.);
Fa1[1] = Ib;
F1alpha[1][0] = Ialpha[1];
Fb1s[1] = bs*Fa1s[1] - bx*Fa1x[1];
Fb1x[1] = bs*Fa1x[1] + bx*Fa1s[1];
Fb1[1] = sqrt(Fb1s[1]*Fb1s[1] + Fb1x[1]*Fb1x[1]);
if(Fb1s[1] < 0) F1alpha[1][1] = 180 + 180*atan(Fb1x[1]/Fb1s[1])/PI;
else F1alpha[1][1] = 180*atan(Fb1x[1]/Fb1s[1])/PI;
Fc1s[1] = as*Fa1s[1] - ax*Fa1x[1];
Fc1x[1] = as*Fa1x[1] + ax*Fa1s[1];
Fc1[1] = sqrt(Fc1s[1]*Fc1s[1] + Fc1x[1]*Fc1x[1]);
if(Fc1s[1] < 0) F1alpha[1][2] = 180 + 180*atan(Fc1x[1]/Fc1s[1])/PI;
else F1alpha[1][2] = 180*atan(Fc1x[1]/Fc1s[1])/PI;
//////////// Fa2, Fb2, Fc2 ////////////
Fa2s[1] = Ic*cos(Ialpha[2]*PI/180.);
Fa2x[1] = Ic*sin(Ialpha[2]*PI/180.);
Fa2[1] = Ic;
F2alpha[1][0] = Ialpha[2];
Fb2s[1] = as*Fa2s[1] - ax*Fa2x[1];
Fb2x[1] = as*Fa2x[1] + ax*Fa2s[1];
Fb2[1] = sqrt(Fb2s[1]*Fb2s[1] + Fb2x[1]*Fb2x[1]);
if(Fb2s[1] < 0) F2alpha[1][1] = 180 + 180*atan(Fb2x[1]/Fb2s[1])/PI;
else F2alpha[1][1] = 180*atan(Fb2x[1]/Fb2s[1])/PI;
Fc2s[1] = bs*Fa2s[1] - bx*Fa2x[1];
Fc2x[1] = bs*Fa2x[1] + bx*Fa2s[1];
Fc2[1] = sqrt(Fc2s[1]*Fc2s[1] + Fc2x[1]*Fc2x[1]);
if(Fc2s[1] < 0) F2alpha[1][2] = 180 + atan(Fc2x[1]/Fc2s[1])*180/PI;
else F2alpha[1][2] = atan(Fc2x[1]/Fc2s[1])*180/PI;
////////////// Fa, Fb, Fc /////////////////
Fas[1] = Fa0s[1] + Fa1s[1] + Fa2s[1];
Fax[1] = Fa0x[1] + Fa1x[1] + Fa2x[1];
Fa[1] = sqrt(Fas[1]*Fas[1] + Fax[1]*Fax[1]);
if(Fas[1] < 0)Falpha[1][0] = 180 + atan(Fax[1]/Fas[1])*180/PI;
else Falpha[1][0] = atan(Fax[1]/Fas[1])*180/PI;
Fbs[1] = Fb0s[1] + Fb1s[1] + Fb2s[1];
Fbx[1] = Fb0x[1] + Fb1x[1] + Fb2x[1];
Fb[1] = sqrt(Fbs[1]*Fbs[1] + Fbx[1]*Fbx[1]);
if(Fbs[1] < 0)Falpha[1][1] = 180 + atan(Fbx[1]/Fbs[1])*180/PI;
else Falpha[1][1] = atan(Fbx[1]/Fbs[1])*180/PI;
Fcs[1] = Fc0s[1] + Fc1s[1] + Fc2s[1];
Fcx[1] = Fc0x[1] + Fc1x[1] + Fc2x[1];
Fc[1] = sqrt(Fcs[1]*Fcs[1] + Fcx[1]*Fcx[1]);
if(Fcs[1] < 0)Falpha[1][2] = 180 + atan(Fcx[1]/Fcs[1])*180/PI;
else Falpha[1][2] = atan(Fcx[1]/Fcs[1])*180/PI;
////////////////////////////////////////
int xo, yo, xn,yn, xm, ym, xp, yp;
double MaxU,MaxI;
MaxU = max(Fa0[0], Fa1[0]);
MaxU = max(MaxU, Fa2[0]);
MaxU = max(MaxU, Fa[0]);
FactorU[0] = 100.0/MaxU;
MaxI = max(Fa0[1], Fa1[1]);
MaxI = max(MaxI, Fa2[1]);
MaxI = max(MaxI, Fa[1]);
FactorU[1] = 100.0/MaxI + WyyFactor;
int Alength = 16;
int Awidth = 3;
char tempstr[2][2] = {"U","I"};
char tempstr1[20];
pDC->SetBkColor(RGB(64,128,128));
int xd = 80;
int width = 11;
int r = 4;
CFont FontD, FontX, *OldFont;
FontD.CreatePointFont(110, "Times New Roman");
FontX.CreatePointFont(90, "Times New Roman");
pDC->SetBkMode(OPAQUE);
OldFont = pDC->SelectObject(&FontX);
OldPen = pDC->SelectObject(&Pen[0][0]);
// OldBrush = pDC->SelectObject(&Brush[0]);
for(i=0; i<2; i++)
{
xo = 180;
yo = 200;
//////////////// U Fa1
//pDC->SelectObject(&Brush[0]);
pDC->SelectObject(&Pen[i][0]);
pDC->MoveTo(xo, yo);
xn = xo + int(FactorU[i]*Fa1s[i]);
yn = yo - int(FactorU[i]*Fa1x[i]);
xm = xn - int(Alength*cos(F1alpha[i][0]*PI/180.));
ym = yn + int(Alength*sin(F1alpha[i][0]*PI/180.));
if(i==0)
{
pDC->LineTo(xm, ym);
pDC->MoveTo(xn, yn);
pDC->LineTo(xm-int(Awidth*sin(F1alpha[i][0]*PI/180.)), int(ym - Awidth*cos(F1alpha[i][0]*PI/180.)));
pDC->LineTo(xm+int(Awidth*sin(F1alpha[i][0]*PI/180.)), int(ym + Awidth*cos(F1alpha[i][0]*PI/180.)));
pDC->LineTo(xn, yn);
}
//if(i==1)pDC->FloodFill((xn+xm)/2, (yn+ym)/2, ARGB);
if(i==1)
{
pDC->LineTo(xn, yn);
pDC->Ellipse(xn-r, yn-r, xn+r, yn+r);
}
if(xo < xn){ xp = xn+5; yp = yn; }
else { xp = xn-xd; yp = yn; }
pDC->SelectObject(&FontD);
pDC->SetTextColor(RGB(255,255,0));
pDC->TextOut(xp, yp, tempstr[i]);
xp += width-i*4; yp += 4;
pDC->SelectObject(&FontX);
sprintf(tempstr1, "1a1=%6.2lf", Fa1[i]);
pDC->TextOut(xp, yp, tempstr1);
/////////////////////// Fb1
pDC->SelectObject(&Pen[i][1]);
// pDC->SelectObject(&Brush[1]);
pDC->MoveTo(xo, yo);
xn = xo + int(FactorU[i]*Fb1s[i]);
yn = yo - int(FactorU[i]*Fb1x[i]);
xm = xn - int(Alength*cos(F1alpha[i][1]*PI/180.));
ym = yn + int(Alength*sin(F1alpha[i][1]*PI/180.));
if(i==0)
{
pDC->LineTo(xm, ym);
pDC->MoveTo(xn, yn);
pDC->LineTo(xm - int(Awidth*sin(F1alpha[i][1]*PI/180.)), ym - int(Awidth*cos(F1alpha[i][1]*PI/180.)));
pDC->LineTo(xm + int(Awidth*sin(F1alpha[i][1]*PI/180.)), ym + int(Awidth*cos(F1alpha[i][1]*PI/180.)));
pDC->LineTo(xn, yn);
}
if(i==1)
{
pDC->LineTo(xn, yn);
pDC->Ellipse(xn-r, yn-r, xn+r, yn+r);
}
//if(i==1)pDC->FloodFill((xn+xm)/2, (yn+ym)/2, BRGB);
if(xo < xn){ xp = xn+5; yp = yn; }
else { xp = xn-xd; yp = yn; }
pDC->SelectObject(&FontD);
pDC->SetTextColor(RGB(0,255,0));
pDC->TextOut(xp, yp, tempstr[i]);
xp += width-i*4; yp += 4;
pDC->SelectObject(&FontX);
sprintf(tempstr1, "1b1=%6.2lf", Fb1[i]);
pDC->TextOut(xp, yp, tempstr1);
//////////////////////////////Fc1
pDC->SelectObject(&Pen[i][2]);
// pDC->SelectObject(&Brush[2]);
pDC->MoveTo(xo, yo);
xn = xo + int(FactorU[i]*Fc1s[i]);
yn = yo - int(FactorU[i]*Fc1x[i]);
xm = xn - int(Alength*cos(F1alpha[i][2]*PI/180.));
ym = yn + int(Alength*sin(F1alpha[i][2]*PI/180.));
if(i==0)
{
pDC->LineTo(xm, ym);
pDC->MoveTo(xn, yn);
pDC->LineTo(xm - int(Awidth*sin(F1alpha[i][2]*PI/180.)), ym - int(Awidth*cos(F1alpha[i][2]*PI/180.)));
pDC->LineTo(xm + int(Awidth*sin(F1alpha[i][2]*PI/180.)), ym + int(Awidth*cos(F1alpha[i][2]*PI/180.)));
pDC->LineTo(xn, yn);
}
if(i==1)
{
pDC->LineTo(xn, yn);
pDC->Ellipse(xn-r, yn-r, xn+r, yn+r);
}
// if(i==1)pDC->FloodFill((xn+xm)/2, (yn+ym)/2, CRGB);
if(xo < xn){ xp = xn+5; yp = yn; }
else { xp = xn-xd; yp = yn; }
pDC->SelectObject(&FontD);
pDC->SetTextColor(RGB(255,0,0));
pDC->TextOut(xp, yp, tempstr[i]);
xp += width-i*4; yp += 4;
pDC->SelectObject(&FontX);
sprintf(tempstr1, "1c1=%6.2lf", Fc1[i]);
pDC->TextOut(xp, yp, tempstr1);
//////////////// U Fa2
xo += 300;
pDC->SelectObject(&Pen[i][0]);
// pDC->SelectObject(&Brush[0]);
pDC->MoveTo(xo, yo);
xn = xo + int(FactorU[i]*Fa2s[i]);
yn = yo - int(FactorU[i]*Fa2x[i]);
xm = xn - int(Alength*cos(F2alpha[i][0]*PI/180.));
ym = yn + int(Alength*sin(F2alpha[i][0]*PI/180.));
if(i==0)
{
pDC->LineTo(xm, ym);
pDC->MoveTo(xn, yn);
pDC->LineTo(xm - int(Awidth*sin(F2alpha[i][0]*PI/180.)), ym - int(Awidth*cos(F2alpha[i][0]*PI/180.)));
pDC->LineTo(xm + int(Awidth*sin(F2alpha[i][0]*PI/180.)), ym + int(Awidth*cos(F2alpha[i][0]*PI/180.)));
pDC->LineTo(xn, yn);
}
if(i==1)
{
pDC->LineTo(xn, yn);
pDC->Ellipse(xn-r, yn-r, xn+r, yn+r);
}
//if(i==1)pDC->FloodFill((xn+xm)/2, (yn+ym)/2, ARGB);
if(xo < xn){ xp = xn+5; yp = yn; }
else { xp = xn-xd; yp = yn; }
pDC->SelectObject(&FontD);
pDC->SetTextColor(RGB(255,255,0));
pDC->TextOut(xp, yp, tempstr[i]);
xp += width-i*4; yp += 4;
pDC->SelectObject(&FontX);
sprintf(tempstr1, "1a2=%6.2lf", Fa2[i]);
pDC->TextOut(xp, yp, tempstr1);
//////////////////////Fb2
pDC->SelectObject(&Pen[i][1]);
// pDC->SelectObject(&Brush[1]);
pDC->MoveTo(xo, yo);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -