gpt4 book ai didi

java - 确定 Java 中是否在旋转矩形内单击鼠标(AWT、swing)

转载 作者:行者123 更新时间:2023-12-02 07:17:18 26 4
gpt4 key购买 nike

如果矩形已旋转,我在弄清楚如何确定是否在矩形内部单击了鼠标单击事件时遇到了一些麻烦。

假设我有一个像这样简单的 MouseAdapter。它只是打印出一条语句,说明如果 mousePressed 实际上位于矩形内,那么我们就击中了矩形内。

MouseAdapter mAdapter = new MouseAdapter() {
public void mousePressed(MouseEvent e) {
int xPos = e.getX();
int yPos = e.getY();
if(xPos >= rect.x && xPos <= rect.x + rect.width && yPos >= rect.y && yPos <= rect.y + rect.height) {
System.out.println("HIT INSIDE RECTANGLE");
}
}
};

我的问题来自于旋转矩形时。上面的 if 语句显然没有考虑旋转,所以在我旋转矩形之后,我的 HitTest 失败了。对于旋转,我在 Paint() 函数中做一些简单的事情:

class drawRect {

Rectangle rect = new Rectangle();

...

public void paint(Graphics g) {
Graphcis2D g2 = (Graphics2D) g;
AffineTransform old = g2.getTransform();
g.rotate(Math.toRadians(90), rect.x, rect.y);
g2.draw(rect);
g2.setTransform(old);
}
}

这只是一些快速的伪代码,以便你们能够理解我想要做什么。所以请不要担心语法之类的问题。任何帮助将不胜感激!

最佳答案

您也可以将旋转应用于鼠标坐标。干编码:

MouseAdapter mAdapter = new MouseAdapter() {
public void mousePressed(MouseEvent e) {
// Create the same transform as used for drawing the rectangle
AffineTransform t = new AffineTransform();
t.rotate(Math.toRadians(90), rect.x, rect.y);
Point2D tp = t.inverseTransform(e.getPoint());

if(rect.contains(tp)) {
System.out.println("HIT INSIDE RECTANGLE");
}
}
};

关于java - 确定 Java 中是否在旋转矩形内单击鼠标(AWT、swing),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14780774/

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