java 编写台球代码_台球碰撞 (Java代码)

解题思路:

注意事项:

参考代码:import java.util.Scanner;

public class C1075 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

while (sc.hasNext()) {

int L = sc.nextInt(), W = sc.nextInt(),

x = sc.nextInt(), y = sc.nextInt(),

r = sc.nextInt(), a = sc.nextInt(),

v = sc.nextInt(), s = sc.nextInt();

if(L == 0 && W == 0 && x == 0 && y == 0 &&

r == 0 && a == 0 && v == 0 && s == 0){

break;

}

int dis = v * s;

double radians = Math.toRadians(a);

//球心在Y轴和X轴移动的总距离

double disY = Math.abs(Math.sin(radians) * dis), disX = Math.abs(Math.cos(radians) * dis);

double rsX = r, rsY = 0; //表示球心的落点

//Y轴处理

int maxDisY = W - r;

boolean flagUp = (a >= 0 && a <= 180);

while(true){

if(flagUp){ //上升

if(y + disY <= maxDisY){

rsY = y + disY;

break;

}else{

disY = disY - (maxDisY - y);

y = maxDisY;

flagUp = false;

}

}else{ //下降

if(disY <= y){

rsY = y - disY;

break;

}else{

disY = disY - (y - r);

y = r;

flagUp = true;

}

}

}

//X轴处理

int maxDisX = L - r;

flagUp = (a <= 90 || a>= 270);

while(true){

if(flagUp){ //上升

if(x + disX <= maxDisX){

rsX = x + disX;

break;

}else{

disX = disX - (maxDisX - x);

x = maxDisX;

flagUp = false;

}

}else{ //下降

if(disX <= x){

rsX = x - disX;

break;

}else{

disX = disX - (x - r);

x = r;

flagUp = true;

}

}

}

System.out.printf("%.2f %.2f\n", rsX, rsY);

}

sc.close();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值