📄 6spsview.cpp
字号:
// 6spsView.cpp : implementation of the CMy6spsView class
//
#include "stdafx.h"
#include "6sps.h"
#include "6spsDoc.h"
#include "6spsView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMy6spsView
IMPLEMENT_DYNCREATE(CMy6spsView, CView)
BEGIN_MESSAGE_MAP(CMy6spsView, CView)
//{{AFX_MSG_MAP(CMy6spsView)
ON_COMMAND(dyna_displacement, Ondisplacement)
ON_COMMAND(dyna_force, Onforce)
ON_COMMAND(dyna_velocity, Onvelocity)
ON_COMMAND(ID_set, Onset)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMy6spsView construction/destruction
CMy6spsView::CMy6spsView()
{
// TODO: add construction code here
judg=0;
aa[0][0]=0.8*cos(-15*pi/180); aa[0][1]=0.8*sin(-15*pi/180);
aa[1][0]=0.8*cos(75*pi/180); aa[1][1]=0.8*sin(75*pi/180);
aa[2][0]=0.8*cos(105*pi/180); aa[2][1]=0.8*sin(105*pi/180);
aa[3][0]=0.8*cos(195*pi/180); aa[3][1]=0.8*sin(195*pi/180);
aa[4][0]=0.8*cos(225*pi/180); aa[4][1]=0.8*sin(225*pi/180);
aa[5][0]=0.8*cos(-45*pi/180); aa[5][1]=0.8*sin(-45*pi/180);
bb[0][0]=0.2*cos(15*pi/180); bb[0][1]=0.2*sin(15*pi/180);
bb[1][0]=0.2*cos(45*pi/180); bb[1][1]=0.2*sin(45*pi/180);
bb[2][0]=0.2*cos(135*pi/180); bb[2][1]=0.2*sin(135*pi/180);
bb[3][0]=0.2*cos(165*pi/180); bb[3][1]=0.2*sin(165*pi/180);
bb[4][0]=0.2*cos(255*pi/180); bb[4][1]=0.2*sin(255*pi/180);
bb[5][0]=0.2*cos(285*pi/180); bb[5][1]=0.2*sin(285*pi/180);
for(i=3;i<6;i++)
{
vp[i]=0;ap[i]=0;
}
for(i=0;i<6;i++)
{
aa[i][2]=1.594058;
bb[i][2]=0;
}
lh=0.4445;lt=0.341066;mh=7;mt=18.8;
mgh[0]=0;mgh[1]=0;mgh[2]=-7*18.8;
mgt[0]=0;mgt[1]=0;mgt[2]=-18.8*9.8;
mp[0]=0;mp[1]=0;mp[2]=48;
mgp[0]=0;mgp[1]=0;mgp[2]=-48*9.8;
fe[0]=85.7;fe[1]=41.8;fe[2]=93.4;
fe[3]=8.08;fe[4]=17.75;fe[5]=0.13;
cons=FALSE;
inu[3]=1.26828;ind[3]=0.31338;
}
CMy6spsView::~CMy6spsView()
{
}
BOOL CMy6spsView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CMy6spsView drawing
void CMy6spsView::OnDraw(CDC* pDC)
{
CMy6spsDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
switch (judg)
{
case 1: drawdis(); break;
case 2: drawvelo(); break;
case 3: drawfor(); break;
default: break;
}
}
/////////////////////////////////////////////////////////////////////////////
// CMy6spsView printing
BOOL CMy6spsView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CMy6spsView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CMy6spsView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CMy6spsView diagnostics
#ifdef _DEBUG
void CMy6spsView::AssertValid() const
{
CView::AssertValid();
}
void CMy6spsView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CMy6spsDoc* CMy6spsView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMy6spsDoc)));
return (CMy6spsDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMy6spsView message handlers
void CMy6spsView::Ondisplacement()
{
// TODO: Add your command handler code here
judg=1;
Invalidate();
}
void CMy6spsView::Onforce()
{
// TODO: Add your command handler code here
judg=3;
Invalidate();
}
void CMy6spsView::Onvelocity()
{
// TODO: Add your command handler code here
judg=2;
Invalidate();
}
void CMy6spsView::drawdis()
{
CClientDC dc(this);
if(cons==FALSE)
{
static char strt[9][5]={{'0'},{'0','.','0','5'},{'0','.','1','0'},{'0','.','1','5'},{'0','.','2','0'},{'0','.','2','5'},{'0','.','3','0'},{'0','.','3','5'},{'0','.','4','0'}};
dc.TextOut(245,110,"l (mm)");
dc.TextOut(645,304,"t (s)");
for(numi=1.25;numi<1.5;numi=numi+0.05)
{
itoa(numi*1000,str,10);
dc.TextOut(250,1290-numi*800,str);
dc.MoveTo(300,1300-numi*800);
dc.LineTo(620,1300-numi*800);
}
for(numi=0,i=0;numi<=0.4;numi=numi+0.05)
{
dc.TextOut(290+numi*800,304,strt[i++]);
dc.MoveTo(300+numi*800,140);
dc.LineTo(300+numi*800,300);
}
end=0.37699;
}
else
{
static char strt[7][5]={{'0'},{'0','.','0','5'},{'0','.','1','0'},{'0','.','1','5'},{'0','.','2','0'},{'0','.','2','5'},{'0','.','3','0'}};
dc.TextOut(245,80,"l (mm)");
dc.TextOut(565,314,"t (s)");
for(numi=1.1;numi<1.7;numi=numi+0.1)
{
itoa(numi*1000,str,10);
dc.TextOut(250,740-numi*400,str);
dc.MoveTo(300,750-numi*400);
dc.LineTo(540,750-numi*400);
}
for(numi=0,i=0;numi<=0.3;numi=numi+0.05)
{
dc.TextOut(290+numi*800,314,strt[i++]);
dc.MoveTo(300+numi*800,110);
dc.LineTo(300+numi*800,310);
}
end=0.2968667;
}
for(t=0;t<=end;t=t+0.0001)
{
if(cons==FALSE)
{
cal();
for(i=0;i<2;i++)
{
nt[i]=sp[i]/0.23;
}
nt[2]=0.222036/0.23;
bet=acos(nt[2]);
if(t<0.37699/2)
{
alp=-atan(nt[0]/nt[1]);
}
else
{
alp=pi-atan(nt[0]/nt[1]);
}
gam=-alp;
}
else
{
cbl();
alp=0;
bet=0;
gam=0;
}
tr[0][0]=cos(alp)*cos(gam)-sin(alp)*cos(bet)*sin(gam);
tr[0][1]=-cos(alp)*sin(gam)-sin(alp)*cos(bet)*cos(gam);
tr[1][1]=-sin(alp)*sin(gam)+cos(alp)*cos(bet)*cos(gam);
tr[1][2]=-sin(bet)*cos(alp);
tr[2][0]=sin(bet)*sin(gam);
tr[2][1]=sin(bet)*cos(gam);
tr[2][2]=cos(bet);
tr[0][2]=sin(alp)*sin(bet);
tr[1][0]=sin(alp)*cos(gam)+cos(alp)*cos(bet)*sin(gam);
for(i=0;i<6;i++)
{
for(j=0;j<3;j++)
{
tb[i][j]=0;
for(k=0;k<3;k++)
{
tb[i][j]=tb[i][j]+tr[j][k]*bb[i][k];
}
}
for(j=0;j<3;j++)
{
l[i][j]=tb[i][j]+sp[j]-aa[i][j];
}
l[i][3]=sqrt(pow(l[i][0],2)+pow(l[i][1],2)+pow(l[i][2],2));
if(cons==FALSE)
{
if(i==0)
{
dc.SetPixel(300+t*800,1300-l[i][3]*800,RGB(255,0,0));
}
if(i==1)
{
dc.SetPixel(300+t*800,1300-l[i][3]*800,RGB(0,255,0));
}
if(i==2)
{
dc.SetPixel(300+t*800,1300-l[i][3]*800,RGB(0,0,255));
}
if(i==3)
{
dc.SetPixel(300+t*800,1300-l[i][3]*800,RGB(255,0,255));
}
if(i==4)
{
dc.SetPixel(300+t*800,1300-l[i][3]*800,RGB(0,255,255));
}
if(i==5)
{
dc.SetPixel(300+t*800,1300-l[i][3]*800,RGB(0,0,0));
}
}
else
{
if(i==0)
{
dc.SetPixel(300+t*800,750-l[i][3]*400,RGB(255,0,0));
}
if(i==1)
{
dc.SetPixel(300+t*800,750-l[i][3]*400,RGB(0,255,0));
}
if(i==2)
{
dc.SetPixel(300+t*800,750-l[i][3]*400,RGB(0,0,255));
}
if(i==3)
{
dc.SetPixel(300+t*800,750-l[i][3]*400,RGB(255,0,255));
}
if(i==4)
{
dc.SetPixel(300+t*800,750-l[i][3]*400,RGB(0,255,255));
}
if(i==5)
{
dc.SetPixel(300+t*800,750-l[i][3]*400,RGB(0,0,0));
}
}
}
}
}
void CMy6spsView::drawvelo()
{
CClientDC dc(this);
if(cons==FALSE)
{
static char strt[9][5]={{'0'},{'0','.','0','5'},{'0','.','1','0'},{'0','.','1','5'},{'0','.','2','0'},{'0','.','2','5'},{'0','.','3','0'},{'0','.','3','5'},{'0','.','4','0'}};
dc.TextOut(645,350,"t (s)");
for(numi=0,i=0;numi<=0.4;numi=numi+0.05)
{
dc.MoveTo(300+numi*800,154);
dc.LineTo(300+numi*800,346);
dc.TextOut(290+numi*800,350,strt[i++]);
}
dc.TextOut(245,124,"v (mm/s)");
for(numi=-1.6;numi<=1.6;numi=numi+0.4)
{
dc.MoveTo(300,250-numi*60);
dc.LineTo(620,250-numi*60);
if(numi>0)
{
numi=floor((numi+0.002)*10)/10;
}
itoa(numi*1000,str,10);
dc.TextOut(250,240-numi*60,str);
}
end=0.37699;
}
else
{
static char strt[7][5]={{'0'},{'0','.','0','5'},{'0','.','1','0'},{'0','.','1','5'},{'0','.','2','0'},{'0','.','2','5'},{'0','.','3','0'}};
dc.TextOut(565,324,"t (s)");
for(numi=0,i=0;numi<=0.3;numi=numi+0.05)
{
dc.MoveTo(300+numi*800,176);
dc.LineTo(300+numi*800,320);
dc.TextOut(290+numi*800,324,strt[i++]);
}
dc.TextOut(245,146,"v (mm/s)");
for(numi=-2.0;numi<=0.6;numi=numi+0.4)
{
dc.MoveTo(300,200-numi*60);
dc.LineTo(540,200-numi*60);
if(numi>0)
{
numi=floor((numi+0.002)*10)/10;
}
itoa(numi*1000,str,10);
dc.TextOut(250,190-numi*60,str);
}
end=0.2968667;
}
for(t=0;t<=end;t=t+0.0001)
{
if(cons==FALSE)
{
cal();
for(i=0;i<2;i++)
{
nt[i]=sp[i]/0.23;
}
nt[2]=0.222036/0.23;
bet=acos(nt[2]);
if(t<0.37699/2)
{
alp=-atan(nt[0]/nt[1]);
}
else
{
alp=pi-atan(nt[0]/nt[1]);
}
gam=-alp;
}
else
{
cbl();
alp=0;
bet=0;
gam=0;
}
tr[0][0]=cos(alp)*cos(gam)-sin(alp)*cos(bet)*sin(gam);
tr[0][1]=-cos(alp)*sin(gam)-sin(alp)*cos(bet)*cos(gam);
tr[1][1]=-sin(alp)*sin(gam)+cos(alp)*cos(bet)*cos(gam);
tr[1][2]=-sin(bet)*cos(alp);
tr[2][0]=sin(bet)*sin(gam);
tr[2][1]=sin(bet)*cos(gam);
tr[2][2]=cos(bet);
tr[0][2]=sin(alp)*sin(bet);
tr[1][0]=sin(alp)*cos(gam)+cos(alp)*cos(bet)*sin(gam);
for(i=0;i<6;i++)
{
for(j=0;j<3;j++)
{
tb[i][j]=0;
for(k=0;k<3;k++)
{
tb[i][j]=tb[i][j]+tr[j][k]*bb[i][k];
}
}
for(j=0;j<3;j++)
{
l[i][j]=tb[i][j]+sp[j]-aa[i][j];
}
l[i][3]=sqrt(pow(l[i][0],2)+pow(l[i][1],2)+pow(l[i][2],2));
for(j=0;j<3;j++)
{
el[i][j]=l[i][j]/l[i][3];
}
}
for(i=0;i<6;i++)
{
for(j=0;j<3;j++)
{
ja[i][j]=el[i][j];
}
cma=tb[i][0];cmb=tb[i][1];cmc=tb[i][2];
cmd=el[i][0];cme=el[i][1];cmf=el[i][2];
crossmul();
ja[i][3]=cmg;ja[i][4]=cmh;ja[i][5]=cmi;
}
for(i=0;i<6;i++)
{
vl[i][6]=0;
for(j=0;j<6;j++)
{
vl[i][6]=vl[i][6]+ja[i][j]*vp[j];
}
if(cons==FALSE)
{
if(i==0)
{
dc.SetPixel(300+t*800,250-vl[i][6]*60,RGB(255,0,0));
}
if(i==1)
{
dc.SetPixel(300+t*800,250-vl[i][6]*60,RGB(0,255,0));
}
if(i==2)
{
dc.SetPixel(300+t*800,250-vl[i][6]*60,RGB(0,0,255));
}
if(i==3)
{
dc.SetPixel(300+t*800,250-vl[i][6]*60,RGB(255,0,255));
}
if(i==4)
{
dc.SetPixel(300+t*800,250-vl[i][6]*60,RGB(0,255,255));
}
if(i==5)
{
dc.SetPixel(300+t*800,250-vl[i][6]*60,RGB(0,0,0));
}
}
else
{
if(i==0)
{
dc.SetPixel(300+t*800,200-vl[i][6]*60,RGB(255,0,0));
}
if(i==1)
{
dc.SetPixel(300+t*800,200-vl[i][6]*60,RGB(0,255,0));
}
if(i==2)
{
dc.SetPixel(300+t*800,200-vl[i][6]*60,RGB(0,0,255));
}
if(i==3)
{
dc.SetPixel(300+t*800,200-vl[i][6]*60,RGB(255,0,255));
}
if(i==4)
{
dc.SetPixel(300+t*800,200-vl[i][6]*60,RGB(0,255,255));
}
if(i==5)
{
dc.SetPixel(300+t*800,200-vl[i][6]*60,RGB(0,0,0));
}
}
}
}
}
void CMy6spsView::drawfor()
{
CClientDC dc(this);
if(cons==FALSE)
{
static char strt[9][5]={{'0'},{'0','.','0','5'},{'0','.','1','0'},{'0','.','1','5'},{'0','.','2','0'},{'0','.','2','5'},{'0','.','3','0'},{'0','.','3','5'},{'0','.','4','0'}};
dc.TextOut(645,374,"t (s)");
for(numi=0,i=0;numi<=0.4;numi=numi+0.05)
{
dc.MoveTo(300+numi*800,90);
dc.LineTo(300+numi*800,370);
dc.TextOut(290+numi*800,374,strt[i++]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -