模拟打台球计算偏移距离或偏移角度

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("程序结束");
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值