196 lines
8.2 KiB
C
196 lines
8.2 KiB
C
|
/********************************************************************
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 2011<EFBFBD><EFBFBD>12<EFBFBD><EFBFBD>22<EFBFBD><EFBFBD><13:51:21>
|
|||
|
<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: PDSAlgorithm.h
|
|||
|
ԭʼ<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><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><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><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>
|
|||
|
*********************************************************************/
|
|||
|
#ifndef PDSALGORITHM_H
|
|||
|
#define PDSALGORITHM_H
|
|||
|
|
|||
|
#include <afxtempl.h>
|
|||
|
|
|||
|
//<2F>߶<EFBFBD>
|
|||
|
// <20><><EFBFBD>ཫ<EFBFBD><E0BDAB><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>εĹ<CEB5><C4B9><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>,ÿһ<C3BF><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>
|
|||
|
class CPDSSegment : public CObject
|
|||
|
{
|
|||
|
public:
|
|||
|
CList<CPoint,CPoint> m_listPoint; //ʵ<>ʵ<EFBFBD><CAB5><EFBFBD>
|
|||
|
int m_iCurveIndex; //this<69><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
// <20><><EFBFBD><EFBFBD>:<3A>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>εĹ<CEB5><C4B9><EFBFBD><EFBFBD><EFBFBD>,<2C>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD>¼thisȡ<73><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(ȡ<><C8A1>Ϊlist)
|
|||
|
BOOL m_bDirection; //=TRUE <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ, =FALSE <20><><EFBFBD><EFBFBD><EFBFBD>෴
|
|||
|
// <20><><EFBFBD><EFBFBD>:<3A>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>εĹ<CEB5><C4B9><EFBFBD><EFBFBD><EFBFBD>,<2C>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD>¼m_listPoint<6E><74>list<73>Ƿ<EFBFBD>ͷβ<CDB7><CEB2>˳<EFBFBD><CBB3><EFBFBD><EFBFBD>ͬ,
|
|||
|
// <20><>=FALSE<53><45><EFBFBD><EFBFBD>ʾm_listPoint<6E><74>ͷ<EFBFBD><CDB7>β<EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>list<73><74>β<EFBFBD><CEB2>ͷ<EFBFBD>ķ<EFBFBD><C4B7><EFBFBD>
|
|||
|
|
|||
|
int m_iIndex; //this<69><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>)<29>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>ֵ,<2C><><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD>
|
|||
|
|
|||
|
CPDSSegment(void);
|
|||
|
CPDSSegment(CList<CPoint,CPoint>& listPoint, int iCurveIndex, BOOL bDirection, int iIndex);
|
|||
|
CPDSSegment(CPDSSegment& rhs);
|
|||
|
CPDSSegment& operator=(CPDSSegment& rhs);
|
|||
|
BOOL operator==(CPDSSegment& rhs);
|
|||
|
BOOL operator!=(CPDSSegment& rhs);
|
|||
|
void Initial(void);
|
|||
|
};
|
|||
|
//typedef CList<CPDSSegment,CPDSSegment&> CPDSSegmentList;
|
|||
|
|
|||
|
class CPDSSegmentList : public CList<CPDSSegment,CPDSSegment&>
|
|||
|
{
|
|||
|
public:
|
|||
|
CPDSSegmentList& operator=(CPDSSegmentList& rhs);
|
|||
|
BOOL operator==(CPDSSegmentList& rhs);
|
|||
|
BOOL operator!=(CPDSSegmentList& rhs);
|
|||
|
CPDSSegment& operator[](int iIndex);
|
|||
|
};
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//<2F>ر<EFBFBD>˵<EFBFBD><CBB5>:
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>γɵ<CEB3><C9B5><EFBFBD><EFBFBD>ɸ<EFBFBD><C9B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|||
|
//<2F><><EFBFBD><EFBFBD>:
|
|||
|
// alCurve <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ʱҪ<CAB1><D2AA>֤ÿ<D6A4><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD>λ<EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD>ͬ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵĵ<DAB5><C4B5><EFBFBD><EFBFBD>겻ͬ
|
|||
|
// listSegment [<5B><><EFBFBD><EFBFBD>]<5D>߶<EFBFBD><DFB6><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><F2BDABB8>߶<EFBFBD><DFB6>еĵ<D0B5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>Ļ<EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD>˳ʱ<CBB3><CAB1>)
|
|||
|
// CPDSSegment::m_iCurveIndex<65><78>ʾ<EFBFBD><CABE>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>alCurve<76>еĵڼ<C4B5><DABC><EFBFBD>,<2C><>0<EFBFBD><30>ʼ
|
|||
|
// CPDSSegment::m_bDirection=TRUE<55><45>ʾ<EFBFBD><CABE>alCurve[]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ
|
|||
|
// CPDSSegment::m_iIndex<65><78>ʹ<EFBFBD><CAB9>
|
|||
|
//<2F><><EFBFBD><EFBFBD>ֵ:
|
|||
|
// =TRUE <20><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>, =FALSE <20><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>,listSegmentΪ<74><CEAA>
|
|||
|
BOOL CalculatePolygonWithMaxArea(CArray<CList<CPoint,CPoint>,CList<CPoint,CPoint> >& alCurve, CPDSSegmentList& listSegment);
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>и<EFBFBD><D0B8><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//<2F>ر<EFBFBD>˵<EFBFBD><CBB5>:
|
|||
|
// <20><><EFBFBD>и<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C>ڶ<EFBFBD><DAB6>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺύ<DDBA><E1BDBB>,<2C><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>γɵ<CEB3><C9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>,ֱ<>ӽ<EFBFBD><D3BD>м䲿<D0BC><E4B2BF><EFBFBD>οռ<CEBF><D5BC><EFBFBD>,<2C>ȼӿ<C8BC><D3BF>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
|||
|
// <20>нǰ뾶<C7B0><EBBEB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD><C7B1><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ģ<EFBFBD><C4A3><EFBFBD>и<D0B8><EEB5BD>һ<EFBFBD><D2BB>ģ<EFBFBD><C4A3>ʱ<EFBFBD>γɼ<CEB3><C9BC><EFBFBD><EFBFBD>ļн<C4BC>;
|
|||
|
//<2F><><EFBFBD><EFBFBD>:
|
|||
|
// iDPMM <20><><EFBFBD>ȷֱ<C8B7><D6B1><EFBFBD>(һ<><D2BB><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>λ<EFBFBD><CEBB>Ϊ1/iDPMM<4D><4D><EFBFBD><EFBFBD>)
|
|||
|
// alCurve <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ʱҪ<CAB1><D2AA>֤ÿ<D6A4><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD>λ<EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD>ͬ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵĵ<DAB5><C4B5><EFBFBD><EFBFBD>겻ͬ
|
|||
|
// iRadius <20>нǰ뾶,<2C><>=0<><30>ʾ<EFBFBD><CABE><EFBFBD>н<EFBFBD>
|
|||
|
// dMaxError <20><><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// alCutting [<5B><><EFBFBD><EFBFBD>]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>е<EFBFBD>ÿһ<C3BF><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DZ<EFBFBD><C7B1>и<EFBFBD><D0B8>Ĺ켣
|
|||
|
//<2F><><EFBFBD><EFBFBD>ֵ:
|
|||
|
// alCutting.GetSize()
|
|||
|
int CalculateCuttingRegion(int iDPMM, CArray<CList<CPoint,CPoint>,CList<CPoint,CPoint> >& alCurve, int iRadius, double dMaxError, CArray<CList<CPoint,CPoint>,CList<CPoint,CPoint> >& alCutting);
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>listSegment<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵĽ<DFB5><C4BD><EFBFBD>,<2C><><EFBFBD>ѽ<EFBFBD><D1BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뵽<EFBFBD><EBB5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
void DividePDSSegmentList(CPDSSegmentList& listSegment);
|
|||
|
|
|||
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>(<28><><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>߶ε<DFB6>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD><EFBFBD>,<2C><>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1)
|
|||
|
int GetPointDegree(CPoint ptPoint, CPDSSegmentList& listSegment);
|
|||
|
|
|||
|
//<2F>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>Ϊ1,<2C><>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD>ǹ<EFBFBD><C7B9><EFBFBD><EFBFBD><EFBFBD>,Ҫ<><D2AA><EFBFBD>Ƴ<EFBFBD>)
|
|||
|
void RemoveIsolateCurve(CPDSSegmentList& listSegment);
|
|||
|
|
|||
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//<2F><><EFBFBD><EFBFBD>:
|
|||
|
// listSelectSegment [<5B><><EFBFBD><EFBFBD>][<5B><><EFBFBD><EFBFBD>]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ὫlistBorderSegment<6E>еĵ<D0B5><C4B5><EFBFBD><EFBFBD>Ƴ<EFBFBD>
|
|||
|
// listBorderSegment [<5B><><EFBFBD><EFBFBD>]<5D>ܹ<EFBFBD><DCB9>γɱ߽<C9B1><DFBD>ĵ<EFBFBD><C4B5><EFBFBD>
|
|||
|
void GetMaxBorder(CPDSSegmentList& listSelectSegment, CPDSSegmentList& listBorderSegment);
|
|||
|
|
|||
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵĵ<D3B5><C4B5><EFBFBD>
|
|||
|
//<2F><><EFBFBD><EFBFBD>:
|
|||
|
// listSelectSegment [<5B><><EFBFBD><EFBFBD>][<5B><><EFBFBD><EFBFBD>]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,һ<><D2BB>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>listConnectSegment<6E><74>,<2C><><EFBFBD>Ӹ<EFBFBD><D3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD>
|
|||
|
// ptPoint <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD><EFBFBD>ڸõ<DAB8><C3B5>ĵ<EFBFBD><C4B5><EFBFBD>
|
|||
|
// listConnectSegment [<5B><><EFBFBD><EFBFBD>]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵĵ<D3B5><C4B5><EFBFBD>
|
|||
|
void GetConnectSegment(CPDSSegmentList& listSelectSegment, CPoint ptPoint, CPDSSegmentList& listConnectSegment);
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//<2F><><EFBFBD><EFBFBD>:
|
|||
|
// listConnectSegment [<5B><><EFBFBD><EFBFBD>][<5B><><EFBFBD><EFBFBD>]<5D>뵱ǰ<EBB5B1><C7B0><EFBFBD>б<EFBFBD><D0B1>ߵ<EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵĵ<D3B5><C4B5><EFBFBD>,<2C><><EFBFBD><EFBFBD>ʱ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>Ͱ<EFBFBD><CDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD>
|
|||
|
// listBorderSegment [<5B><><EFBFBD><EFBFBD>][<5B><><EFBFBD><EFBFBD>]<5D><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫʹ<D2AA><CAB9><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߷<EFBFBD><DFB7><EFBFBD>,<2C><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>β<EFBFBD><CEB2>
|
|||
|
void AddOneSegment(CPDSSegmentList& listConnectSegment, CPDSSegmentList& listBorderSegment);
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//<2F><><EFBFBD><EFBFBD>:
|
|||
|
// ptLB <20><><EFBFBD>½ǵ<C2BD>(left-bottom),<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
|
|||
|
// listConnectSegment [<5B><><EFBFBD><EFBFBD>][<5B><><EFBFBD><EFBFBD>]<5D>뵱ǰ<EBB5B1><C7B0><EFBFBD>б<EFBFBD><D0B1>ߵ<EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵĵ<D3B5><C4B5><EFBFBD>,<2C><><EFBFBD><EFBFBD>ʱ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>Ͱ<EFBFBD><CDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD>
|
|||
|
// listBorderSegment [<5B><><EFBFBD><EFBFBD>]<5D><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>β<EFBFBD><CEB2>
|
|||
|
void AddOneSegment(CPoint ptLB, CPDSSegmentList& listConnectSegment, CPDSSegmentList& listBorderSegment);
|
|||
|
|
|||
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
//<2F><><EFBFBD><EFBFBD>:
|
|||
|
// ptCenter <20><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>
|
|||
|
// listPoint <20><><EFBFBD><EFBFBD>
|
|||
|
// bAntiClockwise =TRUE <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ת,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
|
|||
|
//<2F><><EFBFBD><EFBFBD>ֵ:
|
|||
|
// <20><><EFBFBD><EFBFBD><DEB5>Ǹ<EFBFBD><C7B8><EFBFBD>
|
|||
|
//˵<><CBB5>:
|
|||
|
// <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ת,<2C><>ôҪѡ<D2AA><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5>Ǹ<EFBFBD><C7B8><EFBFBD>;<3B><>֮,Ҫѡ<D2AA><D1A1><EFBFBD><EFBFBD><EFBFBD>ұߵ<D2B1><DFB5>Ǹ<EFBFBD><C7B8><EFBFBD>
|
|||
|
CPoint GetLimitPoint(CPoint ptCenter, CList<CPoint,CPoint>& listPoint, BOOL bAntiClockwise);
|
|||
|
|
|||
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD>½ǵ<C2BD>
|
|||
|
//<2F><><EFBFBD><EFBFBD>:
|
|||
|
// listSegment <20><><EFBFBD><EFBFBD>
|
|||
|
//<2F><><EFBFBD><EFBFBD>ֵ:
|
|||
|
// <20><>,<2C><><EFBFBD>½ǵ<C2BD>.<2E><>λ:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ
|
|||
|
//˵<><CBB5>:
|
|||
|
// <20>˴<EFBFBD><CBB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>½ǵ<C2BD><C7B5><EFBFBD>ָ:yֵ<79><D6B5>С<EFBFBD><D0A1><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5>ж<EFBFBD><D0B6><EFBFBD>,<2C><>ôѡ<C3B4><D1A1>xֵ<78><D6B5>С<EFBFBD><D0A1><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|||
|
CPoint GetLeftBottomPoint(CPDSSegmentList& listSegment);
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD>нǵ<D0BD>ʵ<EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>
|
|||
|
//<2F><><EFBFBD><EFBFBD>:
|
|||
|
// iDPMM <20><><EFBFBD>ȷֱ<C8B7><D6B1><EFBFBD>(һ<><D2BB><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>λ<EFBFBD><CEBB>Ϊ1/iDPMM<4D><4D><EFBFBD><EFBFBD>)
|
|||
|
// listPoint1 <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
|||
|
// listPoint2 <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>listPoint2.GetHead()==listPoint1.GetTail()
|
|||
|
// iRadius Բ<>ǰ뾶,<2C><><EFBFBD><EFBFBD>Ϊ0
|
|||
|
// dMaxError <20><><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>Ϊ0
|
|||
|
// listArc [<5B><><EFBFBD><EFBFBD>]Բ<><D4B2>ʵ<EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>
|
|||
|
//<2F><><EFBFBD><EFBFBD>ֵ:
|
|||
|
// =TRUE <20><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>,listArc<72><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч, =FALSE <20><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>,listArcΪ<63><CEAA>
|
|||
|
BOOL CalculateArcCorner(int iDPMM, CList<CPoint,CPoint>& listPoint1, CList<CPoint,CPoint>& listPoint2, int iRadius, double dMaxError, CList<CPoint,CPoint>& listArc);
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>listSegment<6E><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵĽ<DFB5><C4BD><EFBFBD>,<2C><><EFBFBD>ѽ<EFBFBD><D1BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뵽<EFBFBD><EBB5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
void DividePDSSegmentList_New(CPDSSegmentList& listSegment);
|
|||
|
|
|||
|
//<2F><>listSegment<6E>е<EFBFBD><D0B5><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//<2F>ر<EFBFBD>˵<EFBFBD><CBB5>:
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ijЩ<C4B3><D0A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>겢<EFBFBD><EAB2A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>Ƿdz<C7B7><C7B3>ӽ<EFBFBD>,<2C><><EFBFBD><EFBFBD>IsSamePoint()=true,<2C><>ôӦ<C3B4>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
void ConnectPDSSegmentSamePoint(CPDSSegmentList& listSegment);
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD>С<EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ĵ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>ظõ<D8B8>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//<2F>ر<EFBFBD>˵<EFBFBD><CBB5>:
|
|||
|
// (1)20160507,syf,<2C><><EFBFBD>Ӹú<D3B8><C3BA><EFBFBD>
|
|||
|
// (2)<29>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD>CalculateCuttingRegion<6F><6E><EFBFBD><EFBFBD>
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
|||
|
// ptPoint <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// listSegment <20><><EFBFBD><EFBFBD>
|
|||
|
// dMaxError <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
//<2F><><EFBFBD><EFBFBD>ֵ:
|
|||
|
// <20><><EFBFBD><EFBFBD>ֵ,<2C><>0<EFBFBD><30>ʼ,<2C><>Ϊ-1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|||
|
int FindNearestPoint_WithDistance(CPoint ptPoint, CPDSSegmentList& listSegment, double dMaxError);
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>߶<EFBFBD>
|
|||
|
//<2F>ر<EFBFBD>˵<EFBFBD><CBB5>:
|
|||
|
// (1)20160507,syf,<2C><><EFBFBD>Ӹú<D3B8><C3BA><EFBFBD>
|
|||
|
// (2)<29>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD>CalculateCuttingRegion<6F><6E><EFBFBD><EFBFBD>
|
|||
|
// (3)ʵ<><CAB5><EFBFBD><EFBFBD>listSegment[].m_listPoint.GetCount()=2,ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CalculateCuttingRegion<6F><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㷨<EFBFBD><E3B7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ծ<EFBFBD><D4BE><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// (4)<29>ڲ<EFBFBD><DAB2>ҵĹ<D2B5><C4B9><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>Ե<EFBFBD><D4B5>߶εķ<CEB5><C4B7><EFBFBD>,ֻҪ<D6BB>Ƕ˵<C7B6><CBB5><EFBFBD>ͬ<EFBFBD><CDAC>Ϊ<EFBFBD><CEAA>ͬ
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
|||
|
// ptPoint1 <20>߶<EFBFBD><DFB6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// ptPoint2 <20>߶<EFBFBD><DFB6>յ<EFBFBD>
|
|||
|
// listSegment <20><><EFBFBD><EFBFBD>
|
|||
|
//<2F><><EFBFBD><EFBFBD>ֵ:
|
|||
|
// <20><><EFBFBD><EFBFBD>ֵ,<2C><>0<EFBFBD><30>ʼ,<2C><>Ϊ-1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|||
|
int FindSameSegment_2P(CPoint ptPoint1, CPoint ptPoint2, CPDSSegmentList& listSegment);
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߾<EFBFBD><DFBE><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//<2F>ر<EFBFBD>˵<EFBFBD><CBB5>:
|
|||
|
// (1)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9><EFBFBD><EFBFBD>,Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>V10<31>汾<EFBFBD><E6B1BE><EFBFBD>к<EFBFBD>,һ<><D2BB>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѷ<EFBFBD><D1B7>а汾<D0B0><E6B1BE><EFBFBD><EFBFBD>,<2C>м<EFBFBD>!!!!
|
|||
|
// (2)ֻҪlistCurve.GetCount() >= 2,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>true
|
|||
|
// (3)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ,<2C><><EFBFBD>ݺ궨<DDBA><EAB6A8>F_MAX_TANGENT_ERROR<4F><52>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>,һ<><D2BB><EFBFBD>궨<EFBFBD>屻<EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB>ı<EFBFBD>
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
|||
|
// iDPMM <20>ֱ<EFBFBD><D6B1><EFBFBD>
|
|||
|
// listCurve <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>false;<3B><><EFBFBD><EFBFBD>ͷβ<CDB7><CEB2><EFBFBD><EFBFBD>ͬ,<2C><>ô<EFBFBD><C3B4><EFBFBD>ն<EFBFBD><D5B6><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD>
|
|||
|
// ptFrom <20><>,<2C>Ӹõ㿪ʼ<E3BFAA><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;<3B><><EFBFBD><EFBFBD><EFBFBD>õ㲻<C3B5><E3B2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߷<EFBFBD><DFB7><EFBFBD>,<2C><><EFBFBD>ձ<EFBFBD>֤(ptFrom,ptTangency)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߷<EFBFBD><DFB7><EFBFBD>
|
|||
|
// bTangentPrev =true ָ<><D6B8>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,=false ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>̷<EFBFBD><CCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// dLength <20><><EFBFBD>߳<EFBFBD><DFB3><EFBFBD>,<2C><><EFBFBD><EFBFBD>Ϊ0,ʹ<><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
|||
|
// ptFixPoint <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ptFrom<6F><6D><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>,һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(δ<><CEB4><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ڲ<EFBFBD>)
|
|||
|
// ptTangent <20>е<EFBFBD>
|
|||
|
//<2F><><EFBFBD><EFBFBD>ֵ:
|
|||
|
// =true <20><><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>,=false <20><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|||
|
BOOL CalculateTangentPD(int iDPMM, CList<CPoint,CPoint>& listCurve, CPoint ptFrom, BOOL bTangentPrev, double dLength, CPoint& ptFixPoint, CPoint& ptTangent);
|
|||
|
|
|||
|
#endif //PDSALGORITHM_H
|