www.pudn.com > ksqx.rar > KSQXClass.cpp


////////////////////////////////////////////////////////////////////// 
// KSQXClass.cpp: implementation of the KSQXClass class. 
//扣氏曲线类定义 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include "KSQX.h" 
#include "KSQXClass.h" 
 
#include "math.h" 
 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
KSQXClass::KSQXClass()			//构造函数 
{ 
	m_limit = 1.0f; 
} 
 
KSQXClass::~KSQXClass()			//析构函数 
{ 
 
} 
////////////////////////////////////////////////////////////////////// 
// 划线函数 
////////////////////////////////////////////////////////////////////// 
 
void KSQXClass::Draw(CDC* pdc, KSQXPoint p1, KSQXPoint p2) 
{ 
	float ds;//2点间距离 
	float dx, dy; 
	dx = p2.m_x - p1.m_x; 
	dy = p2.m_y - p1.m_y; 
	ds = (float)sqrt(dx * dx + dy * dy); 
 
	if(ds <= m_limit) 
	{ 
		pdc->MoveTo((int)p1.m_x, (int)p1.m_y); 
		pdc->LineTo((int)p2.m_x, (int)p2.m_y); 
		return; 
	} 
 
	float tempdx1, tempdy1; 
	float tempdx2, tempdy2; 
	tempdx1 = (ds / 3) * (dx / ds); 
	tempdy1 = (ds / 3) * (dy / ds); 
	tempdx2 = (ds * 2 / 3) * (dx / ds); 
	tempdy2 = (ds * 2 / 3) * (dy / ds); 
 
	KSQXPoint tempp1, tempp2; 
	tempp1.m_x = p1.m_x + tempdx1; 
	tempp1.m_y = p1.m_y + tempdy1; 
	tempp2.m_x = p1.m_x + tempdx2; 
	tempp2.m_y = p1.m_y + tempdy2; 
 
	float middx, middy; 
	middx = ds * (float)0.5 * (float)(dx / ds); 
	middy = ds * (float)0.5 * (float)(dy / ds); 
 
	KSQXPoint midp; 
	midp.m_x = p1.m_x + middx; 
	midp.m_y = p1.m_y + middy; 
 
	float dx1, dy1; 
	dx1 = -dy; 
	dy1 = dx; 
	float ds1; 
	ds1 = (float)sqrt(dx1 * dx1 + dy1 * dy1);		//or ds1 = ds 
	float tempdx3, tempdy3; 
	tempdx3 = (ds * (float)(sqrt(3.0) / 6)) * (dx1 / ds1); 
	tempdy3 = (ds * (float)(sqrt(3.0) / 6)) * (dy1 / ds1); 
	KSQXPoint tempp3; 
	tempp3.m_x = midp.m_x + tempdx3; 
	tempp3.m_y = midp.m_y + tempdy3; 
 
	Draw(pdc, p1, tempp1); 
	Draw(pdc, tempp1, tempp3); 
	Draw(pdc, tempp3, tempp2); 
	Draw(pdc, tempp2, p2); 
 
	return; 
}