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

JavaFX中抛物线轨迹的时间线

申博厚
2023-03-14

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

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();
}

我处于停滞状态。求求你,帮帮米伊

共有1个答案

仇正平
2023-03-14

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

在这里看到的第一个示例中,KeyValue的三个实例将一个图形从初始位置移动到目标位置,目标位置是size单位,沿着每个坐标轴移动。在这个相关的示例中,一个图形从点P1移动到P2

在下面的示例中,100500之间平行于X轴移动。同时,同一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() {…});
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);
    }

}
 类似资料:
  • 问题内容: 抱歉,我仍然不明白。我的问题是我对物理学一无所知,但我的老师指派给我这个项目。 我处于停滞状态。请帮忙 问题答案: 在a中,第一个参数应为a ,例如,代表初始坐标,例如。第二个参数应该是类型兼容的值,在这种情况下,就是射弹应向其移动的坐标。随着时间线播放,将会相应更新。添加一秒钟以驱动坐标。 在此处看到的第一个示例中,三个实例将图形从其初始位置移动到其目的地位置,该位置是沿每个坐标轴的

  • 轨迹信息为用户的浏览信息(比如首页、商品页、购物车、支付页、支付成功页等),只有调用轨迹方法,客服端的客服人员才能看到用户的浏览内容,提高服务质量。 > 参数说明: 一.标准集成方式 基本集成方式适用于在需要上传的轨迹的界面分别调用以下接口实现轨迹上传功能。 1.首页轨迹 /** 上报轨迹 @param pageName 当前页面名称 @param model 轨迹参数模型 */ NtalkerT

  • 轨迹的集成 轨迹信息为用户的浏览信息(比如首页、商品页、购物车、支付页、支付成功页等),用户可以在以上页面调用轨迹方法,调用成功后,客服人员可以在客服端看到用户的浏览内容,同时可以做客户下单统计,有助提高服务质量。如果客户不需要做统计可以不传轨迹。 参数说明: 参数 类型 是否必传 说明 siteid String 是 企业id title String 是 用户浏览当前页的标题名称 pagele

  •        点击轨迹记录面板的结束记录按钮:        在弹出来的名称输入框中,输入轨迹名称(默认名称为时间),点击确定,即可完成轨迹记录:        保存完成后,主界面中会展示此轨迹线,也可通过数据管理进行其他操作。

  •        轨迹记录开始后,地图中会实时更新位置信息并在轨迹面板中更新当前的轨迹信息。        轨迹记录面板包括一些轨迹记录中的统计信息:        当前速度,来自GPS的实时速度;        平均速度,本次轨迹记录的总平均速度;        最高速度,本次轨迹记录的最快速度;        总里程,本次轨迹记录的总距离;        总时间,本次轨迹记录的总时间;      

  •        确保定位功能完善情况下(可参考文档内 2.3权限设置,2.4电源管理),点击主界面右下方的轨迹图标打开轨迹记录面板。        轨迹记录面板主要包含:当前速度、平均速度、最高速度、总里程、总时间、最高海拔、最低海拔、累计爬升、累计下降、航向、图表等。        点击下方开始按钮即可开启轨迹记录