1

我编写了一个支持 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 只支持轮换,因为这是我的主要问题。

对于这个问题的任何想法将不胜感激!

问候

4

1 回答 1

1

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

所以,你不做的那一行m_transforms.rotate,你应该有类似的东西:

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

您想要旋转的任何点的位置和xPoint位置。yPoint

您可能应该将这 3 个操作组合到一个矩阵中,然后将其应用于currentLine,因此您将拥有类似的方法

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

于 2013-04-27T19:27:51.343 回答