找回密码 注册 QQ登录
一站式解决方案

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
打印 上一主题 下一主题

绝对野趣题目,据说这里高手多!

[复制链接]
51
发表于 2006-1-15 22:59:07 | 只看该作者
  1. 原帖由 [i]jwind[/i] 于 2006-1-13 13:26 发表
  2. 我用纯数学的方法说一下
  3. 这个曲线方程比较复杂
  4. 但是可以用离散点来近似的模拟这个曲线

  5. 下面是求狼坐标(X,Y)的C语言程序假设兔子速度0.1 狼速度0.2
  6. #include<math.h>;#include<iostream.h>;
  7. void main(void){
  8. double X[1000];
  9. double Y[1000];
  10. X[0]=0;
  11. Y[0]=0;                                                                /*(初始坐标) */
  12. for(int i=0;i<1000;i++)                                            /*I是时间单位 1/10秒 */
  13. {double TG =((i/10)-Y[i] ) /(100-X[i])    /*算出在狼的轨迹在节点i上的斜率 */
  14. double SIN=sqrt((TG*TG/(1+TG*TG));
  15. double COS=sqrt(1/(1+TG*TG));                                  /*换算到正铉和余旋 */
  16. Y[i+1]=Y[i]+0.2*SIN;
  17. X[i+1]=X[i]+0.2*COS;                                                   /*算出下个节点的坐标 */
  18. COUT.....                                                                       /*累死了不写了,打印狼和兔子的节点坐标 */
  19. IF(X[i+1]>100 )BREAK;                                              /*看看什么时候能追上兔子 */
  20. }
  21. };


  22. 很有趣,运行好以后,在节点665上 狼的坐标(99.999999,65.994552) 兔子的坐标(100,66.5)也就是说
  23. 狼没追上兔子,就差那么0.5米
  24. 可能用0.0001秒的步长精确点
复制代码


程序稍微有点问题,尤其是数值转换的时候。for后第1行中,由于i是整型,i/10也是整型,计算后整型丢掉尾数再自动转成双精度,导致误差较大(采用原程序参数 i/10时得到 65.994552 m ,而用 i/10.0 会得到 66.499946 m)。更好的办法是做乘法i*0.1,与时间(i)*速度(0.1)的定义也一致。

另外C99标准不允许变量在for的括号中定义,我用的Dev-C++编译jwind兄的程序要报错。
下面是改好后的代码,步长用0.001,对应的采用了包含10万个double元素的大数组。

  1. #include <math.h>
  2. #include <stdio.h>

  3. int main()
  4. {
  5.      double X[100000];
  6.      double Y[100000];
  7.      double TG, SIN, COS;
  8.      long int i;                                 /* 我的编译器 int 字长跟 long int 字长是一样的 */
  9.      X[0]=0.0;
  10.      Y[0]=0.0;                          /*(初始坐标)*/
  11.      for(i=0;i<100000L;i++)               /* i是时间单位秒 */
  12.            {
  13.                   TG =((i/1000.0)-Y[i])/(100-X[i]);   /*算出在狼的轨迹在节点i上的斜率 */
  14.                   SIN=sqrt(( TG*TG )/(1 + TG*TG));
  15.                   COS=sqrt( 1/(1+TG*TG) );        /*换算到正铉和余旋 */
  16.                   Y[i+1] = Y[i] + 0.002*SIN;
  17.                   X[i+1] = X[i] + 0.002*COS;                /*算出下个节点的坐标 */
  18.                   if ( X[i+1] > 100.0 )
  19.                      break;              /*看看什么时候能追上兔子,此时退出循环得到结果 */
  20.            }
  21.      printf("Y[i]=%f m\n",Y[i]);     /*狼追上兔子,兔子能跑多少米 */
  22.      return 0;
  23.          
  24. }
复制代码


运行后的到66.665000 m,与理论值很接近,可见数值解也能很好解决问题。

[ 本帖最后由 doshelp 于 2006-1-15 23:33 编辑 ]
52
发表于 2006-1-16 13:56:56 | 只看该作者
原帖由 doshelp 于 2006-1-15 13:39 发表


楼主太抬举我了,数学高手太多了,而我连菜鸟都算不上。你看了我的解法,一定会认为我笨的可以。

40楼的解题PDF文档已经重新上传,经验证可以下载,需要的请自便。

现在的方法解这题不是问题,关键是达 ...


关于这道题目,我的确是在一本书上看到的.
是朋友的书,他看到后来问我.
我感觉有意思,就没看老达的解法,
而是自己用微积分解出了方程.
这本是一道纯数学题目,
是我拿他来模拟.
上传至网络上.

老兄说的不错,老达一定有他的方法,
不然66这个数据不可思议.
67就死.66.66666....是会合点.

说实话,你的办法我是不会的.
但思路我看的懂,结果也非常漂亮.
真的佩服.

如果 感兴趣,我还有一道类似的题目,

我用微积分都没出来方程.

你的方法一定可以.

老兄,如有时间,可去:

中国技术联盟

www.chinacatia.com

那里练习专区讨论的人也多.

把你的方法公布在那里,

一定会有人感兴趣热烈讨论的.

[ 本帖最后由 罗玲 于 2006-1-16 06:05 编辑 ]
53
发表于 2006-1-16 15:54:12 | 只看该作者
原帖由 罗玲 于 2006-1-16 13:56 发表

中国技术联盟
www.chinacatia.com
那里练习专区讨论的人也多.
把你的方法公布在那里,
一定会有人感兴趣热烈讨论的.


我的解法pdf文档可以随便转载。

网址应该是www.catiachina.com吧,害的我折腾了半天。

catiachina都是用CATIA的,可惜没有SW版。
54
发表于 2006-1-16 17:12:06 | 只看该作者
本来就很简单,大家搞的复杂起来。
破衣的那题-----等周长缠绕。不是异曲同工吗?
想想有厚度的渐开线吧!
55
发表于 2006-1-17 10:01:53 | 只看该作者
搂主有点打广告的意思。
56
发表于 2006-1-17 14:12:50 | 只看该作者
我不会仿真视频呀
请问楼主到底兔子死了没呀
你要做个结论把正确的答案发上来才行呀
57
发表于 2006-1-17 14:34:57 | 只看该作者
原帖由 zhangyong981222 于 2006-1-17 06:12 发表
我不会仿真视频呀
请问楼主到底兔子死了没呀
你要做个结论把正确的答案发上来才行呀



在这里,我不会上传文件,

所以只有告诉你答案:

可爱的小兔子,跑掉了.

没有死.

差0.6666666米

真的很悬.

哈哈,有点"替古人担忧"的意思.

[ 本帖最后由 罗玲 于 2006-1-17 06:38 编辑 ]
58
发表于 2006-1-17 19:36:26 | 只看该作者
在doshelp的启发帮助下,我尝试有SW做了一下:
用VB编程:Sub main()
    Set swApp = CreateObject("SldWorks.Application")  
    Set Part = swApp.ActiveDoc
    For t = 100 To 1 Step -1
        Part.Parameter("D4@草图1").SystemValue = t
        Part.Parameter("D1@草图1").SystemValue = (200 / 3) - Sqr(t ^ 3 / 3600) - Sqr(25 * t)
        Part.Parameter("D5@草图1").SystemValue = Sqr(t ^ 3 / 900) - Sqr(100 * t) + (200 / 3)
        Part.EditRebuild
        Part.GraphicsRedraw2     
Next t
     For t = 1 To 0 Step -0.1
        Part.Parameter("D4@草图1").SystemValue = t
        Part.Parameter("D1@草图1").SystemValue = (200 / 3) - Sqr(t ^ 3 / 3600) - Sqr(25 * t)
        Part.Parameter("D5@草图1").SystemValue = Sqr(t ^ 3 / 900) - Sqr(100 * t) + (200 / 3)
        Part.EditRebuild
        Part.GraphicsRedraw2     
Next t
End Sub
获得动画效果如图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
59
发表于 2006-1-17 19:43:17 | 只看该作者
狼最后能抓住兔子,但是却要在兔子窝里了,如图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
60
发表于 2006-1-17 19:44:42 | 只看该作者
再放大看一下兔子是怎样逃脱的:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2025-1-8 20:41 , Processed in 0.028422 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2025 www.iCAx.org

快速回复 返回顶部 返回列表