| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3232 人关注过本帖, 2 人收藏
标题:我也国庆大赠送,新手尝试一下:猎狗追兔
取消只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
结帖率:100%
收藏(2)
已结贴  问题点数:100 回复次数:19 
我也国庆大赠送,新手尝试一下:猎狗追兔
一只兔子在离窝D处,一只猎狗在兔子与窝连线的垂直距离L处、且正对兔子(即三点连成直角)。猎狗发现兔子,以恒定速度大小v向兔子扑去,与此同时,兔子也以速度u逃往自己的窝。假设猎狗始终面向兔子追赶,试问它能逮到兔子吗?

程序要求:自己输入D、L、v、u,算出结果。
扩展:
1.猎狗位置可随意;
2.动画模拟过程。
搜索更多相关主题的帖子: 兔子 
2011-09-30 16:04
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
猎狗跑的是曲线,不会一直是直角。这是响尾蛇导弹追踪模型,你再想一想。

授人以渔,不授人以鱼。
2011-09-30 19:19
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 2楼 风生钧起
嘿嘿,把到妹妹没有?

[ 本帖最后由 TonyDeng 于 2011-10-4 22:27 编辑 ]

授人以渔,不授人以鱼。
2011-09-30 19:19
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 7楼 laznrbfe
不用积分的,而且这是运动学,其实等于数学,有高一基础、懂点编程就能解决。

授人以渔,不授人以鱼。
2011-09-30 23:33
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
数学要求很低的啦。要解析解才麻烦,这个问题天生就是用编程解决的,对程序来说其实超简单,都说给新手练的了,明摆着送分呐。

授人以渔,不授人以鱼。
2011-10-01 00:28
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
#include <locale.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>

// 坐标点结构
typedef struct Coord
{
    double x;            // x 坐标
    double y;            // y 坐标
};

const wint_t K_ENTER = 0x000D;

const double D_Distance = 50.0;            // 兔子离窝的距离
const double L_Distance = 100.0;        // 猎狗离兔子的距离
const double v_Speed = 5.0;                // 兔子的速率
const double u_Speed = 12.1;            // 猎狗的速率
const double tininess = 0.0001;            // 时间微小增量

void pause(void);

void main(void)
{
    Coord rabbit = {0.0, 0.0};            // 兔子位置
    Coord hound = {0.0, -L_Distance};    // 猎狗位置
    double angle;                        // 猎狗的方向角
    bool success = false;

    setlocale(LC_ALL, "chs");        // 设定语言为中文输出

    wprintf_s(L"兔子位置(%.2lf%c%.2lf)\n", rabbit.x, ',', rabbit.y);
    wprintf_s(L"兔子窝位置(%.2lf%c%.2lf)\n", D_Distance, ',', 0.0);
    wprintf_s(L"猎狗位置(%.2lf%c%.2lf)\n\n", hound.x, ',', hound.y);
    wprintf_s(L"兔子速率%.2lfm/s\n", v_Speed);
    wprintf_s(L"猎狗速率%.2lfm/s\n\n", u_Speed);
    while ((rabbit.x < D_Distance) && !success)
    {
        rabbit.x += v_Speed * tininess;                                    // 兔子运动
        angle = atan((rabbit.x - hound.x) / (0.0 - hound.y));            // 猎狗与兔子连线对y轴的夹角
        hound.x += u_Speed * sin(angle) * tininess;                        // 猎狗在x轴方向的运动
        hound.y += u_Speed * cos(angle) * tininess;                        // 猎狗在y轴方向的运动
        if (hound.y >= 0.0)                                                // 一旦猎狗超越x轴即逮着兔子,与hound.x >= rabbit.x等价
        {
            wprintf_s(L"猎狗在离窝边%.2lf处逮到兔子了!\n", D_Distance - rabbit.x);
            success = true;
        }
    }
    if (!success)
    {
        wprintf_s(L"兔子成功逃脱!\n");
    }

    pause();
}

void pause(void)
{
    wint_t character;

    wprintf_s(L"\n====按Enter键结束====");
    do
    {
        character = _getwch();
    } while (character != K_ENTER);
}


[ 本帖最后由 TonyDeng 于 2011-10-1 01:37 编辑 ]

授人以渔,不授人以鱼。
2011-10-01 01:07
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
呵呵,这个问题用微积分反而麻烦,甚至无从下手,其实那也不叫微积分。这个问题,只要有高一上学期的运动知识,懂点编程,就可以解决了,如果用数学,过了高三、即使考上大学,也未必能解得出来(找到书看答案的除外)。数学和编程都不需要很多的知识(看看那个代码,是初学者都会写的),觉得难的话,问题到底在哪里呢?

授人以渔,不授人以鱼。
2011-10-01 11:58
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
与相似无关的,就应用速度的概念即可。看我的代码就是这个解法的实现。

授人以渔,不授人以鱼。
2011-10-01 19:12
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 20楼 exo1991
如果追不上呢?有无限时间肯定追得上,但现在不是无限时间。
前面说了数学性质居多,而且有点游戏成分,最适宜计算机解决的问题。这是一个计算机好办而数学稍为麻烦的例子,以后发个数学上解决了但计算机没找到办法的例子。

授人以渔,不授人以鱼。
2011-10-01 19:25
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
如果我没记错名词,解决这个问题的数学方法叫“变分法”,不叫“微积分”,也不用微分方程。在数值解法上,却确实有积分的成分,就是简单的微量累加,前面代码已经给出。

授人以渔,不授人以鱼。
2011-10-01 19:43
快速回复:我也国庆大赠送,新手尝试一下:猎狗追兔
数据加载中...
 
   



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

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