在Javafx中绘制Sin和余弦图

时间:2015-10-23 23:42:51

标签: java javafx sin cosine

我需要分别绘制正弦波和余弦波,然后我将其用作更大程序的类对象。 (这些线只是用于绘制路径)我遇到的问题很简单 - 虽然我知道如何绘制基本形状,如圆形,圆弧形或多边形 - 我不知道如何将它们排列成一个曲线图。

我尝试查找教程和示例,但我能找到的唯一javafx示例使用折旧功能或者根本不使用javafx。

我想过只绘制部分弧并手动调整坐标,但由于坐标与图形对应,我认为必须有一种简单的方法来绘制它。

编辑:

我这里有一个简单的程序:它显示6个圆圈,并在第一个圆圈的轨道上有一个红色的球。我最终想要做的是让球在罪或余弦波中移动(此时圆圈路径将不可见)问题是我不知道如何让球跳跃到下一个圈子并改变方向。

理想情况下,如果我能找到某种方法来检测球的位置坐标并让球出现在其他地方而不是让我能够纠正上述问题,请允许我确保球从左侧开始最重要的一面,也让我在结束时不得不重新开始。

 package orbitingCircle;

 import javafx.animation.Interpolator;
 import javafx.animation.PathTransition;
 import javafx.animation.Timeline;
 import javafx.application.Application;
 import javafx.scene.Scene;
 import javafx.scene.layout.Pane;
 import javafx.scene.shape.Circle;
 import javafx.stage.Stage;
 import javafx.util.Duration;

 public class Main extends Application 
 {

@Override
public void start(Stage primaryStage) {
    Pane p = new Pane();

    Circle circlePath = new Circle(50, 100, 50);
    Circle circlePath2 = new Circle(150, 100, 50);
    Circle circlePath3 = new Circle(250, 100, 50);
    Circle circlePath4 = new Circle(350, 100, 50);
    Circle circlePath5 = new Circle(450, 100, 50);
    Circle circlePath6 = new Circle(550, 100, 50);
    Circle orbitingDot = new Circle(100, 50, 5);

    circlePath.setStyle("-fx-stroke: black; -fx-fill: white");
    circlePath2.setStyle("-fx-stroke: black; -fx-fill: white");
    circlePath3.setStyle("-fx-stroke: black; -fx-fill: white");
    circlePath4.setStyle("-fx-stroke: black; -fx-fill: white");
    circlePath5.setStyle("-fx-stroke: black; -fx-fill: white");
    circlePath6.setStyle("-fx-stroke: black; -fx-fill: white");
    orbitingDot.setStyle("-fx-stroke: red; -fx-fill: red");

    // Add nodes to the pane
    p.getChildren().addAll(circlePath, circlePath2, circlePath3, circlePath4, circlePath5, circlePath6, orbitingDot);

    // Create the path transition
    PathTransition pt = new PathTransition(Duration.millis(4000), circlePath, orbitingDot);
    pt.setInterpolator(Interpolator.LINEAR);
    pt.setOrientation(PathTransition.OrientationType.NONE);
    pt.setCycleCount(Timeline.INDEFINITE);
    pt.setAutoReverse(false);
    pt.play();

    p.setOnMousePressed(e -> pt.pause());
    p.setOnMouseReleased(e -> pt.play());

    primaryStage.setTitle(" ");
    primaryStage.setScene(new Scene(p, 600, 175));
    primaryStage.show();
}

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

}

0 个答案:

没有答案