Java - A precisão da linha de subpixel requer um AffineTransform?

Eu nunca trabalhei com métodos de desenho Java antes, então decidi mergulhar e criar um relógio analógico como um PoC. Além dos ponteiros, desenho um mostrador de relógio que inclui marcas de escala por minutos / horas. Uso cálculos simples sin / cos para determinar a posição das linhas ao redor do círculo.

No entanto, notei que, como as marcas de minuto são muito curtas, o ângulo das linhas parece errado. Estou certo de que isso ocorre porque ambosGraphics2D.drawLine() eLine2D.double() métodos não podem desenhar com precisão de subpixel.

Sei que posso desenhar linhas originárias do centro e mascará-las com um círculo (para criar linhas mais longas e precisas), mas isso parece uma solução tão deselegante e dispendiosa. Eu fiz algumas pesquisas sobre como fazer isso, mas a melhor resposta que encontrei é usar umAffineTransform. Eu suponho que eu poderia usar umAffineTransform somente com rotação, em vez de precisar fazer uma superamostragem.

Esse é o único / melhor método de desenho com precisão sub-pixel? Ou existe uma solução potencialmente mais rápida?

Editar: Já estou definindo umRenderingHint aoGraphics2D objeto.

Conforme solicitado, aqui está um pouco do código (não totalmente otimizado, pois era apenas um PoC):

diameter = Math.max(Math.min(pnlOuter.getSize().getWidth(),
                             pnlOuter.getSize().getHeight()) - 2, MIN_DIAMETER);

for (double radTick = 0d; radTick < 360d; radTick += 6d) {
   g2d.draw(new Line2D.Double(
      (diameter / 2) + (Math.cos(Math.toRadians(radTick))) * diameter / 2.1d,
      (diameter / 2) + (Math.sin(Math.toRadians(radTick))) * diameter / 2.1d,
      (diameter / 2) + (Math.cos(Math.toRadians(radTick))) * diameter / 2.05d,
      (diameter / 2) + (Math.sin(Math.toRadians(radTick))) * diameter / 2.05d));
} // End for(radTick)

Aqui está uma captura de tela do desenho. Pode ser um pouco difícil de ver, mas observe a marca por 59 minutos. É perfeitamente vertical.

questionAnswers(1)

yourAnswerToTheQuestion