Canvas
पर मैं एक वर्गबद्ध वक्र या एक त्रिकोणमितीय वक्र (जैसे sin(x)
) कैसे आकर्षित कर सकता हूं?कैनवास पर एक घुमावदार पथ खींचे?
उत्तर
अधिकांश ड्राइंग एपीआई ऐसे फ़ंक्शंस प्रदान नहीं करते हैं, तो आपको कैनवास एपीआई में एक या एक से अधिक कॉल का उपयोग करके कैनवास पर अपने वांछित वक्र के पिक्सल की गणना करनी होगी।
मुझे लगता है कि आप कैनवास पर मूल रेखाओं को चित्रित करने से परिचित हैं, अगर नहीं तो जवाब दें और हम आगे पीछे हट सकते हैं। हालांकि, जहां तक एक साइन फ़ंक्शन ड्राइंग है, वहां गणित वर्ग के भीतर एक कार्य है जिसमें आपको केवल वही चाहिए जो आपको चाहिए। http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Math.html#sin%28double%29 वहां से आपको केवल अपने एक्स चर (रेडियंस में) को फ़ंक्शन में पास करने की आवश्यकता है और इसे आउटपुट को वाई वैरिएबल के रूप में सहेजने की आवश्यकता है। यह आपके ग्राफ पर एक बिंदु का प्रतिनिधित्व करता है। अब x1 वैरिएबल को एक छोटी राशि (शायद आपके ग्राफ का 1/100) बढ़ाएं, हालांकि आपको इसे स्वाद के लिए समायोजित करने की आवश्यकता होगी), इसे फिर से फ़ंक्शन के माध्यम से चलाएं और उन चर (x2 और y2) को अपने दूसरे बिंदु के रूप में सहेजें। इन दो बिंदुओं के बीच एक रेखा खींचे। अपने x2, y2 चर को x1, y1 के रूप में सहेजें और तीसरे बिंदु को खोजने के लिए फिर से अपने एक्स मान को बढ़ाएं, इतने पर और आगे। यह एक "सत्य" वक्र नहीं है क्योंकि यह वास्तव में केवल लाइनों की एक श्रृंखला है जो फ़ंक्शन का अनुमान लगाती है, यदि आप करेंगे तो एक गणक दृष्टिकोण।
तो:
x1 = x; // जहां एक्स एक्स अक्ष पर कुछ बिंदु है जिसे आप ग्राफ़िंग शुरू करना चाहते हैं।
y1 = पाप (x);
x2 = x1 + वृद्धि;
y2 = पाप (x2);
//
x1 = x2; वाई 1 = वाई 2;
// शीर्ष पर वापस लौटें, यह कोड स्पष्ट रूप से एक लूप में होगा जिसमें वृद्धि का उपयोग होता है क्योंकि यह प्रारंभिक मूल्य के साथ प्रारंभिक मूल्य के बराबर होता है जो आप हर बार बढ़ाना चाहते हैं (मान लें .... 5) और "अगला" कथन बढ़ रहा है = वृद्धि + 5.
एक ग्राफकैनवास वर्ग भी है जो मैं अपरिचित हूं, जो उन बिंदुओं को लेते हैं और उनके बीच वक्र खींचते हैं, हालांकि मुझे यकीन नहीं है कि किस प्रकार का परिवर्तन वक्र को आकर्षित करने के लिए इस्तेमाल किया जा रहा है और यह कितना सटीक है। यहां कक्षा है: http://www.java2s.com/Code/Java/Swing-Components/GraphCanvas.htm
Canvas.drawPath
और Path.quadTo
का उपयोग करें।
यहां एक ग्राफ वर्ग के लिए लिखा गया एक drawEquation() विधि है - मुझे लगता है कि इससे मदद मिल सकती है। मूल विचार
function(x) = Math.sin(x);
की तरह एक विधि है कि एक समीकरण स्वीकार करता है (जो मूल रूप से सिर्फ एक समारोह है) और फिर पाश ग्राफ की सीमा के माध्यम से बना सकते हैं और प्रत्येक बिंदु को जोड़ने छोटे क्षेत्रों ड्रॉ करने के लिए। transformContext() सिर्फ कैनवास संदर्भ उलट ताकि y के बढ़ते मूल्यों ऊपर और नीचे नहीं जाना:
Graph.prototype.transformContext = function(){
var canvas = this.canvas;
var context = this.context;
// move context to center of canvas
this.context.translate(this.centerX, this.centerY);
// stretch grid to fit the canvas window, and
// invert the y scale so that that increments
// as you move upwards
context.scale(this.scaleX, -this.scaleY);
};
Graph.prototype.drawEquation = function(equation, color, thickness){
var canvas = this.canvas;
var context = this.context;
context.save();
this.transformContext();
context.beginPath();
context.moveTo(this.minX, equation(this.minX));
for (var x = this.minX + this.iteration; x <= this.maxX; x += this.iteration) {
context.lineTo(x, equation(x));
}
context.restore();
context.lineJoin = "round";
context.lineWidth = thickness;
context.strokeStyle = color;
context.stroke();
};
आप की तरह, मैं point(x1, y1)
से point (x2, y2)
को एक वक्र रेखा आकर्षित करने के लिए की जरूरत है। मैंने कुछ खोज किया जो मुझे पथ वर्ग (android.graphics.Path
) तक ले जाता है। पथ रेखाओं के लिए पथ के कई तरीके हैं।एक बार जब आप पथ बना लेते हैं तो आप वास्तविक रेखा बनाने के लिए ड्रॉ विधि का उपयोग करते हैं। पथ घुमाए जा सकते हैं, रूपांतरित, सहेजे गए, और जोड़ा जा सकता है। इस वर्ग के साथ खींचे जाने वाले आर्क, मंडल और आयताकार भी हैं। पथ के → mPath.moveTo(x1, y1);
सेट निरंतर और अंत बिंदु → mPath.quadTo(cx, cy, x2, y2);
Convert पथ
http://developer.android.com/reference/android/graphics/Path.html
सेट प्रारंभ बिंदु लाइन → canvas.drawPath(mPath, mPaint);
- 1. घुमावदार कैनवास पर putImageData() गलत
- 2. कैनवास "यादृच्छिक" घुमावदार आकार
- 3. घुमावदार पथ पर एनएसएसटींग खींचने का तरीका?
- 4. एचटीएमएल कैनवास - घुमावदार तीर बनाएं
- 5. एंड्रॉइड - एक छवि के शीर्ष पर खींचे
- 6. एचटीएमएल 5 कैनवास - पथ
- 7. एचटीएमएल 5 कैनवास पर दो माउस क्लिक के साथ एक रेखा खींचे?
- 8. एसवीजी पथ डेटा के साथ कैनवास में पथ ड्रा (कैनवास रास्तों को एसवीजी पथ)
- 9. घुमावदार पथ में एक div को ले जाएं (जैसे पुराने पुराने दिनों में ट्विनिंग)?
- 10. एक घुमावदार आयताकार चित्रण
- 11. एचटीएमएल कैनवास
- 12. एचटीएमएल कैनवास संदर्भ के लिए पथ पर वर्तमान बिंदु खोजें?
- 13. खींचे गए ऑब्जेक्ट पर क्लिक करना
- 14. मैटलैब में, छवि पर ग्रिड कैसे खींचे
- 15. टेक्स्ट एचटीएमएल कैनवास से पथ निकालें
- 16. कस्टम पथ लाइन शैली जब कैनवास
- 17. मैं राफेल जेएस के साथ खींचे जाने वाले वेक्टर पथ को कैसे एनिमेट कर सकता हूं?
- 18. जावास्क्रिप्ट/jQuery: कैनवास से आकार/पथ हटाएं
- 19. घुमावदार गैलरी की संभावना
- 20. एक कैनवास
- 21. QPainter :: घुमावदार पाठ
- 22. एचटीएमएल कैनवास
- 23. घुमावदार कैलिपर
- 24. एक घुमावदार UIView पर एंटीअलाइजिंग कैसे करें (UIImageView नहीं)
- 25. एक टीएमएनएफ़ाइल कैनवास
- 26. ContentControl घुमावदार सजावट
- 27. एक कैनवास पर 2 हलकों ड्राइंग
- 28. घुमावदार आयताकार
- 29. घुमावदार बटन
- 30. संगत घुमावदार वस्तु को संख्यात्मक मानों पर