java中圆内圆外的点如何分离?

How can we separate the points inside and outside a circle in java?

我有一个关于 Circle Inside/Outside 的问题。首先,我们有 9 个圆圈,我们必须生成许多随机的 2D 点(比如 N=100,000),如果它们在这些圆圈中,则用红色绘制它们。否则,将它们绘制成灰色。

我尝试做了一些事情并得到了这个结果:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;


public class circlejava extends Application{
    public void start(Stage primaryStage) {
        // scene parameters
        int scene_w = 600;
        int scene_h = 600;

        // circle parameters
        long radius = 150;
        int center_x = 300;
        int center_y = 300;

        Pane pane = new Pane();
        // Some code to drawing circle
        Circle circle = new Circle();
        circle.setCenterX(center_x);
        circle.setCenterY(center_y);
        circle.setRadius(radius);
        circle.setStroke(Color.RED);
        circle.setStrokeWidth(1);
        circle.setFill(null);
        pane.getChildren().add(circle);

        Circle circle2 = new Circle();
        circle2.setCenterX(100);
        circle2.setCenterY(100);
        circle2.setRadius(50);
        circle2.setStroke(Color.RED);
        circle2.setStrokeWidth(1);
        circle2.setFill(null);
        pane.getChildren().add(circle2);

        Circle circle3 = new Circle();
        circle3.setCenterX(300);
        circle3.setCenterY(100);
        circle3.setRadius(20);
        circle3.setStroke(Color.RED);
        circle3.setStrokeWidth(1);
        circle3.setFill(null);
        pane.getChildren().add(circle3);

        Circle circle4 = new Circle();
        circle4.setCenterX(500);
        circle4.setCenterY(100);
        circle4.setRadius(50);
        circle4.setStroke(Color.RED);
        circle4.setStrokeWidth(1);
        circle4.setFill(null);
        pane.getChildren().add(circle4);

        Circle circle5 = new Circle();
        circle5.setCenterX(center_x);
        circle5.setCenterY(center_y);
        circle5.setRadius(radius);
        circle5.setStroke(Color.RED);
        circle5.setStrokeWidth(1);
        circle5.setFill(null);
        pane.getChildren().add(circle5);

        Circle circle6 = new Circle();
        circle6.setCenterX(500);
        circle6.setCenterY(300);
        circle6.setRadius(20);
        circle6.setStroke(Color.RED);
        circle6.setStrokeWidth(1);
        circle6.setFill(null);
        pane.getChildren().add(circle6);

        Circle circle7 = new Circle();
        circle7.setCenterX(100);
        circle7.setCenterY(300);
        circle7.setRadius(20);
        circle7.setStroke(Color.RED);
        circle7.setStrokeWidth(1);
        circle7.setFill(null);
        pane.getChildren().add(circle7);

        Circle circle8 = new Circle();
        circle8.setCenterX(100);
        circle8.setCenterY(500);
        circle8.setRadius(50);
        circle8.setStroke(Color.RED);
        circle8.setStrokeWidth(1);
        circle8.setFill(null);
        pane.getChildren().add(circle8);

        Circle circle9 = new Circle();
        circle9.setCenterX(300);
        circle9.setCenterY(500);
        circle9.setRadius(20);
        circle9.setStroke(Color.RED);
        circle9.setStrokeWidth(1);
        circle9.setFill(null);
        pane.getChildren().add(circle9);

        Circle circle10 = new Circle();
        circle10.setCenterX(500);
        circle10.setCenterY(500);
        circle10.setRadius(50);
        circle10.setStroke(Color.RED);
        circle10.setStrokeWidth(1);
        circle10.setFill(null);
        pane.getChildren().add(circle10);

        for(int i = 0; i<100000; i++) {

            Circle nokta = new Circle();
            double t = 2 * Math.PI * Math.random();
            double r = Math.sqrt(Math.random());
            double x = r * Math.cos(t);
            double y = r * Math.sin(t);
            nokta.setCenterX(x*scene_w);
            nokta.setCenterY(y*scene_h);
            nokta.setRadius(r);
            nokta.setFill(Color.RED);
            nokta.setStroke(Color.GRAY);
            pane.getChildren().add(nokta);
        }


        Scene scene = new Scene(pane, scene_w, scene_h);
        primaryStage.setTitle("Pi Estimation by Random Points");
        primaryStage.setScene(scene);// Place the scene in the stage
        primaryStage.setResizable(false);
        primaryStage.show();// Display the stage

        }


    public static void main(String[] args){
       Application.launch(args);

    }


}

那么,如何区分圆内圆外的点呢?

谢谢,

因为圆的半径已知,圆心坐标也已知。

您将需要一种方法来存储每个圆的半径和圆心坐标。

每次生成一个随机点,然后根据每个圆的中心点坐标检查它是否在圆的范围内(即 randomPoint <= 半径)。

如果随机点在圆心之一的范围内(或内部),则随机点为红色,否则(或在所有圆圈外)为灰色。

作为建议,您可能需要 class 并使用数组创建一些对象。

任何问题and/or 澄清。请在评论中告诉我,我会尽力而为。

-------- 编辑 2/16/2018 ----------

一些检查要记住:

1) 二维随机点是否有设定的半径以便人眼可见?

2) 随机点x、y坐标是否在pane大小范围内?

3)有没有检测随机点是否在圆内的函数?

4) 是否有或数学是否正确来检查随机点是否在圆内?