que sugieren que
- implementar un método con regla de dibujo que dibuja una línea horizontal sencilla de izquierda a derecha
- averiguar el ángulo deseado usando
Math.atan2
.
- Aplicar un
AffineTransform
con traducción y rotación antes de invocar la regla-drawing-method.
Aquí hay un programa de prueba completo. (El método Graphics.create
se utiliza para crear una copia de los gráficos originales objeto, por lo que no estropear el original transformada.)
import java.awt.*;
public class RulerExample {
public static void main(String args[]) {
JFrame f = new JFrame();
f.add(new JComponent() {
private final double TICK_DIST = 20;
void drawRuler(Graphics g1, int x1, int y1, int x2, int y2) {
Graphics2D g = (Graphics2D) g1.create();
double dx = x2 - x1, dy = y2 - y1;
double len = Math.sqrt(dx*dx + dy*dy);
AffineTransform at = AffineTransform.getTranslateInstance(x1, y1);
at.concatenate(AffineTransform.getRotateInstance(Math.atan2(dy, dx)));
g.transform(at);
// Draw horizontal ruler starting in (0, 0)
g.drawLine(0, 0, (int) len, 0);
for (double i = 0; i < len; i += TICK_DIST)
g.drawLine((int) i, -3, (int) i, 3);
}
public void paintComponent(Graphics g) {
drawRuler(g, 10, 30, 300, 150);
drawRuler(g, 300, 150, 100, 100);
drawRuler(g, 100, 100, 120, 350);
drawRuler(g, 50, 350, 350, 50);
}
});
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(400, 400);
f.setVisible(true);
}
}

Tenga en cuenta, que sólo puede dibujar tan fácilmente números por encima de los tics. Las drawString-calls pasarían por la misma transformación y se "inclinarían" muy bien a lo largo de la línea.
¿Quieres dibujar las líneas "regla" en direcciones arbitrarias? ¿Están los tics a intervalos fijos, o quieres que aparezcan, digamos 0%, 33%, 66%, 100%? – aioobe
Consulte a continuación la descripción de los gráficos en general. Las marcas de graduación estarán espaciadas uniformemente con espaciado arbitrario. (IE: Necesito una solución donde pueda segmentar una línea y dibujar un número arbitrario de estos tics a lo largo de su longitud en cada segmento) – Matt
déjame saber lo que piensas de mi respuesta. – jjnguy