JavaFx游标测量

时间:2017-04-17 21:25:30

标签: javafx mouseevent

我设计的小型系统应该能够在现实世界中定位,它基本上是一台安装有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);
}}

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

如果你正在阅读这篇文章,你可能想知道是的,问题在于加速,甚至在"禁用"还有什么东西还没有解决,我通过将PS2鼠标连接到Arduino解决了这个问题,并且使用JSSC我问上次检查后的delta X和Y(看看这里http://www.instructables.com/id/Optical-Mouse-Odometer-for-Arduino-Robot/