0

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

假设我有一个像这样简单的 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 语句显然没有考虑旋转,所以在我旋转矩形之后,我的命中测试失败了。对于旋转,我在 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);
    }
}

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

4

1 回答 1

2

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

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");
        }
    }
};
于 2013-02-08T20:52:34.693 回答