2011-11-01 15 views
12

थोड़ी देर पहले मैंने एक प्रश्न पूछा कि क्या मैं पथ में विशिष्ट बिंदुओं की एक जोड़ी ढूंढ सकता हूं; हालांकि, इस बार मैं जानना चाहता हूं कि पथ में सभी बिंदुओं को जानने का कोई तरीका है या नहीं? (मुझे ऐसा कोई तरीका नहीं मिला जो ऐसा हुआ, जो दुर्भाग्यपूर्ण है क्योंकि जावा ऐसा करने का एक तरीका प्रदान करता है, सिर्फ एंड्रॉइड नहीं?)एंड्रॉइड में पथ में सभी अंक कैसे प्राप्त करें?

कारण मैं यह पूछता हूं क्योंकि मेरे पास एकाधिक ज्यामितीय ग्राफ हैं और मैं तुलना करना चाहता हूं यह देखने के लिए अंक जहां वे छेड़छाड़ करते हैं।

मैं किसी भी उपयोगी प्रतिक्रियाएं

उत्तर

2

आप एक Path इसका मतलब है कि आपके कोड के कुछ बिंदु में, आप सटीक (जियो) बिंदु पता बनाया है, तो सराहना करते हैं। आप इस बिंदु को ArrayList या कुछ समान क्यों नहीं डालते?

इसलिए उदाहरण के लिए करने से पहले:

path.lineTo(point.x, point.y); 

आप कर सकते हैं:

yourList.add(point); 
path.lineTo(point.x, point.y); 

और बाद में आप ArrayList से अपने सभी अंक प्राप्त कर सकते हैं। आपको नोट करें कि आप Enhanced For Loop Syntax का ArrayList का लाभ उठा सकते हैं जो तीन गुना तेजी से निष्पादित होता है।

PathMeasure pm = new PathMeasure(myPath, false); 
//coordinates will be here 
float aCoordinates[] = {0f, 0f}; 

//get point from the middle 
pm.getPosTan(pm.getLength() * 0.5f, aCoordinates, null); 

या इस:

+0

यही था कि मैं क्या अगर कोई विकल्प नहीं था करने के लिए जा रहा था। मैं कुछ और दिनों के लिए प्रश्न खुला छोड़ दूंगा और यदि कोई अन्य तरीका सुझाया नहीं गया है, तो मैं इसे उत्तर के रूप में स्वीकार करूंगा। – StartingGroovy

+0

@StartingGroovy ठीक है, यदि आप आखिरकार इस समाधान को चुनते हैं, तो प्रदर्शन स्पीडअप का लाभ उठाने के लिए, मेरी अद्यतन पोस्ट देखें। – Manos

+0

दिलचस्प, मुझे पता नहीं था कि लूप के लिए बढ़ाया गया 3 गुना तेज था :) उस tidbit के लिए धन्यवाद! – StartingGroovy

24

आप PathMeasure उपयोग कर सकते हैं इस सरल टुकड़ा path.For उदाहरण पर मनमाने ढंग से बिंदु के निर्देशांक प्राप्त करने के लिए (कि मैं here देखा था) पथ के आधे पर बिंदु के निर्देशांक देता है टुकड़ा रिटर्न FlaotPoint s.That सरणी की एक सरणी मार्ग पर 20 अंकों के निर्देशांक शामिल है:

private FlaotPoint[] getPoints() { 
     FlaotPoint[] pointArray = new FlaotPoint[20]; 
     PathMeasure pm = new PathMeasure(path0, false); 
     float length = pm.getLength(); 
     float distance = 0f; 
     float speed = length/20; 
     int counter = 0; 
     float[] aCoordinates = new float[2]; 

     while ((distance < length) && (counter < 20)) { 
      // get point from the path 
      pm.getPosTan(distance, aCoordinates, null); 
      pointArray[counter] = new FlaotPoint(aCoordinates[0], 
        aCoordinates[1]); 
      counter++; 
      distance = distance + speed; 
     } 

     return pointArray; 
    } 

ऊपर स्निपेट में, FlaotPoint एक वर्ग है कि एक बिंदु के निर्देशांक संपुटित है:

class FlaotPoint { 
     float x, y; 

     public FlaotPoint(float x, float y) { 
      this.x = x; 
      this.y = y; 
     } 

     public float getX() { 
      return x; 
     } 

     public float getY() { 
      return y; 
     } 
    } 

संदर्भ:
stackoverflow
Animating an image using Path and PathMeasure – Android

संबंधित मुद्दे