JavaFx游标测量[关闭]

问题描述 投票:0回答:2

我正在设计一个能够在现实世界中定位的小型系统,它基本上是一个安装有PC的电动遥控车。这辆车应该能够在现实世界中导航并知道它在地图上的位置。由于它需要一个良好的精度,GPS不是一个选项(我能得到的最好的是4米,超过我能接受的方式)并且以任何方式编码轮子对我的预算来说太贵了,所以解决方法是放置这辆车下的鼠标,并将其反馈作为相对定位系统。

我的第一个想法是计算两个瞬间之间像素距离的差异(使用计时器),我甚至尝试使用mouseMoved事件应用相同的原理,但问题仍然存在:如果我改变鼠标的速度,计算的距离也会变化。

在这一点上,我没有其他想法,你认为我的方法有什么问题?

public class Main extends Application {

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

private double cmToPixel = 1;
private int totalX;
private int totalY;
private Robot robot;
private int counter;

@Override
public void start(Stage primaryStage) throws Exception {
    VBox pane = new VBox();
    pane.setFillWidth(false);
    pane.setMinWidth(200);
    javafx.scene.control.TextArea textArea = new TextArea();
    javafx.scene.control.TextArea logArea = new TextArea();
    javafx.scene.control.TextArea debugArea = new TextArea();
    pane.getChildren().addAll(textArea, logArea, debugArea);
    Scene scene = new Scene(pane);
    primaryStage.setScene(scene);
    primaryStage.centerOnScreen();
    robot = new Robot();
    robot.mouseMove((int) (Screen.getPrimary().getBounds().getWidth() / 2), (int) (Screen.getPrimary().getBounds().getHeight() / 2));
    scene.setOnMouseMoved(e -> {
        double deltaX = e.getX() - Screen.getPrimary().getBounds().getWidth() / 2;
        double deltaY = Screen.getPrimary().getBounds().getHeight() / 2 - e.getY() ;
        totalX += deltaX;
        totalY += deltaY;
        textArea.appendText((totalX / cmToPixel) + "  -  " + (totalY / cmToPixel) + "\n");
        debugArea.appendText(deltaX+" - "+deltaY+"\n");
        logArea.appendText("Center: ["+(int) (Screen.getPrimary().getBounds().getWidth() / 2)+";"+(int) (Screen.getPrimary().getBounds().getHeight() / 2)+"] cursorPosition: "+e.getX()+" - "+e.getY()+"\n");
        robot.mouseMove((int) (Screen.getPrimary().getBounds().getWidth() / 2), (int) (Screen.getPrimary().getBounds().getHeight() / 2));
    });
    primaryStage.show();
    primaryStage.setFullScreen(true);
}}

如果你想重现我的结果,只需在一张纸上标记两行,并尝试以不同的速度在这些行之间运行鼠标,同时密切关注程序

javafx mouseevent
2个回答
0
投票

报告的鼠标设备距离取决于移动鼠标的速度。如果将鼠标用于制作它的目的,通常需要这样做,但在您的情况下,这是一个问题。我试着在你的鼠标设置中切换这个功能。也许这个链接可以帮到你。 https://askubuntu.com/questions/698961/disable-mouse-acceleration-in-ubuntu-15-10


0
投票

如果您正在阅读这篇文章,您可能想知道是的,问题在于加速,即使“禁用”某些东西仍然无效,我通过将PS2鼠标连接到Arduino解决了这个问题,并且JSSC我问上次检查后的delta X和Y(看看这里http://www.instructables.com/id/Optical-Mouse-Odometer-for-Arduino-Robot/

© www.soinside.com 2019 - 2024. All rights reserved.