478. 在圆内随机生成点 击败97.76%

本文介绍了一种在给定圆内生成均匀随机点的方法。通过使用圆的半径和圆心坐标,我们创建了一个可以重复生成随机点的函数,确保这些点均匀分布在圆内,包括圆周上的点。示例展示了如何使用此函数生成随机点。

给定圆的半径和圆心的 x、y 坐标,写一个在圆中产生均匀随机点的函数 randPoint 。

说明:

输入值和输出值都将是浮点数。 圆的半径和圆心的 x、y 坐标将作为参数传递给类的构造函数。 圆周上的点也认为是在圆中。 randPoint
返回一个包含随机点的x坐标和y坐标的大小为2的数组。 示例 1:

输入: [“Solution”,“randPoint”,“randPoint”,“randPoint”]
[[1,0,0],[],[],[]] 输出:
[null,[-0.72939,-0.65505],[-0.78502,-0.28626],[-0.83119,-0.19803]] 示例
2:

输入: [“Solution”,“randPoint”,“randPoint”,“randPoint”]
[[10,5,-7.5],[],[],[]] 输出:
[null,[11.52438,-8.33273],[2.46992,-16.21705],[11.13430,-12.42337]]
输入语法说明:

输入是两个列表:调用成员函数名和调用的参数。Solution 的构造函数有三个参数,圆的半径、圆心的 x 坐标、圆心的 y
坐标。randPoint 没有参数。输入参数是一个列表,即使参数为空,也会输入一个 [] 空列表。

  static double minY;
    static double x_center;
    static double minX;
    static double y_center;
    static double d;
    static double radius;

    public Solution(double radius, double x_center, double y_center) {
    //圆形最左边的x值
        minX = x_center - radius;
        this.x_center = x_center;
        //圆形最下边的x值
        minY = y_center - radius;
        this.y_center = y_center;
        d = 2 * radius;
        this.radius = radius;
    }


    public double[] randPoint() {
        while(true){
        //随机生成minX+[0,1)*直径之间的x坐标
            double x = minX + Math.random() * d;
            //随机生成minY+[0,1)*直径之间的y坐标
            double y = minY + Math.random() * d;
            //x、y坐标和圆心的距离
            double diffx = x - x_center;
            double diffy = y - y_center;
            //如果该xy坐标到原点的直线距离小于等于半径则符合条件
            if (Math.sqrt(diffx*diffx +diffy*diffy) <=radius) {
                return new double[]{x,y};
            }
        }
    }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值