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) 是否有或数学是否正确来检查随机点是否在圆内?
我有一个关于 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) 是否有或数学是否正确来检查随机点是否在圆内?