如何围绕自身旋转2D对象?

时间:2013-04-27 19:13:40

标签: java graphics rotation 2d transform

我编写了一个支持3个动作的程序:旋转,平移和缩放。

翻译&缩放工作很好,但我在旋转方面遇到了一些问题。

在代码的开头,我从文件中解析原点,然后在2D平面中绘制初始对象。然后,物体不是围绕自身旋转,而是围绕原点旋转。

我检查了所有的矩阵和数学方程式,但找不到确切的错误,任何想法我在哪里出错?

我附加了旋转的部分代码,没有缩放和变换。

以下是代码的SSCCE:

import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.util.ArrayList;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.geom.Point2D;
import java.awt.geom.Line2D;
import java.io.IOException;

import javax.swing.JFrame;

public class SSCCE {

    public static void main (String[] args) throws IOException 
    {
        ClippingView1 CC = new ClippingView1(); 
        CC.start();
    }


}
  • 此SSCCE仅支持轮换,因为这是我的主要问题。

对此问题的任何想法将不胜感激!

此致

1 个答案:

答案 0 :(得分:1)

要围绕除原点之外的其他点旋转,首先需要应用平移矩阵将要旋转的点移动到原点,然后围绕原点旋转矩阵,然后反转平移矩阵以将所有内容移回原始位置。

所以,你没有m_transforms.rotate的行,你应该有:

currentLine = m_transforms.translate(-xPoint, -yPoint,
                  m_transforms.rotate(m_direction,
                       m_transforms.translate(xPoint, yPoint, currentLine);

xPointyPoint是您要旋转的任何点。

您应该将这3个操作组合成一个矩阵,然后将其应用于currentLine,这样您就可以使用

这样的方法

Line2D rotate(double xPoint, double yPoint, double angle, Line2D line)