JavaFX:当一个/两个多边形调整大小(缩放)时,如何保持两个多边形之间的距离不变?

JavaFX:当一个/两个多边形调整大小(缩放)时,如何保持两个多边形之间的距离不变?,java,javafx,binding,shapes,hexagonal-tiles,Java,Javafx,Binding,Shapes,Hexagonal Tiles,我的GUI中有一个六边形蜂窝,它们的大小不断动态变化。我需要找到一种方法,在不重叠的情况下同时缩放这些形状 我已经计算出边缘之间的距离必须保持不变,但仅此而已。我真的需要帮助把它翻译成代码。任何帮助都将不胜感激!! 我目前正在使用场景生成器。我尝试将多边形中心之间的距离绑定到其中一个多边形。这是我的代码(不起作用): 公共类控制器实现可初始化{ @FXML 隐根; @FXML 私有多边形poly1; @FXML 私有多边形poly2; @凌驾 公共void初始化(URL位置、ResourceBu

我的GUI中有一个六边形蜂窝,它们的大小不断动态变化。我需要找到一种方法,在不重叠的情况下同时缩放这些形状

我已经计算出边缘之间的距离必须保持不变,但仅此而已。我真的需要帮助把它翻译成代码。任何帮助都将不胜感激!! 我目前正在使用场景生成器。我尝试将多边形中心之间的距离绑定到其中一个多边形。这是我的代码(不起作用):

公共类控制器实现可初始化{
@FXML
隐根;
@FXML
私有多边形poly1;
@FXML
私有多边形poly2;
@凌驾
公共void初始化(URL位置、ResourceBundle资源){
DoubleProperty distanceProperty=新的SimpleDoubleProperty();
ChangeListener ChangeListener=(可观察、旧值、新值)->{
Point2D p1=新的Point2D(poly1.getLayoutX(),poly1.getLayoutY());
Point2D p2=新的Point2D(poly2.getLayoutX(),poly2.getLayoutY());
distanceProperty.set(p1.距离(p2));
};
poly1.layoutXProperty().addListener(changeListener);
poly2.layoutXProperty().addListener(changeListener);
poly1.layoutYProperty().addListener(changeListener);
poly2.layoutYProperty().addListener(changeListener);
poly1.layoutYProperty().bind(distanceProperty);
poly1.layoutXProperty().bind(distanceProperty);
//更改poly1的大小
double initialScaleX=poly1.getScaleX();
double initialScaleY=poly1.getScaleY();
poly1.setScaleX(initialScaleX*2.0);
poly1.设置刻度(初始刻度*2.0);
}
}

与其说是边之间的距离,不如说是中心之间的距离以及它们在增长/收缩时对半径的变化。基本上,您需要以与相邻六边形相同的速度缩小相邻六边形的大小,或者用相邻六边形形状随其变化而移动的量来偏移其中心位置。共享一些代码不要害怕。@home是我包含上述代码的地方。我用蒂姆·亨特的想法用装订来抵消邻居的中心位置,但我不确定该怎么做。你能告诉我我走的路是否正确吗?@TimHunter你能看看我的代码,告诉我哪里出了问题。我不确定我是否必须使用绑定或其他技术来建立波尔冈人中心之间的关系。请发帖
public class Controller implements Initializable {
    @FXML
    private AnchorPane root ;
    @FXML
    private Polygon poly1;
    @FXML
    private Polygon poly2;

@Override
public void initialize(URL location, ResourceBundle resources) {

    DoubleProperty distanceProperty = new SimpleDoubleProperty();

    ChangeListener<Number> changeListener = (observable, oldValue, newValue) -> {

        Point2D p1 = new Point2D(poly1.getLayoutX(), poly1.getLayoutY());
        Point2D p2 = new Point2D(poly2.getLayoutX(), poly2.getLayoutY());
        distanceProperty.set(p1.distance(p2));
    };
    poly1.layoutXProperty().addListener(changeListener);
    poly2.layoutXProperty().addListener(changeListener);
    poly1.layoutYProperty().addListener(changeListener);
    poly2.layoutYProperty().addListener(changeListener);

    poly1.layoutYProperty().bind(distanceProperty);
    poly1.layoutXProperty().bind(distanceProperty);

    // changing the size of poly1
    double initialScaleX = poly1.getScaleX();
    double initialScaleY = poly1.getScaleY();
    poly1.setScaleX(initialScaleX*2.0);
    poly1.setScaleY(initialScaleY*2.0);
}
}