📄 isodataview.cpp
字号:
// ISODATAView.cpp : implementation of the CISODATAView class
//
#include "stdafx.h"
#include "ISODATA.h"
#include "isodata1.h"
#include "math.h"
#include "ISODATADoc.h"
#include "ISODATAView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CISODATAView
IMPLEMENT_DYNCREATE(CISODATAView, CView)
BEGIN_MESSAGE_MAP(CISODATAView, CView)
//{{AFX_MSG_MAP(CISODATAView)
ON_COMMAND(ID_iso, Oniso)
ON_BN_CLICKED(IDC_ok, Onok)
//}}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()
/////////////////////////////////////////////////////////////////////////////
// CISODATAView construction/destruction
vector add(vector a[],int n)
{
vector temp;
for(int i=0;i<n;i++)
{
temp.x+=a[i].x;
temp.y+=a[i].y;
}
return temp;
}
vector operator +(vector a,vector b)
{
vector temp;
temp.x=a.x+b.x;
temp.y=a.y+b.y;
return temp;
}
vector mult(double a,vector b)
{
vector temp;
temp.x=a*b.x;
temp.y=a*b.y;
return temp;
}
double dist(vector a,vector b)
{
return (sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)));
}
double dd(double a,double b)
{
return((a-b)*(a-b));
}
void CISODATAView::comp(double a,double b)
{
if(a>b)
{
sm=a;
signal=1;
}
else
{
sm=b;
signal=0;
}
}
void CISODATAView::xiuzheng()
{
for(int i=0;i<c;i++)//xiuzheng
{
if(n[i]<cn)
{
c--;
for(int j=i;j<c;j++)
{
mid[j]=mid[j+1];
}
}
else
{
mid[i]=mult(1/n[i],add(gg[i],n[i]));
}
}
}
void CISODATAView::fenlie()
{
int j=0;
for(int i=0;i<c;i++)
{
comp(sc[i].x,sc[i].y);
if(sm>cs)
{
if(c<=2/k||(sd[i]<total&&n[i]>2*(cn+1)))
{
if(signal)
{
mid[i].x+=0.5*sm;
mid[c+j].x-=0.5*sm;
}
else
{
mid[i].y+=0.5*sm;
mid[c+j].y-=0.5*sm;
}
j++;
}
}
}
c+=j;
}
void CISODATAView::hebing()
{
for(int i=0;i<c;i++)
{
double temp=dist(mid[i],mid[i+1]);
if(temp<cc)
{
c--;
mid[i]=mult((1/(n[i]+n[i+1])),(mult(n[i],mid[i])+mult(n[i+1],mid[i+1])));
for(int j=i+1;j<c;j++)
{
mid[j]=mid[j+1];
}
}
}
}
CISODATAView::CISODATAView()
{
// TODO: add construction code here
}
CISODATAView::~CISODATAView()
{
}
BOOL CISODATAView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CISODATAView drawing
void CISODATAView::OnDraw(CDC* pDC)
{
CISODATADoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CISODATAView printing
BOOL CISODATAView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CISODATAView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CISODATAView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CISODATAView diagnostics
#ifdef _DEBUG
void CISODATAView::AssertValid() const
{
CView::AssertValid();
}
void CISODATAView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CISODATADoc* CISODATAView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CISODATADoc)));
return (CISODATADoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CISODATAView message handlers
void CISODATAView::Oniso()
{
Cisodata dlg;
dlg.DoModal();
// TODO: Add your command handler code here
}
void CISODATAView::Onok()
{
flag=UpdateData(true);
if(flag)
{
count=0;
total=0;
ss[0].x=dlg.m_11;ss[0].y=dlg.m_12; ss[1].x=dlg.m_21;ss[1].y=dlg.m_22; ss[2].x=dlg.m_31;ss[2].y=dlg.m_32; ss[3].x=dlg.m_41;ss[3].y=dlg.m_42;
ss[4].x=dlg.m_51;ss[4].y=dlg.m_52; ss[5].x=dlg.m_61;ss[5].y=dlg.m_62; ss[6].x=dlg.m_71;ss[6].y=dlg.m_72; ss[7].x=dlg.m_81;ss[7].y=dlg.m_82;
c=1;
for(int kk=0;kk<8;k++)
{
n[kk]=0;
}
mid[0]=ss[0];
k=3;
l=4;
cs=1;
cc=1;
cn=1;
while(l--)
{
for(int i=0;i<8;i++)//gui lei
{
int mark=0;
double distance=dist(mid[0],ss[i]);
for(int j=0;j<c;j++)
{
if(distance>dist(mid[j],ss[i]))
{
distance=dist(mid[j],ss[i]);
mark=j;
}
}
gg[mark][n[i]]=ss[i];
n[i]++;
}
xiuzheng();
for(int i3=0;i3<c;i3++)//zongti juli he fangcha
{
double sum=0,sum1=0,sum2=0;
for(int j3=0;j3<n[i3];j3++)
{
sum+=dist(mid[i3],gg[i3][j3]);
sum1+=dd(mid[i3].x,gg[i3][j3].x);
sum2+=dd(mid[i3].y,gg[i3][j3].y);
}
sd[i3]=(1/n[i3])*sum;
sc[i3].x =sqrt((1/n[i3])*sum1);
sc[i3].y =sqrt((1/n[i3])*sum2);
total+=sd[i3]*n[i3];
count+=n[i3];
}
total=total/count;
if(l==0)
break;
fenlie();
if(c>=2*k||(k+1)%2==0)
{
hebing();
}
}
} // TODO: Add your control notification handler code here
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -