给折线画平行线,试了半天硬是没搞清楚!
牧童027 2005-03-08 04:18:25 我要做一个给多段折线画平行线的程序。在看过http://dev.csdn.net/develop/article/13/13811.shtm文章后,还是搞不清楚那个角平分线方向B的COS和SIN是怎么求得的,还有那个d'也不晓得是怎么得到角平分线上的截距的,还请各位高手教教我。下面是我写的画平行线的代码,但肯定是个错的。
//画平行线
void CTest3View::DrawParallel(CDC *pDC)
{
ASSERT(pDC && pDC->GetSafeHdc());
double d = 10; //定义平行线与折线间距
double x, y, dx, dy, r, dec, b1, b2;
int i = 0;
//m_aryPoint中存放折线点集CArray<CPoint, CPoint> m_aryPoint;
if(m_aryPoint.GetSize() < 1) //若队列中的点少于一则不画
return;
x = m_aryPoint[0].x; //得到起始点
y = m_aryPoint[0].y;
pDC->MoveTo(x+d, y+d); //移DC到起始点
for(i=1; i<m_aryPoint.GetSize(); i++)
{
// dec = (y-m_aryPoint[i].y) / (x-m_aryPoint[i].x);
// b1 = (y+d) - dec*(x+d);
// b2 = (m_aryPoint[i].y) - ((-1)/dec)*(m_aryPoint[i].x);
// dx = (b2 - b1)/(dec - (-1)/dec);
// dy = (-1)/dec*dx + b2;
//
// pDC->LineTo(dx, dy);
// x = m_aryPoint[i].x, y = m_aryPoint[i].y;
dy = y - m_aryPoint[i].y; //Y方向的间距 对边
dx = m_aryPoint[i].x - x; //X方向的间距 邻边
r = sqrt(dy*dy + dx*dx); //斜边
dx = m_aryPoint[i].x + d*(-1)*(dy/r); //计算平行线X方向上的点 x0=x±d'×cosB
dy = m_aryPoint[i].y + d*(dx/r); //计算平行线Y方向上的点 y0=y±d'×sinB
pDC->LineTo(dx, dy); //画平行线
x = m_aryPoint[i].x, y = m_aryPoint[i].y; //对起始点重新赋值
}
}