请教同个数组,中间没有赋值,两次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编辑过]