package com.base.week01.day01;
import java.util.Scanner;
public class Billiard {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("""
****************************模拟计算击打台球的出杆角度****************************
角度值为 击打球与碰撞球所在直线 与 碰撞球与网洞所在直线 形成的 锐角 单位为 °\s
distance距离值为击打球与碰撞球之间的距离 单位按球的半径为 1 计算
distance距离越小目测值误差影响越大 a角度越小目测之误差影响越大
""");
do {
System.out.print("角度(锐角): ");
double a = sc.nextDouble();
//计算前提
if (a >= 90) {
System.out.println("\n输入有误 不可击中");
} else {
System.out.print("距离(球半径为1): ");
double distance = sc.nextDouble();
a = Math.toRadians(a);
double pi = Math.toRadians(180);
double fcd = Math.atan((0.5 * distance - Math.cos(a)) / Math.sin(a));
//满足条件
if ((a < 0.5 * pi) && fcd > a) {
//计算过程
double relta = 2 * Math.sin(a + Math.atan(2 * Math.sin(a) / (distance - 2 * Math.cos(a))));
double reltdis = 90 - fcd / pi * 180;
//取两位小数
String str = String.format("%.2f", relta);
double resulta = Double.parseDouble(str);
String st = String.format("%.2f", reltdis);
double resultdis = Double.parseDouble(st);
System.out.println("角度偏移" + resultdis + "°");
System.out.println("位置偏移" + resulta);
} else {
System.out.println("\n输入有误 不可击中");
}
}
System.out.println("\n继续1 停止0");
} while (sc.nextInt() == 1);
System.out.println();
System.exit(10);
System.out.println("程序结束");
}
}
模拟打台球计算偏移距离或偏移角度
于 2023-11-26 18:38:00 首次发布