Java 包含椭圆的组绕任意轴旋转,如何获得该组上椭圆的x和y距离?

Java 包含椭圆的组绕任意轴旋转,如何获得该组上椭圆的x和y距离?,java,math,javafx-2,Java,Math,Javafx 2,我有一个上面有椭圆的群。组围绕任意点旋转(通过向组变换添加旋转实例)。如何找出椭圆(中心)改变了多少距离(x和y)?椭圆的中心属性不会更改,因为变换应用于组 我猜这可以通过数学方法或通过在Group/Ellipse上玩弄变换实例来解决,然而,在这两个领域我都没有太多的专业知识,似乎也没有得到正确的结果 import javafx.animation.Transition; import javafx.application.Application; import javafx.beans.pro

我有一个上面有椭圆的群。组围绕任意点旋转(通过向组变换添加旋转实例)。如何找出椭圆(中心)改变了多少距离(x和y)?椭圆的中心属性不会更改,因为变换应用于组

我猜这可以通过数学方法或通过在Group/Ellipse上玩弄变换实例来解决,然而,在这两个领域我都没有太多的专业知识,似乎也没有得到正确的结果

import javafx.animation.Transition;
import javafx.application.Application;
import javafx.beans.property.DoubleProperty;
import javafx.scene.Group;
import javafx.scene.GroupBuilder;
import javafx.scene.Scene;
import javafx.scene.SceneBuilder;
import javafx.scene.layout.Pane;
import javafx.scene.layout.PaneBuilder;
import javafx.scene.shape.Ellipse;
import javafx.scene.shape.EllipseBuilder;
import javafx.scene.shape.Rectangle;
import javafx.scene.shape.RectangleBuilder;
import javafx.scene.transform.Rotate;
import javafx.scene.transform.RotateBuilder;
import javafx.stage.Stage;
import javafx.util.Duration;

public class Main extends Application {

@Override
public void start(Stage stage) throws Exception {
    Ellipse e = EllipseBuilder.create().centerX(110).centerY(110).radiusX(5).radiusY(5).style("-fx-fill: green;").build();
    Rectangle r = RectangleBuilder.create().x(100).y(100).width(30).height(30).style("-fx-fill: red;").build();
    Group group = GroupBuilder.create().children(r, e).build();

    Ellipse pivot = EllipseBuilder.create().centerX(60).centerY(100).radiusX(2).radiusY(2).style("-fx-fill: purple;").build();

    Pane p = PaneBuilder.create().children(group, pivot).build();

    Scene scene = SceneBuilder.create().root(p).width(200).height(200).build();
    stage.setScene(scene);
    stage.show();

    final Rotate rotate = RotateBuilder.create().pivotX(pivot.getCenterX()).pivotY(pivot.getCenterY()).build();
    group.getTransforms().add(rotate);

    RotationTransition trans = new RotationTransition(rotate.angleProperty());
    trans.playFromStart();
}

class RotationTransition extends Transition {
    private final DoubleProperty angle;

    public RotationTransition(DoubleProperty angle) {
        this.angle = angle;
        setCycleDuration(Duration.seconds(5));
    }

    @Override
    protected void interpolate(double frac) {
        angle.setValue(frac * 60);
    }
}

public static void main(String[] args) {
    launch(args);
}
}

上面的代码显示了旋转的动画。如何找出绿色椭圆在旋转后改变的x和y距离?或者,同样地,我如何找到椭圆的新坐标?

虽然我仍然难以理解复杂场景中的各种localToParent、parentToLocal等方法(具有不同转换的多个嵌套组),但我通过一些实验在发布的代码示例中发现了这一点

group.localToParent(e.getCenterX(), e.getCenterY())

似乎有效。在我的实际应用程序中,我只对移动的距离感兴趣,而对实际位置不感兴趣,因此同样的方法也适用于此。(尽管考虑到我复杂的组层次结构,它可能没有给出一个有意义的绝对数)。

您能为我们附加一个代码,让我们能够使用它吗?我已经编辑了这个问题,以包含一个可视化的示例。group.localToParent(e.getCenterX(),e.getCenterY())?似乎给出了椭圆的正确新坐标..我也在想同样的问题。局部边界、父类边界等-有一些关于实际和相对边界理解的方法,应该加以探索(我记不起它们是关于什么的)。