jx,jy 表示计算机中的屏幕坐标!
x,y 表示实际坐标!屏幕的坐标的范围是: (0,0,jmaxX-1,jmaxY-1)
我们在屏幕中间画个十字,由来表示实际坐标的x和y轴,那么,
屏幕中的点 (jmaxX/2,jmaxY/2) 就为实际坐标的原点。我们给计算机原点jx0,和jy0赋值: jx0 := jmaxX div 2, jy0 := jmaxY div 2;再知道实际x,y的范围: 
  x = -maxX .. maxX 
  y = -maxY .. maxY现实中到计算机屏幕的比例为: 
  X的比例:maxX*2 : jmaxX 
  Y的比例:maxY*2 : jmaxY现实中的点 x1,y1 到屏幕中的点的值为:
 jx1 := jx0 - (jmaxX*x1)/(maxX*2);
 jy1 := jy0 - (jmaxY*y1)/(maxY*2);

解决方案 »

  1.   

    不好意思,后面那个有点错了,应该是加(+):
    jx1 := jx0 + (jmaxX*x1)/(maxX*2);
    jy1 := jy0 + (jmaxY*y1)/(maxY*2);
      

  2.   

    同样可以推出屏幕的点到现实中坐标为: 
    x1 := (jx1-jx0)*(maxX*2/jmaxX);
    y1 := (jy1-jy0)*(maxY*2/jmaxY);
      

  3.   

    非常不好意思,太大意了!
    Y坐标应该是减(-);jx1 := jx0 + (jmaxX*x1)/(maxX*2);
    jy1 := jy0 - (jmaxY*y1)/(maxY*2);x1 := (jx1-jx0)*(maxX*2/jmaxX);
    y1 := (jy0-jy1)*(maxY*2/jmaxY);这个我已经验证,没有问题,可以在你的程序中正常使用。
      

  4.   

    //X, Y 是中心点的坐标
    SetViewportOrgEx(Canvas.Handle, X, Y, nil);
    SetWindowExtEx(Canvas.Handle, 1, 1, nil);
    SetViewportExtEx(Canvas.Handle, 1, -1, nil);