JavaInterview JavaInterview
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)

『Java面试+Java学习』
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)
  • 指南
  • 简历

  • Java

  • 面试

  • 算法

  • algorithm
  • leetcode
JavaInterview.cn
2022-06-15
目录

在圆内随机生成点Java

文章发布较早,内容可能过时,阅读注意甄别。

# 题目

给定圆的半径和圆心的位置,实现函数 randPoint ,在圆中产生均匀随机点。

实现 Solution 类:

Solution(double radius, double x_center, double y_center) 用圆的半径 radius 和圆心的位置 (x_center, y_center) 初始化对象

randPoint() 返回圆内的一个随机点。圆周上的一点被认为在圆内。答案作为数组返回 [x, y] 。

示例 1:

输入: 
["Solution","randPoint","randPoint","randPoint"]
[[1.0, 0.0, 0.0], [], [], []]
输出: [null, [-0.02493, -0.38077], [0.82314, 0.38945], [0.36572, 0.17248]]
解释:
Solution solution = new Solution(1.0, 0.0, 0.0);
solution.randPoint ();//返回[-0.02493,-0.38077]
solution.randPoint ();//返回[0.82314,0.38945]
solution.randPoint ();//返回[0.36572,0.17248]

提示:

  • 0 < radius <= 108
  • -107 <= x_center, y_center <= 107
  • randPoint 最多被调用 3 * 104 次

# 思路

    //随机x,y坐标范围
    double x = random.nextDouble() * (2 * r) - r; //定义了x范围为【-r,r】
    double y = random.nextDouble() * (2 * r) - r; //定义y范围【-r,r】

# 解法


class Solution {

    Random random;//随机函数
    double x0, y0, r;//圆心x,y和半径
    public Solution(double radius, double x_center, double y_center) {
        //初始化
         random = new Random();
         x0 = x_center;
         y0 = y_center;
         r = radius;
    }
    // 用正方形包裹圆形,若出现在圆里就输出
    public double[] randPoint() {
        while(true){
            //随机x,y坐标范围
            double x = random.nextDouble() * (2 * r) - r; //定义了x范围为【-r,r】
            double y = random.nextDouble() * (2 * r) - r; //定义y范围【-r,r】
            if(x * x + y * y <= r * r){
                return new double[]{x + x0, y + y0};//加上圆的位置坐标,为圆内随机点
            }
        }
        
    }
}

/**
 * Your Solution object will be instantiated and called as such:
 * Solution obj = new Solution(radius, x_center, y_center);
 * double[] param_1 = obj.randPoint();
 */

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# 总结

  • 分析出几种情况,然后分别对各个情况实现
微信 支付宝
最近更新
01
1686. 石子游戏VI Java
08-18
02
1688. 比赛中的配对次数 Java
08-18
03
1687. 从仓库到码头运输箱子 Java
08-18
更多文章>
Theme by Vdoing | Copyright © 2019-2025 JavaInterview.cn
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式