当前位置: 首页 > 知识库问答 >
问题:

javafx如何绘制一条动态的正弦波线?

蒲曦
2023-05-16

在一个给定宽度和高度的AnchorPane如何绘制一条动态的正弦波线?像波浪一样一直在流动?

共有1个答案

毛正浩
2023-05-16

(Java)正弦曲线的绘制:https://blog.csdn.net/qq_43492547/article/details/107719979

Main.java:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;

public class Main extends Application {

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

    @Override
    public void start(Stage primaryStage) {
        AnchorPane anchorPane = new AnchorPane();
        anchorPane.setPrefSize(800, 300);
        Scene scene = new Scene(anchorPane);
        primaryStage.setScene(scene);
        primaryStage.setTitle("Dynamic Sine Wave");
        primaryStage.show();

        DynamicSineWave dynamicSineWave = new DynamicSineWave(anchorPane.getPrefWidth(), anchorPane.getPrefHeight(), 50, 0.05);
        anchorPane.getChildren().add(dynamicSineWave.getSineWave());
        dynamicSineWave.startAnimation();
    }
}

DynamicSineWave.java:

import javafx.animation.PathTransition;
import javafx.scene.paint.Color;
import javafx.scene.shape.*;
import javafx.util.Duration;

public class DynamicSineWave {
    private Path sineWave;
    private PathTransition pathTransition;

    public DynamicSineWave(double width, double height, double amplitude, double frequency) {
        sineWave = createSineWave(width, height, amplitude, frequency);
        sineWave.setStroke(Color.BLUE);
        sineWave.setStrokeWidth(2);
        setupAnimation();
    }

    private Path createSineWave(double width, double height, double amplitude, double frequency) {
        Path path = new Path();
        path.getElements().add(new MoveTo(0, height / 2));
        for (double x = 0; x <= width; x++) {
            double y = height / 2 + amplitude * Math.sin(frequency * x);
            path.getElements().add(new LineTo(x, y));
        }
        return path;
    }

    private void setupAnimation() {
        pathTransition = new PathTransition();
        pathTransition.setPath(sineWave);
        pathTransition.setNode(sineWave);
        pathTransition.setDuration(Duration.seconds(2));
        pathTransition.setCycleCount(PathTransition.INDEFINITE);
        pathTransition.setAutoReverse(false);
    }

    public Path getSineWave() {
        return sineWave;
    }

    public void startAnimation() {
        pathTransition.play();
    }
}
 类似资料:
  • 本文向大家介绍使用HTML5绘制正弦波,包括了使用HTML5绘制正弦波的使用技巧和注意事项,需要的朋友参考一下 要使用HTML5绘制正弦波,请使用SVG。 使用以下近似正弦波的一半。我使用了三次贝塞尔近似。

  • 问题内容: 我正在制作一个需要在两个给定点之间绘制正弦波的应用程序。我有Google,也有Google,也没有找到我认为合适的东西。所以我的问题是,Android中是否有一种有效的方法来使用一些预定义的点来绘制类似波形的平滑波形?预先感谢您的任何帮助 问题答案: 您可以使用android.graphics.Path类在一组控制点之间构造一组二次或三次 Bézier样条曲线。

  • 盖伊的,我需要帮助...我得在控制台上画一个正弦波给我上大学课。但我有点纠结于如果..为什么第二个if语句不从第一个if/else语句中取新的“y_1”?也许有人能解释一下,我错在想^^多谢

  • 我试图在y有最高值时显示x位置。在if语句中,我试图将y值与120进行比较,但它似乎从来都不是真的,所以它没有使用文本函数显示我的x位置。我也试着取整y值,但结果仍然不是我想要的。有人能帮我吗?

  • 我正在做一个项目,我想通过组合不同的正弦波来产生(简单的)声音。我使用的是arduino mkrZero,因为它内置了I2S接口,似乎有足够的处理能力来满足我的需求。 教程代码工作得很好,我从扬声器中得到了一个简单的方波音调。 现在我修改了生成正弦波的代码,有一个sin函数的查找表,使其足够快: 如果我稍微修改一下代码,然后写 而不是 一切都破裂了,扬声器发出的声音听起来像是可怕的尖叫 //阻塞

  • 如何让用户在JavaFX中的