我编写了一个支持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();
}
}
对此问题的任何想法将不胜感激!
此致
答案 0 :(得分: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)