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;
}