2017-04-17 60 views
0


我正在上一个学校项目,但不幸的是,我的导师不再工作了,所以我没有人问。
目前,我正在设计一个小型系统,该系统应该能够在现实世界中定位自己,它基本上是一台安装有PC的电动遥控车。这款车应该能够在真实世界中导航并知道它在地图上的位置。由于它需要一个很好的精度,所以GPS不是一种选择(我能得到的最好距离是4米,就我能接受的范围而言),并且以任何方式对车轮进行编码对于我的预算来说都太昂贵,所以解决方法是将一个在这辆车下的鼠标,并将其反馈用作相对定位系统。
我的第一个想法是计算两个瞬间(使用定时器)之间的像素距离差异,我甚至尝试使用mouseMoved事件应用相同的原则,但问题仍然存在:如果我改变鼠标的速度,计算的距离也变化。
在这一点上,我没有其他的想法,你认为我的做法是错误的?JavaFx光标测量

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

非常感谢您的帮助!
利玛窦Formenti

编辑:如果你想复制我的结果,只是标注在一张纸上两条线,并尝试以不同的速度运行这些线之间的鼠标,同时注意在程序

回答

0

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

+0

刚刚尝试过你的建议,但没有任何改变。你确定这可能是问题吗?如果是这样,我会调查更多 –

+0

这至少是你的一个问题。当然,我还没有看到更多。我想知道你想如何处理汽车的旋转。 – mipa

+0

旋转由数字指南针处理,不太难;禁用加速后情况不会改变......我将在此期间深入研究此解决方案 –