nd == d3[i];..............这是怎么在写。。

解决方案 »

  1.   

    多出几条,说明你坐标计算有错误,FOR循环也有错误
      

  2.   

    具体错在哪里,自己打断点,看看FOR循环后的数组里面数据对不对
      

  3.   

    可是我测试的时候,point1和point数组中的数值一模一样的啊!
      

  4.   

    不可能float和int怎么可能一样
      

  5.   

    我测试过了,循环结束之后的数组值,就是:
    ((float)487.33, (float)263.0);
    ((float)406.0, (float)154.777771);
    ((float)284.0, (float)263.0);
    ((float)406.0, (float)358.4902);
    这四个点,没有错啊,我是想在那里会出现原点呢,
    因为我画了六个闭合曲线,都是这样,都会生出一条曲线,连到(0,0),而且,我单步测试了,不是数组循环的问题.
      

  6.   

    而且,采用:
        PointF[] pointf = {point1[0],point1[1],point1[2],point1[3]};
        g.DrawClosedCurve (redPen,pointf);
    可以是一个正常的闭合曲线;
    如果采用:
        PointF[] pointf = point1;
        g.DrawClosedCurve (redPen,pointf);
    就还是老样子,连到长出一条曲线,连到(0,0);
    point1是我前面定义的数组;
      

  7.   

    public void drawqx(double[] d1,double[] d2,double[] d3,double xyd,double yyd)
    {
    //计算给个点的相对坐标;
    PointF[] point1 = new PointF [d1.Length/6 ];
    double nd = d3[0];
    int i=0;
    Graphics g =  this.CreateGraphics ();
    for(int j = 0; nd == d3[i];j++)
    {
    if(d1[i]>0)
    {
    d1[i] = xyd + (d1[i]*tranx/xzb);
    }
    else if(d1[i] == 0)
    {
    d1[i] = xyd;
    }
    else
    {
    d1[i] = xyd - Math.Abs (d1[i])*tranx/xzb ;
    }
    if(d2[i]>0)
    {
    d2[i] = yyd - d2[i]*trany/yzb ;
    }
    else if(d2[i] == 0)
    {
    d2[i] = yyd;
    }
    else
    {
    d2[i] = yyd + (Math.Abs (d2[i])*trany/yzb);
    }
    point1[j] = new PointF ( (float)(d1[i]) ,(float)(d2[i]) ); i++;
    }
    g.DrawClosedCurve (bluePen,point1);
    }
      

  8.   

    d1、d2、d3分别放的是x、y和绘制浓度等高线的浓度n 三组数据;
     xyd,yyd就是转换后的原点坐标;
      

  9.   

    for(int j = 0; nd == d3[i];j++)这里肯定有问题你换种方式写啊,数据一样画出来的图绝对也是一样的
      

  10.   

    for(int j = 0; j<4;j++)运行还是一样的
    不是这个问题啦,我运行过了,输出的point1的值我一个一个算过了,
    是不是和ONPAIN函数有关啊
      

  11.   

    point1就是上面的循环产生的;
    PointF[] pointf = {point1[0],point1[1],point1[2],point1[3]};
    g.DrawClosedCurve (bluePen,pointf);
    可以正常画出一个圈;
    PointF[] pointf2 =point1;
    g.DrawClosedCurve (redPen,pointf2);
    这个就是多出一条曲线;
      

  12.   

    是不是point1[j] = new PointF ( (float)(d1[i]) ,(float)(d2[i]) );这种添加方式不对呢?
      

  13.   

    for(int j = 0; j<4;j++)运行还是一样的
    不是这个问题啦,我运行过了,输出的point1的值我一个一个算过了,
    是不是和ONPAIN函数有关啊
    这个是不可能的,一是你FOR循环里面出了问题,二是你其它代码有问题
      

  14.   

    问题是我接着在这个循环体之后就运行了:
    point1就是上面的循环产生的;
    PointF[] pointf = {point1[0],point1[1],point1[2],point1[3]};
    g.DrawClosedCurve (bluePen,pointf);
    可以正常画出一个圈;
    PointF[] pointf2 =point1;
    g.DrawClosedCurve (redPen,pointf2);
    这个就是多出一条曲线;
    如果其他代码有问题,怎么可以正常显示呢?
      

  15.   

    我做图形都是用 处理动态交互图形软件做 你参考下   http://www.visual-graph.com
      

  16.   

    各位我知道为什么会出现上述情况了,我每次运行之后,OnPaint 函数会运行两次,因此多出一组数据,和(0,0)点;
    要怎么释放空间才可以使OnPaint 函数只运行一次呢?