求教MFC画弧碰到的问题

yidao3504 2011-11-29 09:08:27
我把一个图形分解成弧(CArc类)和直线(CLine类),CArc和CLine从CGeometry派生,把构成图形的CArc和CLine指向基类的指针添加到m_GeoVector中。

为什么构造弧的时候会莫名的添加几条没画出来的直线呢?以下是封装的CArc和添加到m_GeoVector的代码:
void CArc::Draw(CZoomDC *pDC)
{
CRect rect(int(m_x1), int(m_y1), int(m_x2), (int)m_y2);
CPoint point1(int((m_x1 + m_x2) / 2), int(m_y1));
CPoint point3(int(m_x2), int((m_y1 - m_y2) / 2 + m_y2));
CPoint point4(int(m_x1), int((m_y1 - m_y2) / 2 + m_y2));
if(m_flag == 0.25)
{
pDC->Arc(rect,point3,point1);
}
if(m_flag == -0.25)
{
pDC->Arc(rect,point1,point4);
}
}


double y7 = y2 - (y2 - m_MomThick / 2) * 2;
pGeometry = new CArc(x2 - m_HL, -y2, x2 + m_HL, -y7, -0.25);
pGeometry->m_GType = CGeometry::GT_EDGE;
m_GeoVector.push_back(pGeometry);
lx = x2 - m_HL;
...全文
110 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yidao3504 2011-12-31
  • 打赏
  • 举报
回复
谢谢,结贴
战在春秋 2011-12-04
  • 打赏
  • 举报
回复
浮点数在计算机中并不是精确存储的,总有或大或小的误差,一般判断相等的时候,都是求两者之差的绝对值小于某个范围就认为这两个数相等,至于这个范围的选取得根据你实际的情况来进行。
Eleven 2011-12-01
  • 打赏
  • 举报
回复
浮点数不能这样判断的,有精度问题
一般是if(m_flag - 0.25 < xxx)(xxx为你指定的数,比如xxx为0.001,如果m_flag-0.25小于0.001的话,就认为近似相等,if条件成立了
用户 昵称 2011-12-01
  • 打赏
  • 举报
回复
if(m_flag == 0.25)

if(m_flag == -0.25)

这些判断也许并不会特别准的。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧