| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3952 人关注过本帖
标题:请教同个数组,中间没有赋值,两次cout显示的结果不一样了?
只看楼主 加入收藏
shally_zhang
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-4-10
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
请教同个数组,中间没有赋值,两次cout显示的结果不一样了?
编写函数产生贝塞尔曲线的离散点,两次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编辑过]

2016-04-10 10:54
alice_usnet
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:18
帖 子:370
专家分:2020
注 册:2016-3-7
收藏
得分:20 
double map_xy[50][1];
没有元素map_xy[i][1],只是个垃圾数据而已

未佩好剑,转身便已是江湖
2016-04-10 11:28
shally_zhang
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-4-10
收藏
得分:0 
回复 2楼 alice_usnet
没有元素map_xy[i][1],只是个垃圾数据而已

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

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

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

2016-04-10 12:49
shally_zhang
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-4-10
收藏
得分:0 
知道了
应该声明为

double map_xy[50][2];

声明时表示的是数组维数,使用的时候才是下标,下标从0开始
2016-04-10 13:00
快速回复:请教同个数组,中间没有赋值,两次cout显示的结果不一样了?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019287 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved