gpt4 book ai didi

java - JavaFX 中抛物线轨迹的时间线

转载 作者:行者123 更新时间:2023-12-01 21:26:55 26 4
gpt4 key购买 nike

抱歉,我还是不明白。我的问题是我对物理一无所知,但我的老师分配给我这个项目。

private void shoot() {        
Group group = new Group();
double angle = cannon.getRotate();
double speed = slider.getValue();
double x = cannon.getLayoutX();
double y = cannon.getLayoutY();
double v0X = Math.cos(angle)*speed;
double voY = Math.sin(angle)*speed;
Circle c = new Circle(x, y, 8, Color.BLACK);
/*t is the time, but I don't know its
value or has it the same value of the KeyFrame duration? */
double x2 = x + voX*t;
double y2 = y + v0Y * t - 0.5 * gravity * t * t;
Line l = new Line(x, y, x2, y2);
l.setStroke(Color.BLACK);
group.getChildren().addAll(c, l);
final Timeline timeline = new Timeline();
KeyValue xKV = new KeyValue(c.centerXProperty(), x2);
KeyValue yKV = new KeyValue(c.centerYProperty(), y2 , new Interpolator() {
@Override
//Maybe I need I splite, not a curve (?)
protected double curve(double t) {
//thisshould be trajectory's formula
return Math.tan(angle) * x*-(gravity/(2*speed*Math.cos(angle)))*x*x;
}
});
KeyFrame xKF = new KeyFrame(Duration.millis(2000), xKV);
KeyFrame yKF = new KeyFrame(Duration.millis(2000), yKV);
timeline.getKeyFrames().addAll(xKF, yKF);
timeline.play();
}

我处于停滞状态。请帮帮我吧

最佳答案

KeyValue 中,第一个参数应该是 WritableValue,例如circle.centerXProperty(),表示初始坐标,例如x。第二个参数应该是类型兼容的值,在本例中是射弹应移动的 x 坐标。随着时间线的播放,WritableValue 将相应更新。添加第二个 KeyValue 来驱动 y 坐标。

在第一个示例 here 中,KeyValue 的三个实例将图形从初始位置移动到目标位置,该位置沿每个坐标轴相距 size 个单位。在这个相关的 example 中,一个图形从点 p1 移动到 p2

在下面的示例中,Circle100500 之间平行于 x 轴移动。同时,同一个 Circlecurve() 定义的 300100 之间平行于 y 轴移动通过抛物线 y = –4(x – ½)2 + 1,其顶点 (½, 1) 和 x 在 0 和 1 处截取。curve() 的此实现根据 curve() API 的要求,对单位正方形上的抛物线路径进行建模。您可以通过更改关键帧中的高宽比来更改仰角,例如

KeyValue xKV = new KeyValue(c.centerXProperty(), 200);
KeyValue yKV = new KeyValue(c.centerYProperty(), 0, new Interpolator() {…});

image

import javafx.animation.Interpolator;
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Line;
import javafx.stage.Stage;
import javafx.util.Duration;

/**
* @see https://stackoverflow.com/a/38031826/230513
*/
public class Test extends Application {

@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Test");
Group group = new Group();
Scene scene = new Scene(group, 600, 350);
scene.setFill(Color.BLACK);
primaryStage.setScene(scene);
primaryStage.show();
Circle c = new Circle(100, 300, 16, Color.AQUA);
Line l = new Line(100, 300, 500, 300);
l.setStroke(Color.AQUA);
group.getChildren().addAll(c, l);
final Timeline timeline = new Timeline();
timeline.setCycleCount(Timeline.INDEFINITE);
timeline.setAutoReverse(false);
KeyValue xKV = new KeyValue(c.centerXProperty(), 500);
KeyValue yKV = new KeyValue(c.centerYProperty(), 100, new Interpolator() {
@Override
protected double curve(double t) {
return -4 * (t - .5) * (t - .5) + 1;
}
});
KeyFrame xKF = new KeyFrame(Duration.millis(2000), xKV);
KeyFrame yKF = new KeyFrame(Duration.millis(2000), yKV);
timeline.getKeyFrames().addAll(xKF, yKF);
timeline.play();
}

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

}

关于java - JavaFX 中抛物线轨迹的时间线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38031582/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com