Airthmetic_Approching

今天上数学建模的时候了解到的两车相遇的问题,还是挺有意思的,就是不要想的太深,就想些表面上的很容易就算出来的

问题大概阐述 :相距有100公里的两辆车,分别记为红和绿,红车以10公里/h的速度往右行驶,绿车以8公里/h的速度往左行驶,现在有一个摩托车来实时观测这辆车的距离,在这两车之间往返行驶,速度是60公里/h,问题是当两车之间的距离小于0.2公里的时候,就默认相遇,并求出摩托车来回了多少趟?

看起来的一个小学生问题,但是很容易想多,这个时候其实画画图想想还是比较好的,以后再遇到这类似的问题就直接套模板了

注意精度问题

package ApproachingQuestion;

import org.junit.Test;

/*
 * 问题大概阐述 :相距有100公里的两辆车,分别记为红和绿,红车以10公里/h的速度往右行驶,绿车以8公里/h的速度往左行驶,现在有一个摩托车来实时观测这辆车的距离,在这两车之间往返行驶,速度是60公里/h,
 * 问题是当两车之间的距离小于0.2公里的时候,就默认相遇,并求出摩托车来回了多少趟?
 * */

/*
 * 主要的解题思路就是 : 其实每一趟就是一次距离的缩短,那怎么来记录当前的距离,肯定就是要想到时间的问题了,那时间又要怎么算,那就是小学时就学过的相遇问题求时间了,也就是每一次缩短的距离可以看作一帧,每次都要改变相应的距离和时间值,
 * 这里还有注意到的是,摩托车往返时的相对速度是不一样的,则可以用一个正反变量来不断改变每一趟的速度来回
 * */

public class Approach {
    double Aspeed = 10;
    double Bspeed = 8;
    double motor = 60;
    double distance = 100;
    double ALocation = 0; //这里最好是就按照题意来表示他们所在的位置,不要都设置成0来算距离
    double BLocation = 100;
    
    
    int count = 0; // 来记录摩托车与两车相遇的次数
    int flag = 1; // 来标志每一趟后要改变速度的标识
    double t= 0;
    @Test
    public void RoundTrip(){
        
        while((BLocation - ALocation) > 0.2){ // 最后相距变成0.2就相遇了
            System.out.println("BLocation"+BLocation);
            System.out.println("ALocation"+ALocation);
            if(flag == 1){ // motor先从A开往B
                // 相遇时间
                t = (BLocation - ALocation) * 0.1/ (motor+Bspeed) ;
            }else{
                t = (BLocation - ALocation) * 0.1 / (motor+Aspeed);
            }
            System.out.println("t"+t);
            // 更新距离
            BLocation = BLocation - Bspeed*t;
            ALocation = ALocation + Aspeed*t;
            // motor 反向
            flag = -flag;
            count ++;
        }
        System.out.println(count);
        //return count;
    }
    public static void main(String[] args) {
        ///int c = new Approach().RoundTrip();
        //System.out.println(c);
    }
}
原文地址:https://www.cnblogs.com/AmoryWang-JavaSunny/p/6602485.html