注册 登录
编程论坛 C++教室

请教同个数组,中间没有赋值,两次cout显示的结果不一样了?

shally_zhang 发布于 2016-04-10 10:54, 4069 次点击
编写函数产生贝塞尔曲线的离散点,两次cout 显示结果不一样。

比如说
第一次显示x=0,y=0.
第二次显示x=0,y=0.11608

调试发现结果在第11行调用cout的时候y变了,其中第8行和第11行间,没有对数组进行任何操作。
附上代码
程序代码:

void sol2()  //根据曲线,求曲线上的m个点  
{  
    int i;  //产生50个离散的点
     
    for(i=0;i<m;i++)  
    {
           sol3((double)i/(double)m);  
       std::cout<<"loop="<<i <<"       x="<<map_xy[i][0]<<"     y="<<map_xy[i][1]<<std::endl;//第8行
    }
    i=0;
    std::cout<<"loop="<<i <<"       x="<<map_xy[i][0]<<"     y="<<map_xy[i][1]<<std::endl;//第11行
}  


下面是完整代码

程序代码:

#include "stdafx.h"
#include<math.h>
#include"iostream "

 
#define N 1000
double map_xy[50][1];//保存50个坐标点,0开始编号


 int map_loop;//记录坐标保存进度,大循环次数
int m=50;//产生曲线上的M个点
struct point  //控制点的坐标  
{  
    double x;  
    double y;  
}point[N];

 

 

 
  void init()  //输入控制点的坐标  
{  
    int i=4;//三阶贝塞尔曲线

 
   
//输入四个控制曲线的点
     
    point[0].x=0;
    point[0].y=0;

 
    point[1].x=5;
    point[1].y=5;

 
    point[2].x=50;
    point[2].y=50;

 
    point[3].x=55;
    point[3].y=55;
     
}  

 
void sol1(double t)  //计算Bezier曲线上点的坐标  
{  
    double x=0,y=0,Ber;

 
    int k;  
    int cor;
    int n=4;//三阶Bezier
     
    for(k=0;k<4;k++)  
    {  
        switch(k)
        {
        case 0:cor=1;
        case 1:cor=3;
        case 2:cor=3;
        case 3:cor=1;
        }

 
        Ber=cor*pow(t,k)*pow(1-t,n-1-k);  
        x=x+point[k].x*Ber;  
        y=y+point[k].y*Ber;  

 
    }  
    //int tan_angle;
    map_xy[map_loop][0]=x;
    map_xy[map_loop][1]=y;
      
     
     map_loop= map_loop+1;
}   

 
void sol2()  //根据曲线,求曲线上的m个点  
{  
    int i;  //产生50个离散的点
     
    for(i=0;i<m;i++)  
    {
    sol3((double)i/(double)m);  
    std::cout<<"loop="<<i <<"            x="<<map_xy[i][0]<<"         y="<<map_xy[i][1]<<std::endl;
    }
    i=0;
    std::cout<<"loop="<<i <<"            x="<<map_xy[i][0]<<"         y="<<map_xy[i][1]<<std::endl;
}  

 
int main(int argc, char **argv)
{

 
     init();  
     map_loop=0;//初始化大循环次数
     sol2();
     
    system("pause");
}


[此贴子已经被作者于2016-4-10 11:28编辑过]

3 回复
#2
alice_usnet2016-04-10 11:28
double map_xy[50][1];
没有元素map_xy[i][1],只是个垃圾数据而已
#3
shally_zhang2016-04-10 12:49
回复 2楼 alice_usnet
没有元素map_xy[i][1],只是个垃圾数据而已

什么意思呢,应该怎么改?

是map_xy[i][1]没声明正确?还是没有赋值?

[此贴子已经被作者于2016-4-10 12:54编辑过]

#4
shally_zhang2016-04-10 13:00
知道了
应该声明为

double map_xy[50][2];

声明时表示的是数组维数,使用的时候才是下标,下标从0开始
1