मेरे सी # WinForms एप्लिकेशन में मेरे पास एक पिक्चरबॉक्स है जो 2 वक्र होस्ट करता है (वोल्टेज/वर्तमान माप से परिणाम)। एक्स अक्ष वोल्टेज है और वाई अक्ष वर्तमान है। वोल्टेज धुरी -5 से 5 तक है, लेकिन वर्तमान धुरी -10 यूए से 10 यूए तक बहुत छोटा पैमाने है। कार्य यह देखने के लिए है कि दूसरा वक्र पहले वक्र के 10% के भीतर है या नहीं।एक वक्र के चारों ओर एक लिफाफा ड्राइंग
दृश्य निरीक्षण के लिए मैं पहले वक्र (ब्लू वन) के चारों ओर एक लिफाफा खींचने की कोशिश कर रहा हूं। वक्र सिर्फ PointF
सरणी है। फिलहाल मुझे पता नहीं है कि नीले वक्र के चारों ओर एक सही लिफाफा कैसे आकर्षित किया जाए, मैं केवल दो अन्य वक्र खींचा हूं जो वास्तविक वक्र के एक्स बिंदुओं के परिणामस्वरूप मूल वक्र के 10% द्वारा घटाए गए हैं और घटाए गए हैं। बेशक यह एक बुरा दृष्टिकोण है, लेकिन वक्र के उस भाग के लिए कम से कम जो लंबवत है, यह काम करता है। लेकिन जैसे ही वक्र अपने गैर ऊर्ध्वाधर खंड पर है, इस चाल अब और काम नहीं करता है, के रूप में आप नीचे चित्र में देख सकते हैं:
यहाँ कोड है कि मैं लिफाफा आकर्षित करने के लिए उपयोग कर रहा हूँ है :
public Bitmap DrawEnvelope(double[,] pinData, float vLimit, float iLimit)
{
g = Graphics.FromImage(box);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
PointF[] u = new PointF[pinData.GetLength(0)]; //Up line
PointF[] d = new PointF[pinData.GetLength(0)]; //Down Line
List<PointF> joinedCurves = new List<PointF>();
float posX = xMaxValue * (vLimit/100);
float minX = posX * -1;
for (int i = 0; i < pinData.GetLength(0); i++)
{
u[i] = new PointF(400 * (1 + (((float)pinData[i, 0]) + minX)/(xMaxValue + vExpand)), 400 * (1 - ((float)pinData[i, 1] * GetInvers((yMaxValue + iExpand)))));
}
for (int i = 0; i < pinData.GetLength(0); i++)
{
d[i] = new PointF(400 * (1 + (((float)pinData[i, 0]) + posX)/(xMaxValue + vExpand)), 400 * (1 - ((float)pinData[i, 1] * GetInvers((yMaxValue + iExpand)))));
}
Pen pengraph = new Pen(Color.FromArgb(50, 0 ,0 ,200), 1F);
pengraph.Alignment = PenAlignment.Center;
joinedCurves.AddRange(u);
joinedCurves.AddRange(d.Reverse());
PointF[] fillPoints = joinedCurves.ToArray();
SolidBrush fillBrush = new SolidBrush(Color.FromArgb(40, 0, 0, 250));
FillMode newFillMode = FillMode.Alternate;
g.FillClosedCurve(fillBrush, fillPoints, newFillMode, 0);
g.Dispose();
return box;
}
हरी हलकों अपने आप से जोड़ रहे हैं, और वे क्षेत्र है कि दूसरी अवस्था (लाल एक) संभावित है मूल वक्र से एक अंतर बड़ा 10% से है संकेत मिलता है।
अच्छा होगा अगर कोई मुझे सही तरीके से रखता है, तो मुझे मूल वक्र के चारों ओर एक अच्छा लिफाफा प्राप्त करने के लिए क्या देखना चाहिए?
अद्यतन क्योंकि मैं ऐसा noob हूँ मैं नहीं कर सकते अब तक इस सवाल का जवाब दिया लागू करने के लिए एक रास्ता खोजने, तो अगर somone कृपया मुझे इस समस्या का कम से कम एक कोडन दृष्टिकोण दिखा सकते हैं देखने के लिए एक इनाम रख दिया।
लिफाफा + मतलब है? यदि ऐसा है, तो मुझे लगता है कि आपको जिस चीज की आवश्यकता है, वह वास्तव में "10% के भीतर" के बारे में अधिक निश्चितता है। प्रत्येक वोल्टेज पर 10% के भीतर वर्तमान? प्रत्येक वर्तमान में 10% के भीतर वोल्टेज? कुछ और बात? यदि यह स्कूल/विश्वविद्यालय असाइनमेंट से आता है, तो वास्तविक शब्द क्या था? यदि ऐसा कुछ है जो आप व्यावसायिक कारणों से कर रहे हैं, अंतर्निहित आवश्यकताओं क्या हैं? एक बार यह स्पष्ट हो जाने पर, यह संभवतया स्पष्ट होगा कि आपका "लिफाफा" कैसा दिखना चाहिए। –
क्या आप अपने मूल वक्र को फिर से प्लॉट नहीं कर सकते हैं, लाइन की मोटाई बहुत बड़ी और अस्पष्टता कम कर सकते हैं? – Dan
@ डैन मैंने पहले से ही आकार में एक बड़ी कलम के साथ मूल वक्र बनाने की कोशिश की है, लेकिन यह एक बुरा विचार है कि परिणाम अब मैं जो कर रहा हूं उससे भी बदतर होगा। –