| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1039 人关注过本帖
标题:随机游走问题。程序有错误。
只看楼主 加入收藏
李若斌
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:219
专家分:184
注 册:2009-9-30
结帖率:90.48%
收藏
已结贴  问题点数:100 回复次数:7 
随机游走问题。程序有错误。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#define PI 3.14159265
#define PP(a) (PI*a/180)
void main()
{
  int i,box1,box2,box3,box4,k,Direction;
  float x,y;
  box1=box2=box3=box4=0;
  srand((unsigned)time(NULL));
  for(i=1;i<=10000;i++)
  {  x=y=0.0;
     k=0;
     while(k++<500)
      {
        Direction=rand()%16;
        if(y>=50)   Direction+=8;
        if(y<=-50)  Direction-=8;
        if(x>=60)   Direction+=8;
        if(x<=-60)  Direction-=8;
        switch(Direction)
          {
           case 0:  x+=1;break;
           case 1:  y+=sin(PP(30));x+=cos(PP(30));break;
           case 2:  y+=sin(PP(45));x+=cos(PP(45));break;
           case 3:  y+=sin(PP(60));x+=cos(PP(60));break;
           case 4:  y+=1;break;
           case 5:  x-=sin(PP(30));y+=cos(PP(30));break;
           case 6:  x-=sin(PP(45));y+=cos(PP(45));break;
           case 7:  x-=sin(PP(60));y+=cos(PP(30));break;
           case 8:  x-=1;break;
           case 9:  y-=sin(PP(30));x-=cos(PP(30));break;
           case 10: y-=sin(PP(45));x-=cos(PP(45));break;
           case 11: y-=sin(PP(60));x-=cos(PP(60));break;
           case 12: y-=1;break;
           case 13: x+=sin(PP(30));y-=cos(PP(30));break;
           case 14: x+=sin(PP(45));y-=cos(PP(45));break;
           case 15: x+=sin(PP(60));y-=cos(PP(60));break;
        }
      if((fabs(x-40)+fabs(y-40))<=1)  { box1++;break;}
      if((fabs(x-20)+fabs(y+20))<=1)  { box2++;break;}
      if((fabs(x+45)+fabs(y-50))<=1)  { box3++;break;}
      if((fabs(x+30)+fabs(y-42))<=1)  { box3++;break;}
      }
  }
  printf("%d %d %d  %d",box1,box2,box3,box4);
  getch();
}
附件里面的那个编程题目是这个题和图解;
作业.rar (127.97 KB)

搜索更多相关主题的帖子: 随机 
2010-04-20 01:06
mywaylgh
Rank: 8Rank: 8
来 自:厨房
等 级:蝙蝠侠
威 望:5
帖 子:188
专家分:729
注 册:2010-3-10
收藏
得分:50 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#define PI 3.14159265
#define PP(a) (PI*a/180)
int main()
{
  int i,box1,box2,box3,box4,k,Direction;
  float x,y;
  box1=box2=box3=box4=0;
  srand((unsigned)time(NULL));
  for(i=1;i<=10000;i++)
  {  x=y=0.0;
     k=0;
     while(k++<500)
      {
        Direction=rand()%360;

        x += sin(PP(Direction));
        y += cos(PP(Direction));

        if(y>=50)   y--;
        if(y<=-50)  y++;
        if(x>=60)   x--;
        if(x<=-60)  x++;

        if(sqrt((x-40)*(x-40)+(y-40)*(y-40))<=1)  { box1++;break;}
        if(sqrt((x-20)*(x-20)+(y+20)*(y+20))<=1)  { box2++;break;}
        if(sqrt((x+45)*(x+45)+(y-50)*(y-50))<=1)  { box3++;break;}
        if(sqrt((x+30)*(x+30)+(y-42)*(y-42))<=1)  { box4++;break;}

      }
  }
  printf("%d %d %d  %d",box1,box2,box3,box4);
  getchar();
}

不直到符合你的要求不
收到的鲜花
  • 日的起烟烟2010-04-20 13:34 送鲜花  2朵   附言:贴代码就是要这样··

人生就像茶几 上面放着许多杯具

人生也像厨房 里面总有一些洗具
2010-04-20 10:32
jmjy
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:44
专家分:146
注 册:2010-1-7
收藏
得分:0 
顶起
2010-04-20 11:53
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
收藏
得分:40 
ls代码粒子反弹那块处理的有点儿问题
其他应该没啥大问题了
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#define PI 3.14159265
// 宏定义的参数最好用括号括起来,虽然本程序里没括号也没影响
#define PP(a) (PI*(a)/180)
int main()
{
  int i,box1,box2,box3,box4,k,Direction;
  double x,y;    //推荐使用double
  box1=box2=box3=box4=0;
  srand((unsigned)time(NULL));
  for(i=1;i<=10000;i++)
  {  x=y=0.0;
     k=0;
     while(k++<500)
      {
        Direction=rand()%360;
        x += sin(PP(Direction));
        y += cos(PP(Direction));
        if(y>=50)   y=100-y;    // 假设粒子做镜面反弹
        if(y<=-50)  y=-100-y;  
        if(x>=60)   x=120-x;   
        if(x<=-60)  x=-120-x;   

        if(sqrt((x-40)*(x-40)+(y-40)*(y-40))<=1)  { box1++;break;}
        if(sqrt((x-20)*(x-20)+(y+20)*(y+20))<=1)  { box2++;break;}
        if(sqrt((x+45)*(x+45)+(y-50)*(y-50))<=1)  { box3++;break;}
        if(sqrt((x+30)*(x+30)+(y-42)*(y-42))<=1)  { box4++;break;}

      }
  }
  printf("%d %d %d  %d",box1,box2,box3,box4);
  getchar();
  return 0;
}

不过运行结果还真有意思,不知道结果有没有错,box2就因为离原点近,尽然吞了那么多粒子,只有个别几个被box4吞了,运行了n次只有一次box1有吞粒子,box3一次都没有。涨见识了,印象流还真是不可靠。。。。


[ 本帖最后由 succubus 于 2010-4-20 12:10 编辑 ]

[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2010-04-20 12:05
mywaylgh
Rank: 8Rank: 8
来 自:厨房
等 级:蝙蝠侠
威 望:5
帖 子:188
专家分:729
注 册:2010-3-10
收藏
得分:0 
回复ls:
由于是完全随机的,所以反弹无论怎么处理对运算结果没影响

人生就像茶几 上面放着许多杯具

人生也像厨房 里面总有一些洗具
2010-04-20 12:52
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
收藏
得分:10 
以下是引用mywaylgh在2010-4-20 12:52:48的发言:

回复ls:
由于是完全随机的,所以反弹无论怎么处理对运算结果没影响
对最终模拟结果是没啥影响
只不过既然模拟镜面反弹每增加什么代码和运算复杂度
何乐而不为呢
毕竟更趋近于真实一些

[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2010-04-20 13:50
longlong89
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:小飞侠
威 望:6
帖 子:1043
专家分:2754
注 册:2009-8-18
收藏
得分:0 
接分

想象力征服世界
2010-04-20 18:12
李若斌
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:219
专家分:184
注 册:2009-9-30
收藏
得分:0 
程序写错了。所以大家的思路都被我带错了地方。
2010-04-21 21:36
快速回复:随机游走问题。程序有错误。
数据加载中...
 
   



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

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