|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//<2F>ļ<EFBFBD>: SegY<67>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>:
|
|
|
|
|
|
// ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD>ת<E0BBA5><D7AA>
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д: 2011-4-1
|
|
|
|
|
|
//
|
|
|
|
|
|
//
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
#include "RowCol.h"
|
|
|
|
|
|
#include "TInterval.h"
|
|
|
|
|
|
|
|
|
|
|
|
namespace NCube
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
//ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD>ת<E0BBA5><D7AA>
|
|
|
|
|
|
class AFX_EXT_CLASS CCoorTransform
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CCoorTransform(void);
|
|
|
|
|
|
~CCoorTransform(void);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>x<EFBFBD><78>y<EFBFBD><79>Ϊ<EFBFBD><CEAA><EFBFBD>꣬<EFBFBD><EAA3AC><EFBFBD><EFBFBD>m<EFBFBD><6D>n<EFBFBD><6E>Ϊ<EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD>
|
|
|
|
|
|
bool Create( double x1, double y1, double m1, double n1,
|
|
|
|
|
|
double ddx, double ddy, double angle );
|
|
|
|
|
|
//<2F><><EFBFBD>ݶ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>(<28><><EFBFBD><EFBFBD>Уλ)
|
|
|
|
|
|
bool Create(
|
|
|
|
|
|
double x1, double y1, double m1, double n1,
|
|
|
|
|
|
double x2, double y2, double m2, double n2 );
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>ݶ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>(<28><><EFBFBD><EFBFBD>Уλ)
|
|
|
|
|
|
bool Create(
|
|
|
|
|
|
double x1, double y1, double m1, double n1,
|
|
|
|
|
|
double x2, double y2, double m2, double n2,
|
|
|
|
|
|
double x3, double y3, double m3, double n3 );
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD> max inline
|
|
|
|
|
|
// 2---------------------------
|
|
|
|
|
|
// | |
|
|
|
|
|
|
// | | max
|
|
|
|
|
|
// | |crossline
|
|
|
|
|
|
// | |
|
|
|
|
|
|
// | |
|
|
|
|
|
|
// 1---------------------------3
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//!< <20><><EFBFBD>ñ任<C3B1><E4BBBB>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߺ<EFBFBD><DFBA><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ߺ<EFBFBD><DFBA><EFBFBD>ͬ
|
|
|
|
|
|
//!< c0<63><30>c1<63><31>c2Ϊʵ<CEAA><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣬<EFBFBD><E3A3AC>Ӧ<EFBFBD><D3A6><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊrc0<63><30>rc1<63><31>rc2(rc0.row,col2)
|
|
|
|
|
|
bool set3Points(
|
|
|
|
|
|
const CPoint2D& c0, const CPoint2D& c1, const CPoint2D& c2,
|
|
|
|
|
|
const CRowCol& rc0, const CRowCol& rc1, int col2 );
|
|
|
|
|
|
|
|
|
|
|
|
//!< <20>ߵ<EFBFBD><DFB5><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
|
|
|
|
|
void toXY(const CRowCol& rc, CPoint2D& pt);
|
|
|
|
|
|
void toXY(int row, int col, double&x, double& y);
|
|
|
|
|
|
void toXY(double row, double col, double&x, double& y);
|
|
|
|
|
|
CPoint2D toXY(const CRowCol& rc);
|
|
|
|
|
|
CPoint2D toXY(int row, int col);
|
|
|
|
|
|
CPoint2D toXY(double row, double col);
|
|
|
|
|
|
|
|
|
|
|
|
//!< <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD>
|
|
|
|
|
|
void toRC(const CPoint2D& pt, CRowCol& rc);
|
|
|
|
|
|
void toRC(double x, double y, int& row, int& col);
|
|
|
|
|
|
CRowCol toRC(const CPoint2D& pt);
|
|
|
|
|
|
CRowCol toRC(double x, double y);
|
|
|
|
|
|
|
|
|
|
|
|
//!< <20><><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
|
|
|
|
|
CRowCol TransformBack(const CPoint2D& coord,
|
|
|
|
|
|
const TIntervalStep<int>* inlrg=0,
|
|
|
|
|
|
const TIntervalStep<int>* crlrg=0 ) const;
|
|
|
|
|
|
/*!< Transforms Coord to RowCol. If the ranges are
|
|
|
|
|
|
given, they are only used for snapping: the actual range is not used */
|
|
|
|
|
|
|
|
|
|
|
|
CPoint2D TransformBackNoSnap(const CPoint2D& coord) const;
|
|
|
|
|
|
/*!< transforms back, but does not snap. The row is stored in the x-component, and the
|
|
|
|
|
|
col is stored in the y-component. */
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void WriteLine(LPCTSTR lpszFileName, TIntervalStep<int> row, TIntervalStep<int> col);
|
|
|
|
|
|
|
|
|
|
|
|
void Write(CFile& fw);
|
|
|
|
|
|
int Read(CFile& fr);
|
|
|
|
|
|
void Serialize(CArchive& ar, const short &ver);
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
//!<Sets up the transform using three points. note that the third point is
|
|
|
|
|
|
//assumed to be on the same row as the first point.
|
|
|
|
|
|
struct RCTransform
|
|
|
|
|
|
{
|
|
|
|
|
|
RCTransform() { a = b = c = 0; }
|
|
|
|
|
|
|
|
|
|
|
|
inline double det( const RCTransform& bct ) const
|
|
|
|
|
|
{
|
|
|
|
|
|
return b * bct.c - bct.b * c;
|
|
|
|
|
|
}
|
|
|
|
|
|
inline bool valid( const RCTransform& bct ) const
|
|
|
|
|
|
{
|
|
|
|
|
|
double d = det( bct );
|
|
|
|
|
|
return !mIsZero(d, 1e-10);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
double a, b, c;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
void setTransforms( const RCTransform& x,const RCTransform& y ) { xtr = x; ytr = y; }
|
|
|
|
|
|
const RCTransform& getTransform( bool x ) const { return x ? xtr : ytr; }
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
RCTransform xtr;
|
|
|
|
|
|
RCTransform ytr;
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
//<2F>γɱ任<C9B1>Ķ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>
|
|
|
|
|
|
CPoint2D m_pt[3];
|
|
|
|
|
|
CRowCol m_rc[3];
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
}//namespace
|