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

2
Jawad Amjad 7 अक्टूबर 2011, 11:55

1 उत्तर

सबसे बढ़िया उत्तर

मैंने जानबूझकर इस प्रश्न का उत्तर पहले नहीं दिया, क्योंकि आप एंड्रॉइड एपीआई और क्वाड फ़ंक्शन का उपयोग कर रहे हैं, और मैंने सोचा कि संख्या बढ़ाने का एक तरीका होगा। द्विघात बेज़ियर वक्र में बिंदुओं की संख्या जो वह खींच रहा है। मैंने एक Google किया, और मुझे कुछ भी नहीं मिला, लेकिन मैं एंड्रॉइड एपीआई का उपयोग करके किसी को एक चाल पोस्ट करने की प्रतीक्षा कर रहा था।

ऐसा लगता है कि कोड का उपयोग करके उच्च रिज़ॉल्यूशन बेज़ियर कर्व को खींचकर मैन्युअल रूप से चिकनाई हासिल करनी होगी: क्वाड फ़ंक्शन क्वाड्रैटिक बेज़ियर कर्व, यहां Bezier Curves को ड्रा करने के लिए एल्गोरिथम के लिए एक अच्छी लिंक है, आपको बस इतना करना है संख्या बढ़ाना है। आपके वक्र में बिंदुओं की: द्विघात बेज़ियर वक्र का सूत्र है: `

[x,y]=(1 - t) 2P0 + 2(1 - t)tP1 + t2P2

`और आपको लूप को और अधिक पुनरावृत्त करने के लिए t छोटा बनाना होगा, इसलिए अधिक बिंदु होंगे और आप एक चिकना वक्र बनाने में सक्षम होंगे।

यहां वह कोड है जो दिलचस्प है (मैंने इसे समझाने के लिए इसे आसान बनाने के लिए इसे थोड़ा बदल दिया है):

double t = 0;

Point prevPoint = CalculateBezierPoint(t, p0, p1, p2, p3);
for(int i = 0; i <= 100; i++)
{
  Point nextPoint = CalculateBezierPoint(t, p0, p1, p2, p3); //see this part from the link i have given

  //Draw line from previous point to next point.
  prevPoint = nextPoint;
  t = t + (1/100)    
}

एक चिकना वक्र बनाने के लिए, लूप के लिए सेगमेंट की संख्या बढ़ाएं (1000 आदि, इसके साथ प्रयोग करें), इस लाइन को भी बदलें t = t + (1/100) (मान को आपके द्वारा चुने गए सेगमेंट की बड़ी संख्या से विभाजित करें, i

इस समाधान को अंतिम विकल्प के रूप में उपयोग करें, यदि आपको एंड्रॉइड एपीआई का उपयोग करके इसे करने का कोई तरीका मिल जाए, तो कृपया इसे यहां भी पोस्ट करें, और अगर किसी और के पास ऐसा करने का कोई तरीका है, तो कृपया पोस्ट करें, मैं उत्तरों की प्रतीक्षा कर रहा हूं।

1
SpeedBirdNine 7 अक्टूबर 2011, 22:42
पोस्ट के लिए धन्यवाद लेकिन जहां तक ​​मैंने जांच की है मेरी जांच अधिक अंक है कम अंक नहीं। अगर मैं कुछ अहंकार के अनुसार अंकों की संख्या कम करता हूं तो मेरे मामले में रेखा अधिक चिकनी होगी। यह कोनों से बच जाएगा। मैंने डगल्स प्यूकर एल्गो का इस्तेमाल किया लेकिन इसने मुझे संतुष्ट नहीं किया। मैं कुछ और अल्गोस खोज रहा हूँ।निम्नलिखित लिंक मेरे लिए एक छोटी सी आशा है। आइए देखें कि क्या यह मदद कर सकता है। मैं इसे समझने की कोशिश कर रहा हूं। [लिंक]12inchpianist.com/line-smoothing-in-java
 – 
Jawad Amjad
8 अक्टूबर 2011, 10:08