2010-09-29 27 views
7

मैं क्षैतिज और लंबवत बिंदुओं की गणना कर सकता हूं, लेकिन मैं यह समझ नहीं सकता कि विकर्ण बिंदुओं का उपयोग करके दूरी की गणना कैसे करें। क्या कोई इस में मेरी मदद कर सकता है।मैं विकर्ण दूरी बिंदुओं को कैसे माप सकता हूं?

private float ComputeDistance(float point1, float point2) 
{ 
     float sol1 = point1 - point2; 
     float sol2 = (float)Math.Abs(Math.Sqrt(sol1 * sol1)); 

     return sol2; 
} 

protected override void OnMouseMove(MouseEventArgs e) 
    { 

     _endPoint.X = e.X; 
     _endPoint.Y = e.Y; 

     if (ComputeDistance(_startPoint.X, _endPoint.X) <= 10) 
     { 
      str = ComputeDistance(_startPoint.Y, _endPoint.Y).ToString(); 
     } 
     else 
     { 
      if (ComputeDistance(_startPoint.Y, _endPoint.Y) <= 10) 
      { 
       str = ComputeDistance(_startPoint.X, _endPoint.X).ToString(); 
      } 
     } 
    } 

यह मानते हुए कि _startPoint पहले से ही स्थापित किया गया है:

यहाँ मेरी क्षैतिज और ऊर्ध्वाधर मापने के लिए कोड है।

alt text

इस छवि में विकर्ण बिंदु स्पष्ट रूप से गलत है।

+0

गणित। Sqrt (sol1 * sol1) == Math.Abs ​​(sol1) –

उत्तर

17

आपको पायथागोरस प्रमेय का उपयोग करने की आवश्यकता है।

d = Math.Sqrt(Math.Pow(end.x - start.x, 2) + Math.Pow(end.y - start.y, 2)) 
+0

यह एक पाइथागोरियन है, रुको मैं इसे आजमाउंगा। – Rye

+0

अच्छी चीजें। इसने काम कर दिया। धन्यवाद एंड्रयू। पाइथागोरस 'प्रमेय – Rye

+1

+1 इतना उपयोग किया जाता है कि यह गणित पुस्तकालय IMHO का हिस्सा होना चाहिए। – Xander

6

मैं तुम्हें Euclidean distance सूत्र की तलाश कर रहे है।

गणित में, इयूक्लिडियन दूरी या इयूक्लिडियन मीट्रिक दो अंक के बीच "साधारण" दूरी है कि एक एक शासक के साथ मापने होता है, और पाइथागोरस सूत्र द्वारा दिया जाता है।

+0

+1 को इंगित करने के लिए +1 यह इंगित करने के लिए कि वास्तव में दूरी की गणना करने के कई तरीके हैं और यूक्लिडियन दूरी शायद यहां वांछित है। – Chris

0

बहुत समय बाद ... मैं जोड़ने के लिए है कि आप .NET में से कुछ में निर्मित कार्यक्षमता इस्तेमाल कर सकते हैं करना चाहते हैं:

using System.Windows; 

Point p1 = new Point(x1, y1); 
Point p2 = new Point(x2, y2); 
Vector v = p1 - p2; 
double distance = v.Length; 

या बस:

static double Distance(double x1, double x2, double y1, double y2) 
{ 
    return (new Point(x1, y1) - new Point(x2, y2)).Length; 
} 
संबंधित मुद्दे