我现在有一系列点坐标
xmin = 60471.15992324;
xmax = 63729.7432062032;
ymax = 333776.096135623;
ymin = 328385.941204131;
我该选用什么映射模式,该如何设置setwindoworg和setviewportorg?
怎么我画出来的总感觉是变形了的?
如何解决精度问题?GDI那些画图不都是int型的么?

解决方案 »

  1.   

    给段代码,这是把x=-1.0—1.0,y=-1.0—1.0的范围放到的客户区。你可以用相似的方法把坐标缩小到客户区。不用SetMapMode()什么的。
    CPen Pen(PS_INSIDEFRAME, 2, RGB(0, 255, 0));
    CPen *pPenOld = pDC->SelectObject(&Pen);
    double A = 87.56;
    double A1 = 1.0 / A;
    double u = 255;
    CRectrcClient;
    GetClientRect(rcClient);
    double xR = (double)rcClient.Width() / 2.0;
    double yR = (double)rcClient.Height() / 2.0;
    int xPos, yPos;
    double x = -1.0, y = -1.0;
    xPos = (int)((x + 1.0) * xR);
    yPos = (int)((1.0 - y) * yR);
    pDC->MoveTo(xPos, yPos);
    for(x = -1.0; x < 1.0; x +=0.01)
    {
        if ((abs(x) > 0.0) && (abs(x) < A1) && (x < 0.0))
            y = -A * x / (1 + log(A));
        else if (abs(x) > 0.0 && abs(x) < A1 && x > 0.0)
            y = A * x / (1 + log(A));
        else if (abs(x) > A1 && abs(x) < 1.0 && x > 0.0)
            y =(1 + log(A * abs(x))) / (1 + log(A));
        else if (abs(x) > A1 && abs(x) < 1.0 && x < 0.0)
            y = -(1 + log(A * abs(x))) / (1 + log(A));
        xPos = (int)((x + 1.0) * xR);
        yPos = (int)((1.0 - y) * yR);
        pDC->LineTo(xPos, yPos);
    }
    x = 0.0;
    y = 0.0;
    xPos = (int)((x + 1.0) * xR);
    yPos = (int)((1.0 - y) * yR);
    pDC->MoveTo(xPos, yPos);
    pDC->SelectObject(pPenOld);
    Pen.DeleteObject();
    Pen.CreatePen(PS_INSIDEFRAME, 2, RGB(255,0,0));
    pPenOld = pDC->SelectObject(&Pen);
    for(x = 0.0; x < 1.0; x +=0.01)
    {
        y = log(1 + u * x) / log(1 + u);
        xPos = (int)((x + 1.0) * xR);
        yPos = (int)((1.0 - y) * yR);
        pDC->LineTo(xPos, yPos);
    }
    pDC->SelectObject(pPenOld);
    Pen.DeleteObject();
      

  2.   

    xx6
    待会试试你的方法
    我现在图是画出来了
    CRect rect;
    GetClientRect(rect);
    pDC->SetMapMode(MM_ISOTROPIC);
    pDC->SetWindowExt((int)(pDoc->xmax-pDoc->xmin),(int)(pDoc->ymax-pDoc->ymin));
    pDC->SetViewportExt(rect.right,-rect.bottom);
    pDC->SetWindowOrg(pDoc->xmin,pDoc->ymin);
    pDC->SetViewportOrg(0,rect.bottom);
    这样是没变形,但是图就显示在左边了,不晓得怎样弄的居中显示?
    还有用你的方法,之后做放大缩小操作容易么?
      

  3.   

    修改以下的值SetWindowOrg或SetViewportOrg,如
    pDC->SetViewportOrg((rect.right+rect.left)/2,(rect.bottom+rect.top)/2);
      

  4.   

    如何设置setwindoworg和setviewportorg这和图形变不变,没有关系的
    这只是原点在什么地方而已
    pDC->SetViewportOrg((rect.right+rect.left)/2,(rect.bottom+rect.top)/2);