java - Graphics2D Rotation Precision Issues -
i drawing 4 stacked rectangles, rotating canvas point , drawing same shape again stacked rectangles aren't remaining aligned.
here's screenshot:

as can see, first, unrotated block perfect following ones misaligned. why happening , how can prevent it?
ssce
//just import keep short , 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 = 0; < 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); } }
you need more precise stroke control:
g2d.setrenderinghint(renderinghints.key_stroke_control, renderinghints.value_stroke_pure); the default may let geometry vary bit, depending on implementation. pure tries keep subpixel accuracy.
Comments
Post a Comment