【发布时间】:2019-01-28 18:50:57
【问题描述】:
我正在玩,试图制作一个小的 JavaFX 应用程序来可视化通过串行端口从基于 arduino 的板和一些传感器接收到的数据。
在添加了一些实时更新的 LineGraphs 之后,我目前正在尝试通过旋转一个简单的框元素来显示从微控制器接收到的横滚、俯仰和偏航值。
我有一个线程每 x 毫秒调用一个函数,它将传入的数据存储到带有 changeListener 的 ObservableList 中,并调用基于控制器的函数来更新/旋转盒子。
由于角度的计算已经在微控制器上完成,我想将盒子旋转到接收到的绝对方向。
据我目前的了解,我不能简单地从任何以前的方向旋转到新的绝对方向,而只能相对于以前的方向改变方向。
我想出了以下想法,只需从 observableList 的倒数第二个中减去最后一个滚动/俯仰/偏航值。
Data dataTmp = observableList.get(observableList.size()-2);
Data dataTmp2 = observableList.get(observableList.size()-1);
newRoll = dataTmp2.getRoll() - dataTmp.getRoll();
newPitch = dataTmp2.getPitch() - dataTmp.getPitch();
newYaw = dataTmp2.getYaw() - dataTmp.getYaw();
Platform.runLater(new Runnable() {
@Override
public void run() {
controller.setToPosition(newRoll, newPitch, newYaw);
}
});
//...
这只在一定程度上有效。我还是想旋转到从微控制器接收到的绝对位置。
所以我的问题是:有没有办法将盒子的方向重置为例如0, 0, 0 从哪里我可以旋转到我的新绝对方向?简单地移除盒子并添加一个新盒子根本行不通。
group.getChildren().remove(box);
box = new Box(300,50,300);
group.getChildren().add(box);
提前感谢您提供任何想法甚至解决方案。如果您需要更多信息或代码 sn-ps 让我知道。
【问题讨论】:
-
这本书JavaFX 9 By Example 正好有一个例子。您可以获取源代码here。无论如何,您还没有发布如何设置框旋转 (
controller::setToPosition),因此很难在这方面为您提供帮助。 -
在here 看到的示例中,有几个显示三个正交轴,它们转换为
Group。