gpt4 book ai didi

java - Graphics2D 旋转精度问题

转载 作者:行者123 更新时间:2023-11-30 04:16:21 26 4
gpt4 key购买 nike

我正在绘制 4 个堆叠的矩形,围绕一个点旋转 Canvas ,然后再次绘制相同的形状,但堆叠的矩形并未保持完全对齐。

这是屏幕截图:

Alignment Issue

如您所见,第一个未旋转的 block 是完美的,但以下 block 未对齐。为什么会发生这种情况以及如何预防?

<小时/>

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);
}
}

最佳答案

您需要更精确的行程控制:

g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);

默认值可能会让几何形状略有不同,具体取决于实现。 Pure 尝试保持子像素精度。

关于java - Graphics2D 旋转精度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18271976/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com