You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

169 lines
4.9 KiB
C

1 month ago
/************************************************************
* @file dfDimension.h interface for the CDimensionBase class
* @
* @version 1.0
* @date 2011-2012
************************************************************/
#if !defined(AFX_DFDIMENSION_H__D81A67B5_D88D_48E3_B66E_A78E2BB1E081__INCLUDED_)
#define AFX_DFDIMENSION_H__D81A67B5_D88D_48E3_B66E_A78E2BB1E081__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <afxtempl.h>
#include <atlimage.h>
#include "colorBase.h"
#include "curve.h" // Added by ClassView
#include "plane.h" // Added by ClassView
#include ".\grid.h"
/************************************************************************
CDimensionBase <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|---|---|-
|---|---|-
|---|---|-
<EFBFBD><EFBFBD> ÿһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD>϶<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>CLink<EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>m_link[i]<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD>ϵ;
<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD>*u<EFBFBD><EFBFBD>.
************************************************************************/
namespace NContour
{
/** @brief CLink<6E><EFBFBD><E0A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼ij<C2BC><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD>ϵ*/
class CLink
{
public:
CLink();
virtual ~CLink();
int Create(int n);
void Reverse(int n);
void Read(char *&fr, int n);
void Read(int &fr, int n);
void Write(int &fw,int n);
void Read(CFile &fr, int n);
void Write(CFile &fw,int n);
void Serialize(CArchive& ar, int n);
void operator=(CLink& lk);
int n; ///< w<><77><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
double *w; ///< <20><><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD>ϵ
};
class AFX_EXT_CLASS CDimensionBase : public CGrid
{
public:
CDimensionBase();
virtual ~CDimensionBase();
/** @brief <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>bBinary<72><79>ʾ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ӳ<EFBFBD><EFBFBD><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٱ<EFBFBD><D9B1><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE>*u */
int Read(char *pData, bool bMapping = false);
int ReadHead(CString m_input);
int WriteHead(int &fw);
void WriteText2D(CString m_output);
void WriteText(CString m_output);
virtual CGrid* CloneObject(void); //<2F><>¡<EFBFBD>Լ<EFBFBD>
virtual void Serialize(CArchive& ar, const short& ver); //F(x,y)
/** @brief <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD> */
int Read(CString m_input); //F(x,y)
int Write(CString m_output); //F(X,Y)
int Read(int& fr); //F(x,y)
int Write(int& fw); //F(X,Y)
virtual void Write(CFile& fw); //F(x,y)
virtual int Read(CFile& fr); //F(X,Y)
virtual int CreateDimension(int dn); //ָ<><D6B8>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>link_offset<65><74><EFBFBD><EFBFBD>(dn+dn)<29><>ip<69><70><EFBFBD><EFBFBD>(dn)
/** @brief <20>Ӹ<EFBFBD><D3B8><EFBFBD><EFBFBD>̳еĺ<D0B5><C4BA><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>,
ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>k<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵΪ(u[k]+valuelink[k] * smooth_coe)/(1+smooth_coe) smooth_coe Ϊ<EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD><EFBFBD>*/
virtual void Smooth(double smooth_coef = 1.0);
/** @brief <20>õ<EFBFBD><C3B5><EFBFBD>ά<EFBFBD><CEAC>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>*/
void GetLinkOffset();
/** @brief <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*ip(<28><>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊip[0],ip[1]...)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
int GetLocation(int *ip);
/** @brief ip[m_dim] <20><><EFBFBD><EFBFBD>1*/
void AddLocation(int *&ip,int m_dim);
void Empty(); //<2F><><EFBFBD><EFBFBD>
/** @brief <20>ж<EFBFBD><75>Ƿ<EFBFBD>Ϊ<EFBFBD>ڴ<EFBFBD>ӳ<EFBFBD><D3B3>*/
bool IsDataMapping();
int CreateFromTransfer(CDimensionBase &m_dim);
/** @brief <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ά<EFBFBD><CEAC>Ϊn<CEAA><6E><EFBFBD><EFBFBD><EFBFBD>񣬸<EFBFBD><F1A3ACB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>num[i],<2C><>ʼλ<CABC><CEBB>P0[i]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>delt[i] */
int Create(int n,CArray<int,int> &num,CArray<double,double> &P0,CArray<double,double> &delt);
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD>úõIJ<C3B5><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>total, link_offset[i]<5D><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>m_link */
int Create();
int Create1();
int Create(int n,int *num);
/** @brief <20><><EFBFBD><EFBFBD>m_link[k] m_link[k].w = new double[n+n] */
void CreateLink(int k);
/** @brief ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD>CLink*/
void EmptyLink(void);
void operator=(CDimensionBase& db);
double operator =(double *m_dim);
/** @brief <20><>ֵ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ */
double Value(double *m_dim, bool bIsXY = TRUE);
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>k<EFBFBD><6B>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>Ϊ<EFBFBD><CEAA>Ч<EFBFBD><EFBFBD><E3A3AC>Ч<EFBFBD><D0A7>Ϊ<EFBFBD><CEAA>Ч<EFBFBD><D0A7>*/
double ValueReverse(int k);
/** @brief ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD>ϵ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>k<EFBFBD><6B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڰ˸<DAB0><CBB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵļ<CFB5>Ȩƽ<C8A8><C6BD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǵڶ<C7B5><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ӱ<EFBFBD><D3B0>*/
double ValueLink(int k);
/** @brief <20><>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD>ϵ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>k<EFBFBD><6B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD>Ȩƽ<C8A8><C6BD>*/
double ValueUnlink(int k );
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><6A><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD>ֵ*/
double Value(double *m_dim,/*int *ip,*/int j);
double Differential(double* m_dim, int d);
void Extrenum(double &min,double &max);
/*
| w[1] T(i,j)
w[2] |
-------o------w[0]
K|
| w[3] */
/** @brief <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ĵ<EFBFBD>K<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>i,j<><6A><EFBFBD>ͶԽǵ㣨i,j<><6A><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
int IsLink(int k, int i, int j);
/** @brief <20>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Χ,<2C><><EFBFBD><EFBFBD>ֵΪ<D6B5><CEAA>Чֵ<D0A7>ĸ<EFBFBD><C4B8><EFBFBD> */
int GetRange(double minValidValue=-1e100, double maxValidValue=1e100);
void _Write(FILE *&fw, dfPoint &t);
double *u; ///< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC>total<61><6C>
CLink **m_link; ///< <20><>total<61><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼ÿ<C2BC><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD>ϵ<EFBFBD><CFB5>m_link[i]<5D><>*w<><77><EFBFBD><EFBFBD>n+n<><6E><EFBFBD><EFBFBD>i<EFBFBD>к<EFBFBD>j<EFBFBD><6A> <20><><EFBFBD><EFBFBD>CFunction2D<32>
int *link_offset; ///< Ϊ<><CEAA>ά<EFBFBD>ȵ<EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD>άƫ<CEAC><C6AB><EFBFBD><EFBFBD>Ϊlink_offset[0]*num[0]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;<3B><>n+n<><6E><EFBFBD><EFBFBD>n+1<><31>2nΪǰn<C7B0><6E><EFBFBD>ĸ<EFBFBD>ֵ
int total; ///< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
double m_mininum;
void InitMininum(bool bGetRange = true); ///< Ϊ<><CEAA><EFBFBD>ϸ<EFBFBD>ʽ<EFBFBD>е<EFBFBD>m_mininum<75><6D><EFBFBD><EFBFBD>
double z;
int* ip; ///< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ijһ<C4B3><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>õĸ<C3B5>ά<EFBFBD><CEAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
private:
bool m_IsUMapping; ///< <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD>ڴ<EFBFBD>ӳ<EFBFBD><EFBFBD><E4A3AC><EFBFBD>ǣ<EFBFBD><C7A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>empty()<29><>ɾ<EFBFBD><C9BE>
};
};
using namespace NContour;
#endif // !defined(AFX_DFDIMENSION_H__D81A67B5_D88D_48E3_B66E_A78E2BB1E081__INCLUDED_)