मैं सुझाव है कि आप
- लागू एक शासक-ड्राइंग-विधि है कि एक साधारण क्षैतिज मापनी ड्रॉ बाहर
Math.atan2
का उपयोग कर वांछित कोण सही
- चित्रा बाएं से।
- शासक-ड्राइंग-विधि का आह्वान करने से पहले अनुवाद और रोटेशन के साथ
AffineTransform
लागू करें।
यहां एक पूर्ण परीक्षण कार्यक्रम है। कि तुम बस के रूप में आसानी से संख्या आकर्षित कर सकता है (Graphics.create
विधि मूल ग्राफिक्स वस्तु की एक प्रति बनाने के लिए प्रयोग किया जाता है, तो हम को बदलने गंदगी नहीं मूल है।)
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);
}
}

ध्यान दें, टिकों के ऊपर। ड्रॉस्ट्रिंग-कॉल एक ही परिवर्तन के माध्यम से चले जाएंगे और लाइन के साथ अच्छी तरह से "झुकाव" प्राप्त करेंगे।
आप मनमाने ढंग से दिशाओं में "शासक" लाइनों आकर्षित करने के लिए करना चाहते हैं? क्या निश्चित अंतराल पर टिक हैं, या आप उन्हें 0%, 33%, 66%, 100% कहने के लिए दिखाना चाहते हैं? – aioobe
सामान्य रूप से ग्राफिक्स के विवरण के लिए नीचे देखें। टिक अंक समानांतर दूरी के साथ समान रूप से दूरी पर होंगे। (आईई: मुझे एक समाधान की आवश्यकता है जहां मैं एक लाइन को विभाजित कर सकता हूं और प्रत्येक खंड में इसकी लंबाई के साथ इन टिकों की मनमानी संख्या खींच सकता हूं) – Matt
मुझे बताएं कि आप मेरे उत्तर के बारे में क्या सोचते हैं। – jjnguy