gpt4 book ai didi

java - 无法理解 AffineTransformation、边界矩形

转载 作者:行者123 更新时间:2023-12-01 12:36:13 26 4
gpt4 key购买 nike

嗨,我是java游戏编程的新手,我正在阅读一些代码,但我无法理解一些事情。我希望这里有人能够帮我解决一些问题。

1)我知道您使用“边界矩形”来检查碰撞。但我的问题是,当您从 graphpics2d/shapes 类在 java 中创建多边形或方形对象时。它们是否已经包含边界矩形?或者我们必须创建它。另外,下面的代码在做什么,是否创建了一个边界矩形以及它接收哪些信息作为参数。

public Rectangle getBounds(){
Rectangle r;
r = new Rectangle((int)getX() -6,(int) getY() -6,50,50);
return r;
}

2)我知道你在java中使用仿射变换来变换、旋转和缩放东西。但下面的代码有点困惑。你能解释一下这段代码在做什么吗:

int rotation=0;
AffineTransformation identity = new AffineTransformation();
g2d.translate(width/2, height/2);
g2d.scale(20,20);
g2d.rotate(Math.toRadians(rotation));

public void keyReleased(KeyEvent k) { }
public void keyTyped(KeyEvent k) { }
public void keyPressed(KeyEvent k) {
switch (k.getKeyCode()) {
case KeyEvent.VK_LEFT:
rotation--;
if (rotation < 0) rotation = 359;
repaint();
break;
case KeyEvent.VK_RIGHT:
rotation++;
if (rotation > 360) rotation = 0;
repaint();
break;
}
}

现在我最困惑的是 if 语句是如何处理的。旋转变量一开始是0,然后通过(rotation--)递减到-1,它检查是否-1 < 0,然后设置旋转=359,但是在中断之后旋转会回到0吗?

这一行发生了什么:

g2d.rotate(Math.toRadians(rotation));

if 语句是否将值发送到此旋转方法,该方法将其转换为弧度,弧度是否是屏幕上的像素,并且它会旋转到这些像素。这是正确的吗?

如果有人能向我解释这一点,我将不胜感激。请不要将我链接到 java 文档,我已经阅读过它们,但它们没有帮助我,我正在寻找可以使其变得更容易的人的解释。

提前谢谢您。

最佳答案

这里rotationdegrees中的角度,值为 0 <= 旋转 < 360

g2d.rotate(angle) 旋转图像。它需要在 radians 中指定 angle .

Math.toRadians(rotation) 将度数转换为弧度,值 0 <= 弧度 < 2Pi

更新:

按下光标键时,代码会旋转图像。它将向右旋转 1 度或向左旋转 1 度。完整的转弯是 360 度。当达到 360 度时,它将旋转变量重置为零,这与 360 度的角度相同。因此:

rotation++;
if (rotation > 360) rotation = 0;

关于java - 无法理解 AffineTransformation、边界矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25563715/

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