JAVA编程,要十分详细,给高分
JAVA编程,要十分详细,给高分2.直线追及问题:(30分)编写一个飞机(Plane)类,包含以下属性:域:初始位置,初始速度,加速度方法:到达某个位置需要的时间publ...
JAVA编程,要十分详细,给高分2.直线追及问题:(30分)
编写一个飞机(Plane)类,包含以下属性:
域:初始位置,初始速度,加速度
方法:到达某个位置需要的时间public double arrive(double 目标位置){return 时间}
两个飞机追及时间public double meet(Plane 另一个飞机){return 追及时间} 展开
编写一个飞机(Plane)类,包含以下属性:
域:初始位置,初始速度,加速度
方法:到达某个位置需要的时间public double arrive(double 目标位置){return 时间}
两个飞机追及时间public double meet(Plane 另一个飞机){return 追及时间} 展开
1个回答
展开全部
以下代码未测试,但基本可以保证逻辑性及正确性。楼主需要的话请务必先测试过
public class Plane {
private double position; //初始位置,假定单位为m
private double velocity; //速度,假定单位为m/s
private double acceleration; //加速度m/s2
/*
* 下面是构造方法和get,set方法,可根据需要自己选择是否需要以及实现方式
*/
public Plane() {
super();
}
public Plane(double position, double velocity, double acceleration) {
super();
this.position = position;
this.velocity = velocity;
this.acceleration = acceleration;
}
public double getPosition() {
return position;
}
public void setPosition(double position) {
this.position = position;
}
public double getVelocity() {
return velocity;
}
public void setVelocity(double velocity) {
this.velocity = velocity;
}
public double getAcceleration() {
return acceleration;
}
public void setAcceleration(double acceleration) {
this.acceleration = acceleration;
}
/**
* 计算飞机到达某个位置需要的时间
* Ps:根据题意,不考虑飞行方向相反的情况
*
* @param position 终点位置
* @return
*/
public double arrive(double position) {
//计算运动的距离
// double distance = position > this.position ? position - this.position : this.position - position;
double distance = position - this.position; //以坐标轴正方向考虑,可以只考虑终点位置比起始位置坐标大
//计算终点时的速度
//公式:v2^2 - v1^2 = 2as
double velocity = Math.sqrt(2 * this.acceleration * distance + this.velocity * this.velocity);
//计算时间
//公式:v2 - v1 = at
double time = (velocity - this.velocity) / this.acceleration;
return time;
}
/**
* 两个飞机追及时间
* Ps:应当考虑飞行方向问题:同向追及、相向相遇、背向不会遇到
* 但是根据题意,此处只考虑同向追及问题。
*
* @param plane 另一架飞机
* @return
*/
public double meet(Plane plane) {
//根据题意,以下处理只考虑坐标轴正向飞行的情况
//首先判断两架飞机的前后关系
if (plane.getPosition() > this.position) {
//另一架飞机在本飞机的前方
if (plane.getAcceleration() > this.acceleration) {
//另一架飞机的加速度更快,永远不可能追上
return -1;
} else {
//可以利用公式 s = v1*t + 1/2 * a*t
//后面的飞机要比前面的飞机飞行多一段距离 s
double distance = plane.getPosition() - this.position;
//此处省略公式转化计算过程
//解一元二次方程 ax²+bx+c=0
double a = 0.5 * (this.acceleration - plane.getAcceleration());
double b = this.velocity - plane.getVelocity();
double c = distance;
//得到的应该是2个解,但是理论上有一个是负数,我们只需要正数的解即可
//严谨点的话这里应该把2个值都算出来,然后判断是否大于0,最后再返回。
double x = (Math.sqrt(b * b - 4 * a * c) - b) / (2 * a);
return x;
}
} else if (plane.getPosition() < this.position) {
//另一架飞机在本飞机的后方
if (plane.getAcceleration() < this.acceleration) {
//本飞机的加速度更快,永远不可能追上
return -1;
} else {
//可以利用公式 s = v1*t + 1/2 * a*t
//后面的飞机要比前面的飞机飞行多一段距离 s
double distance = this.position - plane.getPosition();
//此处省略公式转化计算过程
//解一元二次方程 ax²+bx+c=0
double a = 0.5 * (plane.getAcceleration() - this.acceleration);
double b = plane.getVelocity() - this.velocity;
double c = distance;
//得到的应该是2个解,但是理论上有一个是负数,我们只需要正数的解即可
//严谨点的话这里应该把2个值都算出来,然后判断是否大于0,最后再返回。
double x = (Math.sqrt(b * b - 4 * a * c) - b) / (2 * a);
return x;
}
} else {
//位置相同,可以认为已经追及
return 0;
}
}
}
追问
如何new运行
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询