Я играю, пытаясь создать небольшое приложение JavaFX для визуализации данных, полученных через последовательный порт от платы на базе Arduino и некоторых датчиков.
После добавления некоторых обновлений LineGraph в режиме реального времени, я сейчас нахожусьпытаясь отобразить значения крена, тангажа и рыскания, полученные от микроконтроллера, вращая простой элемент box.
У меня есть один поток, вызывающий функцию каждые x мс, которая хранитвходящие данные в ObservableList
с changeListener
и вызывает функцию на основе контроллера для обновления / поворота ориентации блока.
Поскольку вычисление углов уже выполнено на микроконтроллере,Я хотел бы повернуть прямоугольник в соответствии с полученной абсолютной ориентацией.
Из того, что я понимаю, я не могу просто повернуть из любой предыдущей ориентации в новую абсолютную ориентацию, а только изменить ориентацию относительнок предыдущему.
Мне пришла в голову следующая идея просто вычесть последний бросок / шаг / узначения aw из предпоследнего из списка 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);
Заранее благодарим вас за любые идеи или даже решения.Если вам нужна дополнительная информация или фрагменты кода, дайте мне знать.