LuckyJiju 2021-08-24 12:17 采纳率: 100%
浏览 46
已结题

逛b站看到一个数学题用java模拟,结果和答案不一样.到底是我想错了还是答案错了还是代码错了.

原视频地址 【官方双语】如何优雅地解答最难数学竞赛的压轴题?_哔哩哔哩_bilibili 一道困难的几何谜题,一个精妙的解答方法。更多信息请看下方评论翻译:Solara570、蛋卷 校对:ZSC、YinghuiX 时间轴 后期:Solara570The hardest problem on the hardest testhttps://youtu.be/OkmNXy7er84 https://b23.tv/gpYYlX
这问题是在一个球的面上随机取4个点,形成的4面体过球心的概率是多少。
视频中up先用圆来类推了,先在圆上取3个点,研究形成的三角形过圆心的概率,分析出来概率是0.25,我一开始用C++写了圆的模拟,答案接近0.275,以为C++的rand随机性太差,于是移植到JAVA,结果还是接近0.275.
然后我就猜,可能是up忽略了两点构成直线过原点时概率为1产生的误差,但是这题不止他一个人做,又是道老题,始终不敢定论.

代码:
首先是point类的随机数用的是0到1的double类型,试过int类型的,结果几乎一样。

import java.util.Random;

public class point {
    static Random r1 = new Random();
    public double x, y;
    point(){
        x = r1.nextDouble();
        y = r1.nextDouble();
    }
}

主函数是以 是否形成锐角或直角三角形 来判断三角形是否过圆心,这个应该没问题吧

import java.util.Arrays;

public class problem {
    public static void main(String[] args) {
        int count = 0;
        int times = 10000000;
        for (int i = 0; i < times; ++i) {
            point a = new point();
            point b = new point();
            point c = new point();
            //两条短边的平方和大于等于长边的平方时为直角或锐角三角形
            double lab2 = Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2);
            double lac2 = Math.pow(a.x - c.x, 2) + Math.pow(a.y - c.y, 2);
            double lbc2 = Math.pow(c.x - b.x, 2) + Math.pow(c.y - b.y, 2);
            double[] l = {lab2, lac2, lbc2};
            Arrays.sort(l);
            if (l[0] + l[1] >= l[2])
                count++;
        }
        System.out.println(count + "/" + times + "=" + count * 1.0 / times);
    }
}
  • 写回答

3条回答 默认 最新

  • 爱晚乏客游 2021-08-24 13:59
    关注

    你的问题在于你的point类无法保证你的点在圆上面啊。你这么写的随机0-1就变成边长为1的正方形内随机选取一个点了

    球面的话很好理解的,首先随便确定一个点,然后过球心画3条直线,球面将三条直线分成3个线段,相交于6个端点,在每条线段上面取一个端点组成剩下的3个点,与一开始确定的一个点组成4面体就是过球心的4面体。那么问题来了,使用抛硬币的方法在三条线段分别取一个端点的概率是多少?
    抛3次在3条线段端点中分别取一个点,1/2*1/2*1/2=1/8

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月1日
  • 已采纳回答 8月24日
  • 创建了问题 8月24日

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大