a5606020 2015-08-10 03:11 采纳率: 33.3%
浏览 624

关于最近点对问题:根据点的X坐标大小排序后画出的点数减少,为什么?

我要画10个圆点,如果没有对随机生成的点进行排序的话,画出来的点数是正常的,如果排序后画出来的点数会减少,有时画6个有时画7个有时画8个,我调试了但找不出问题,请各路大神帮忙看看,谢谢!
//随机生成点集并按横坐标排序
void CClosestPointDlg::CreateLogicalPoints(int num)
{
m_picDraw.GetClientRect(&rectPicture);
while (m_lpoints.GetCount() < num)
{
CPoint p(rand() % rectPicture.Width() ,rand() % rectPicture.Height());

    if (!m_lpoints.Find(p))
    {
        m_lpoints.AddTail(p);
    }
}

CPoint p1(0,0),p2(0,0),temp_p(0,0);
//POSITION cur_pos,late_pos;
 for (int i = 0; i < m_lpoints.GetCount() - 1; i++)
        {
            POSITION cur_pos = m_lpoints.FindIndex(i);
            p1 = m_lpoints.GetAt(cur_pos);

                 for (int j = i + 1; j < m_lpoints.GetCount(); j++)
                {
                    POSITION late_pos = m_lpoints.FindIndex(j);
                    p2 = m_lpoints.GetAt(late_pos);
                    if (p1.x > p2.x)
                    {
                        temp_p = p1;
                        p1 = p2;
                        p2 = temp_p;
                        m_lpoints.SetAt(cur_pos,p2);
                        m_lpoints.SetAt(late_pos,p1);
                     }
                 }


        }

}

//画点函数
void CClosestPointDlg::DrawPoints(CList *points, COLORREF color)
{
Radius = 5;
CClientDC clientDC(this);
newBrush.CreateSolidBrush(color);
// 选择新画刷,并保存旧画刷的指针到pOldBrush

pOldBrush = clientDC.SelectObject(&newBrush);

         for (int i=0;i < points->GetCount(); i++)
                {
                    POSITION pos = points->FindIndex(i);
                    CPoint p = points->GetAt(pos);
                    clientDC.Ellipse(p.x - Radius,p.y - Radius,p.x + Radius,p.y + Radius);
                 }

        clientDC.SelectObject(pOldBrush);   
        // 删除新画刷   
        newBrush.DeleteObject();   
  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥30 这是哪个作者做的宝宝起名网站
    • ¥60 版本过低apk如何修改可以兼容新的安卓系统
    • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
    • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
    • ¥50 有数据,怎么用matlab求全要素生产率
    • ¥15 TI的insta-spin例程
    • ¥15 完成下列问题完成下列问题
    • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
    • ¥15 YoloV5 第三方库的版本对照问题
    • ¥15 请完成下列相关问题!