Свойство привязки Java-бинов к уравнению полярных координат

Я пытаюсь связать startXProperty JavaFX QuadCurve с вращением узла, используя радиус r узла и его вращение θ. Идея состоит в том, что если я сделаю это со свойством Y, я смогу заставить кривую «прикрепить» себя к концу вращающегося объекта.

Теперь я знаю, что значение x можно найти с помощью x = r × cos( θ ).

Но я изо всех сил пытаюсь представить это в математике Bindings:

curve.startXProperty().bind(getRod().rotateProperty().//Something);

Я пытаюсь придумать комбинацию .multiply(), .divide(), .add() и .subtract(), которые у меня есть. Это не похоже на то, что у привязок есть метод .cos(), который я могу легко использовать.

Было бы здорово, если бы кто-нибудь помог мне решить эту головную боль.


person AlwaysNeedingHelp    schedule 03.07.2018    source источник


Ответы (1)


add, multiply и т. д. методы просто для удобства.

К счастью, класс Bindings позволяет указать произвольные привязки, которые можно использовать в качестве параметра для привязки:

DoubleBinding binding = Bindings.createDoubleBinding(
                                    () -> Math.cos(Math.toRadians(getRod().getRotate())) * radiusProperty.get(),
                                    getRod().rotateProperty(),
                                    radiusProperty);

curve.startXProperty().bind(binding);

Однако вам может быть лучше использовать прослушиватель для свойства rotate, применяя localToParent в качестве преобразования и установки свойств curve в соответствии с предоставленными результатами.

person fabian    schedule 03.07.2018
comment
Спасибо fabian за ответ, как раз то, что мне было нужно, я никогда не использовал localToParent, но попробую :) - person AlwaysNeedingHelp; 03.07.2018