मैंने पहले जावा ड्राइंग विधियों के साथ कभी काम नहीं किया है, इसलिए मैंने पीओसी के रूप में एनालॉग घड़ी में गोता लगाने और बनाने का फैसला किया। हाथों के अलावा, मैं एक घड़ी का चेहरा खींचता हूं जिसमें मिनट/घंटे के लिए टिक अंक शामिल होते हैं। मैं सर्कल के चारों ओर की रेखाओं की स्थिति निर्धारित करने के लिए सरल पाप/कोस गणना का उपयोग करता हूं।जावा - क्या उप-पिक्सेल लाइन सटीकता को एफ़िनट्रांसफॉर्म की आवश्यकता होती है?
हालांकि, मैंने देखा है कि चूंकि मिनट टिक टिक बहुत कम हैं, लाइनों का कोण गलत दिखता है। मुझे यकीन है कि यह इसलिए है क्योंकि Graphics2D.drawLine()
और Line2D.double()
विधियां उप-पिक्सेल सटीकता से नहीं खींची जा सकती हैं।
मैं जानता हूँ कि मैं केंद्र से होने वाले और इसे बाहर मास्किंग एक चक्र के साथ (अब और अधिक सटीक लाइनों बनाने के लिए) लाइनों आकर्षित कर सकते हैं, लेकिन यह है कि इस तरह के एक असजीला और महंगा समाधान की तरह लगता है। मैंने यह कैसे किया है इस पर कुछ शोध किया है, लेकिन मेरे पास आने वाला सबसे अच्छा जवाब AffineTransform
का उपयोग करना है। मुझे लगता है कि मैं केवल AffineTransform
का उपयोग रोटेशन के साथ कर सकता हूं, क्योंकि सुपरर्सप्लिंग करने के विरोध में।
क्या यह सब-पिक्सेल सटीकता के साथ ड्राइंग का एकमात्र/सर्वोत्तम तरीका है? या क्या एक संभावित तेज़ समाधान है?
संपादित: मैं पहले से ही Graphics2D
ऑब्जेक्ट में एक RenderingHint
की स्थापना कर रहा हूँ।
के रूप में अनुरोध किया है, यहाँ कोड का एक छोटा सा (पूरी तरह से अनुकूल नहीं के रूप में यह सिर्फ एक 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)
यहाँ ड्राइंग का एक स्क्रीनशॉट है। यह देखना मुश्किल हो सकता है, लेकिन 5 9 मिनट के लिए टिक मार्क देखें। यह पूरी तरह लंबवत है।
स्क घड़ी की गणना/घड़ी के लिए घड़ी और कोड का पुन: शॉट मदद करेगा। –