当前位置: 首页 > 知识库问答 >
问题:

JavaFX绕中心旋转矩形?

都昊乾
2023-03-14

我试着绕着它的中心旋转一个矩形。使用GraphicsContext ie gc将旋转绘制到画布上。这是我的绘图代码

gc.save();    
gc.translate(center.x, center.y);
gc.rotate(this.angle);
gc.strokeRect(0,0, this.width, this.height);   
gc.restore();

这会将矩形移动到其中心,然后围绕其左上角点旋转矩形。我试着把两边的长度和宽度减半,但那只会让它飞得到处都是。我数学不好也许这里有更好的人能告诉我我做错了什么。

如果需要的话,我还存储了矩形的所有四个点(角)。

谢了乔

共有2个答案

贺功
2023-03-14

就这么简单,如下图所示。

Rectangle rect = new Reactangle(20, 20, 100, 50);
rect.setRotate(30); //rotate the rectangle around its center by 30 degrees.
汪德寿
2023-03-14

围绕指定点的旋转需要由围绕原点的平移变换和旋转组成,如下所示:

  1. 使用平移将旋转中心移动到原点
  2. 围绕原点旋转
  3. 对第一个平移使用逆平移

您的代码中缺少第三部分。

例子

@Override
public void start(Stage primaryStage) throws Exception {
    Canvas canvas = new Canvas(400, 400);
    double x = 50;
    double y = 100;
    double width = 100;
    double height = 200;

    GraphicsContext gc = canvas.getGraphicsContext2D();
    double rotationCenterX = (x + width) / 2;
    double rotationCenterY = (y + height) / 2;

    gc.save();
    gc.translate(rotationCenterX, rotationCenterY);
    gc.rotate(45);
    gc.translate(-rotationCenterX, -rotationCenterY);

    gc.fillRect(0, 0, width, height);
    gc.restore();

    Scene scene = new Scene(new Group(canvas));
    primaryStage.setScene(scene);
    primaryStage.show();
}

您还可以简单地使用带有指定轴的<code>旋转</code>来实现所需效果:

@Override
public void start(Stage primaryStage) throws Exception {
    Canvas canvas = new Canvas(400, 400);
    double x = 50;
    double y = 100;
    double width = 100;
    double height = 200;

    GraphicsContext gc = canvas.getGraphicsContext2D();
    double rotationCenterX = (x + width) / 2;
    double rotationCenterY = (y + height) / 2;

    gc.save();
    gc.transform(new Affine(new Rotate(45, rotationCenterX, rotationCenterY)));
    gc.fillRect(0, 0, width, height);
    gc.restore();

    Scene scene = new Scene(new Group(canvas));
    primaryStage.setScene(scene);
    primaryStage.show();
}
 类似资料:
  • 我刚开始使用JavaFX,有一个问题。在我的项目中,我想使用旋转矩形。但矩形只围绕其中心旋转,我希望它围绕其左上角旋转。 就像这张照片(从这里开始): 下面是我的项目中的一些代码: 在这种情况下,如果按下箭头键,矩形会旋转。

  • 我有两个矩形,其中一个是另一个的剪裁。现在我想围绕剪切矩形的中心旋转较大的矩形并调整x / y值。 如何计算旋转后的新x/y值? 我只想绕着小盒子的中心旋转大盒子的x/y。因此,较大盒子的x/y点相对于较小盒子的顶部/左侧点。我有小盒子的宽度和高度,所以我可以计算大盒子相对于小盒子中心的x/y点。旋转的角度以度为单位。旋转可以是任何角度,例如10度。

  • 如题所述,我想知道如何围绕中心旋转绘制的矩形。 我目前正在使用以下代码: 现在,旋转发生在2D空间中,但我似乎无法集中矩形的旋转。相反,矩形一直围绕全局点0,0旋转。 我想我的旋转和平移设置不正确或顺序不正确。 我不想是什么阻止此代码产生所需的输出。任何建议和答案将不胜感激。 谢谢

  • 问题内容: 有没有一种简单的方法可以围绕图片中心旋转图片?我首先使用了AffineTransformOp。看起来很简单,而且需要,并且在一个整洁的Google会话中为矩阵找到正确的参数。所以我认为… 我的结果是这样的: 如果您忽略旋转90度的倍数的情况,这非常简单(sin()和cos()无法正确处理)。该解决方案的问题在于,它围绕图片左上角的(0,0)坐标点进行变换,而不是围绕图片中心进行正常的变

  • 问题内容: 我正在用Java制作2D游戏,玩家可以通过障碍物引导多边形。多边形上下移动,游戏世界向左和向右滚动。我需要多边形绕其中心旋转,但是由于它不断地被平移,所以它绕着点旋转。尝试将其平移回原始中心,旋转并重新平移不起作用。如何获得形状的中心? 这是我在2ms计时器上的运动计算: 这是我的paintComponent方法: 其中(xPos,yPos)是屏幕的中心。 问题答案: 转换(通常)是复

  • 我有两个矩形:红色和绿色。对于它们中的每一个,我有以下信息: 中心点( 和 坐标)。 旋转角度 宽度和高度 矩形将始终以正坐标移动。编辑:没有坐标可以是负的:矩形总是位于正坐标。因此,中心永远不会是(0,0)。 问题 我有一个起始位置。为了简化示例,假设我的红色和绿色矩形的位置如下: 现在,我使用0º和90º之间的角度φ旋转红色矩形。但是,绿色矩形需要旋转并保持其相对于红色矩形的位置。绿色矩形不仅