gpt4 book ai didi

java - 包含椭圆的组绕任意轴旋转,如何获取该组上椭圆的 x 和 y 距离变化?

转载 作者:行者123 更新时间:2023-12-01 14:49:07 25 4
gpt4 key购买 nike

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

我猜想这可以通过数学方式解决,或者通过尝试组/椭圆上的变换实例来解决,但是,在这两个领域我没有太多的专业知识,并且似乎没有得出正确的结果。

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())

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

关于java - 包含椭圆的组绕任意轴旋转,如何获取该组上椭圆的 x 和 y 距离变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15054195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com