1
我繪製了4個堆疊的矩形,圍繞一個點旋轉畫布,然後再次繪製相同的形狀,但堆疊的矩形不會完全對齊。Graphics2D旋轉精度問題
以下是截圖:
正如你所看到的,第一,未旋轉的塊是完美的,但以下的有錯位。爲什麼會發生這種情況,我該如何預防它?
SSCE
//Just import everything to keep it short and sweet
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
@SuppressWarnings("serial")
public class AlignmentIssue extends JComponent {
@Override
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D)g;
double angle = Math.toRadians(30);
int numRects = (int)Math.floor(2.0 * Math.PI/angle);
Rectangle rect = new Rectangle(0, 100, 20, 25);
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.translate(getWidth()/2, getHeight()/2);
for(int i = 0; i < numRects; ++i) {
AffineTransform transform = g2d.getTransform();
for(int n = 0; n < 3; ++n) {
g2d.draw(rect);
g2d.translate(0, rect.height);
}
g2d.setTransform(transform);
g2d.rotate(angle);
}
}
public static void main(String[] args) {
JFrame frame = new JFrame("Alignment Issue");
frame.add(new AlignmentIssue());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(800, 600));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
嗯,有趣。我需要閱讀更多的RenderingHints地圖。謝謝! – Lerp
不客氣:-)我花了一些時間來弄清楚。 – kiheru
這真是救命救命。雖然我正在使用其他渲染手勢,但這個主要提示:) 非常感謝。 – Soley