2010-05-13 25 views
7

से बहुभुज उत्पन्न करें मैं j2me में मोटाई के साथ एक रेखा खींचना चाहता हूं। पेन चौड़ाई को मोटाई मान के रूप में सेट करके इसे डेस्कटॉप जावा में आसानी से हासिल किया जा सकता है। हालांकि j2me में, पेन क्लास चौड़ाई का समर्थन नहीं करता है। मेरा विचार है कि मेरे पास लाइन से बहुभुज उत्पन्न करना है, जो मोटाई के साथ रेखा जैसा दिखता है जिसे मैं आकर्षित करना चाहता हूं। तस्वीर में, बाएं तरफ मेरे पास है, अंक के साथ एक रेखा है। दाईं ओर जो मैं चाहता हूं, एक बहुभुज जो भर जाता है, मोटाई वाली रेखा। क्या कोई भी लाइन से बहुभुज उत्पन्न करने के बारे में जान सकता है?लाइन

alt text http://www.freeimagehosting.net/uploads/140e43c2d2.gif

+0

मैं सवाल आप वास्तव में चाहते हैं कि आप नहीं मिला ??? – Himadri

+0

मैं प्वाइंट को कन्वर्ट करना चाहता हूं [] जो चित्र (बाएं) में प्वाइंट [] में लाइन को बना देता है [] जो चित्र में पॉलीगॉन बनाते हैं (दाएं)। ड्रॉ भरने पर वह बहुभुज वास्तव में चौड़ाई वाली रेखा हो सकता है। J2me के लिए जो चौड़ाई (या वजन) के साथ ड्राइंग लाइनों का समर्थन नहीं करता है। – VOX

+0

क्या आप एक विशिष्ट चौड़ाई वाली रेखा चाहते हैं? – Ram

उत्तर

4

आह, यदि आप प्रीप्रोकैसिंग कर रहे हैं, तो इससे आपके जीवन को आसान बनाना चाहिए। ग्राफिक्स 2 डी (जे 2 एसई का उपयोग करके) का उपयोग करके मैंने एक छोटा कोड दिया है। मुझे यह पसंद नहीं है कि उत्पादन में अतिरिक्त आंतरिक खंड शामिल हैं, लेकिन जब यह भर जाता है, तो यह बहुत अच्छा लगता है।

import java.awt.BasicStroke; 
import java.awt.Shape; 
import java.awt.geom.Path2D; 
import java.awt.geom.PathIterator; 

public class StrokePath 
{ 
    public static void main(String[] args) 
    { 
     // set line width to 6, use bevel for line joins 
     BasicStroke bs = new BasicStroke(6.0f, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_BEVEL); 

     // create a path for the input 
     Path2D p = new Path2D.Float(); 
     p.moveTo(50.0, 50.0); 
     p.lineTo(65.0, 100.0); 
     p.lineTo(70.0, 60.0); 
     p.lineTo(120.0, 65.0); 
     p.lineTo(40.0, 200.0); 

     // create outline of wide lines by stroking the path with the stroke 
     Shape s = bs.createStrokedShape(p); 
     // output each of the segments of the stroked path for the output polygon 
     PathIterator pi = s.getPathIterator(null); 
     while (!pi.isDone()) 
     { 
      pi.next(); 
      double[] coords = new double[6]; 
      int type = pi.currentSegment(coords); 
      switch (type) 
      { 
      case PathIterator.SEG_LINETO: 
       System.out.println(String.format("SEG_LINETO %f,%f", coords[0], coords[1])); 
       break; 
      case PathIterator.SEG_CLOSE: 
       System.out.println("SEG_CLOSE"); 
       break; 
      case PathIterator.SEG_MOVETO: 
       System.out.println(String.format("SEG_MOVETO %f,%f", coords[0], coords[1])); 
       break; 
      default: 
       System.out.println("*** More complicated than LINETO... Maybe should use FlatteningPathIterator? ***"); 
       break; 
      } 
     } 
    } 
} 

यहाँ इन निर्देशांक प्रतिपादन के बाद मेरे परिणाम हैं:

UnfilledFilled

+0

यह बहुत अच्छा है। आप वास्तव में जानते थे कि मैं क्या चाहता था। धन्यवाद;) – VOX

+0

खुशी है कि हम इसे मिला! –

0

यह एक लाइन आकर्षित करेगा: यदि आप अंक की एक सरणी आप की तरह

for(int i=0;i<myPoints.Length-1;i++) 
g.DrawLine(pen,myPoints[i],myPoints[i+1]); 

सवाल कुछ कर सकते है

Graphics g = this.CreateGraphics(); 
Pen pen = new Pen(Color.Black, 2); //black Width 2 
pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid; 
g.DrawLine(pen, point1, point2); //point1 and point2 are instances of Point class 

तो मैं लगता है कि बहुत स्पष्ट नहीं है। .. उम्मीद है कि यह

+0

यह सी # में इच्छित परिणाम को पूरी तरह आकर्षित करता है, मुझे पता था। मैं j2me में वही काम करना चाहता हूं जो पेन चौड़ाई का समर्थन नहीं करता है। तो मैं मोटाई के साथ एक रेखा खींचने के लिए एक रेखा से एक बहुभुज बनाने की कोशिश कर रहा हूँ। – VOX

+0

@ एमओएस: मुझे लगता है कि यह मदद करेगा लेकिन यह मूल रेखा के ऊपर/नीचे रेखा खींच जाएगा।मुझे लगता है कि वोक्स को मूल मार्ग के दोनों किनारों पर समान रूप से मोटी रेखा की आवश्यकता है। तो मुझे लगता है कि अगर वह मोटाई 10 की एक पंक्ति चाहते हैं, तो वह मूल रेखा से 5 की मोटाई और मूल रेखा से नीचे 5 की मोटाई चाहते हैं। – Ram

+0

हां @ राम, जैसा आपने कहा था और @ m0s 'कोड के रूप में है। लेकिन j2me पेन में दूसरी चौड़ाई तर्क का समर्थन नहीं करता है जिससे मुझे @ m0s कोड का उपयोग करने में असमर्थ बना दिया जाता है। – VOX

0

मुझे लगता है कि मैं समांतर रेखाएं खींचूंगा लाइन और उन्हें बहुभुज के रूप में कनेक्ट करें। भरने से समांतर रेखा खींचने के लिए, Draw a parallel line

+0

मुझे ऐसा लगता है कि यदि आप अनिवार्य रूप से रेखा के प्रत्येक खंड को उसी लंबाई के आयत में बदलते हैं, और जो भी मोटाई/चौड़ाई आप लक्षित कर रहे हैं, तो आपके पास बदसूरत कोनों होंगे। – Dan

+0

बिल्कुल, मैं अब बदसूरत कोनों वाला हूँ। उन कोनों के चारों ओर गोल करने के लिए कोई सूचक? – VOX

0

दुर्भाग्यवश, इसके लिए सामान्य एल्गोरिदम बहुत जटिल है, और यदि आप मानचित्र बना रहे हैं, तो आपको शायद सामान्य एल्गोरिदम की आवश्यकता होगी ... यदि आप पैसा खर्च कर सकते हैं, उदाहरण के लिए, TinyLine लाइब्रेरी आशाजनक लगती है :

http://www.tinyline.com/2d/download/guide/gstate.html#joinStyle

काफी संभावनाएँ हैं इस, भी अन्य बातों के आप अपने नक्शे ड्राइंग में क्या करना चाहता हूँ के साथ तुम्हारी मदद करेगा।

मैंने लाइब्रेरी का उपयोग नहीं किया है (या किसी भी जे 2 एमई प्रोग्रामिंग को स्पष्ट रूप से किया है), लेकिन यदि यह दावा करता है कि ऐसा लगता है, तो यह पैसे के लायक होने की संभावना है।

+0

टिनीलाइन इस समय प्रयास करने के लिए बहुत महंगा है और इसके साथ एक नक्शा खींचने में काफी समय लगता है। मेरा विचार है कि इन लाइनों को बहुभुज में प्रीप्रोसेस करना और उन्हें सहेजना है। फिर चल रहे j2me ऐप को बिना किसी प्रसंस्करण के उन सहेजे गए बहुभुज को पढ़ने और सीधे स्क्रीन पर आकर्षित करने की आवश्यकता है। – VOX