随机产生两个圆,用一条直线连接两圆,直线不能穿到圆内(javaFx)

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.*;
public class Exercise14_22 extends Application{
	public static void main(String[] args){
		launch(args);
	}
	public void start (Stage stage){
		double centerX1 = Math.random() * 400,centerY1 = Math.random() * 400;
		double centerX2 = Math.random() * 400,centerY2 = Math.random() * 400;//产生随机数
		double radius = 15;
		Pane pane = new Pane();
		Circle circle1 = new Circle();//画出第一个圆
		circle1.setCenterX(centerX1);
		circle1.setCenterY(centerY1);
		circle1.setRadius(radius);
		circle1.setFill(Color.WHITE);
		circle1.setStroke(Color.BLACK);
		Circle circle2 = new Circle();//画出第二个圆
		circle2.setCenterX(centerX2);
		circle2.setCenterY(centerY2);
		circle2.setRadius(15);
		circle2.setFill(Color.WHITE);
		circle2.setStroke(Color.BLACK);
		Line line = new Line();
		double n = Math.atan(Math.abs(centerY1 - centerY2)/Math.abs(centerX1 - centerX2));//以下为运用数学知识计算
		double X1,X2,Y1,Y2;
		if(centerX1 >= centerX2){
			X1 = centerX1 - radius * Math.cos(n);
			X2 = centerX2 + radius * Math.cos(n);
		}else {
			X1 = centerX1 + radius * Math.cos(n);
			X2 = centerX2 - radius * Math.cos(n);
		}
		if(centerY1 >= centerY2){
			Y1 = centerY1 - radius * Math.sin(n);
			Y2 = centerY2 + radius * Math.sin(n);
		}else {
			Y1 = centerY1 + radius * Math.sin(n);
			Y2 = centerY2 - radius * Math.sin(n);
		}
		line.setStartX(X1);
		line.setStartY(Y1);
		line.setEndX(X2);
		line.setEndY(Y2);
		pane.getChildren().addAll(circle1,circle2,line);
		Scene scene = new Scene(pane,400,400);
		stage.setTitle("Exercise14_22");
		stage.setScene(scene);
		stage.show();
	}
}

下面是一个JavaFX程序,它会画一个,并且在的边界上运动一条直线: ```java import javafx.animation.Animation; import javafx.animation.PathTransition; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.layout.Pane; import javafx.scene.shape.Circle; import javafx.scene.shape.Line; import javafx.stage.Stage; import javafx.util.Duration; public class Main extends Application { @Override public void start(Stage primaryStage) throws Exception { // 创建一个形 Circle circle = new Circle(200, 200, 50); // 创建一条直线 Line line = new Line(); line.setStartX(circle.getCenterX()); line.setStartY(circle.getCenterY() - circle.getRadius()); line.setEndX(circle.getCenterX()); line.setEndY(circle.getCenterY() - circle.getRadius() + 50); // 创建一个PathTransition对象,用于控制直线的运动 PathTransition pathTransition = new PathTransition(); pathTransition.setDuration(Duration.seconds(3)); pathTransition.setPath(circle); pathTransition.setNode(line); pathTransition.setOrientation(PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT); pathTransition.setCycleCount(Animation.INDEFINITE); pathTransition.setAutoReverse(true); // 创建一个Pane,并将直线添加到其中 Pane pane = new Pane(); pane.getChildren().addAll(circle, line); // 创建一个Scene,并将Pane添加到其中 Scene scene = new Scene(pane, 400, 400); // 将Scene添加到primaryStage中,并显示primaryStage primaryStage.setScene(scene); primaryStage.show(); // 启动PathTransition动画 pathTransition.play(); } public static void main(String[] args) { launch(args); } } ``` 上面的程序中,我们首先创建了一个`Circle`对象来表示形,并且创建了一条`Line`对象来表示直线。我们将直线的起点设置在的上方边界上,并且将终点设置在的下方边界上。接着,我们创建了一个`PathTransition`对象,将它的路径设置为形,并将它的节点设置为直线。我们还设置了`PathTransition`的一些属性,例如运动的持续时间、运动方向等等。最后,我们将直线添加到一个`Pane`中,并且将`Pane`添加到`Scene`中。我们还启动了`PathTransition`动画,让直线沿着形边界运动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值