कैनवास में दो बिंदुओं के बीच दूरी प्राप्त करें


100

मेरे पास कैनवस ड्रॉइंग टैब है और मैं चाहता हूं कि लाइनविद दो अंतिम मूसमोव समन्वय अपडेट के बीच की दूरी पर आधारित हो। मैं खुद को चौड़ा करने के लिए दूरी का अनुवाद करूंगा, मुझे बस यह जानना होगा कि उन बिंदुओं के बीच दूरी कैसे प्राप्त करें (मेरे पास पहले से ही उन बिंदुओं के निर्देशांक हैं)।

जवाबों:


208

आप इसे पाइथागोरस प्रमेय के साथ कर सकते हैं

यदि आपके दो अंक (X1, y1) और (x2, y2) हैं, तो आप x में अंतर और y में अंतर की गणना कर सकते हैं, उन्हें a और b कह सकते हैं।

यहां छवि विवरण दर्ज करें

var a = x1 - x2;
var b = y1 - y2;

var c = Math.sqrt( a*a + b*b );

// c is the distance

9
आप var c = Math.sqrt ( a + b b) को छोटा कर सकते हैं ; to var c = Math.hypot (ए, बी);
evgpisarchik

2
ए ^ 2 + बी ^ 2 = सी ^ 2 हाइपोटेनस समीकरण
काड

यदि आप जाते हैं x1 - x2, y1 - y2या यह कोई अंतर है x2 - x1, y2 - y1?
रमज़ान Chasygov

1
@RamzanChasygov इस मामले में कोई अंतर नहीं है क्योंकि प्रत्येक मान चुकता है! तो क्या आदेश जैसा था 7 - 5 = 2या 5 - 7 = -2कोई फर्क नहीं पड़ेगा। -2 * -2 = 4 2 * 2 = 4
rdmurphy

166

ध्यान दें कि Math.hypotES2015 मानक का हिस्सा है। MDN डॉक्टर पर एक अच्छा पॉलीफ़िल भी हैइस सुविधा के लिए ।

इसलिए दूरी हासिल करना उतना ही आसान हो जाता है Math.hypot(x2-x1, y2-y1)


26

http://en.wikipedia.org/wiki/Euclidean_distance

यदि आपके पास निर्देशांक हैं, तो दूरी की गणना करने के लिए सूत्र का उपयोग करें:

var dist = Math.sqrt( Math.pow((x1-x2), 2) + Math.pow((y1-y2), 2) );

यदि आपका प्लेटफ़ॉर्म ऑपरेटर का समर्थन करता है** , तो आप इसके बजाय इसका उपयोग कर सकते हैं:

const dist = Math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2);

1

दो निर्देशांक x और y के बीच की दूरी! X1 और y1 पहला बिंदु / स्थिति है, x2 और y2 दूसरा बिंदु / स्थिति है!

function diff (num1, num2) {
  if (num1 > num2) {
    return (num1 - num2);
  } else {
    return (num2 - num1);
  }
};

function dist (x1, y1, x2, y2) {
  var deltaX = diff(x1, x2);
  var deltaY = diff(y1, y2);
  var dist = Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));
  return (dist);
};


आपको Math.absइसके बजाय उपयोग करना चाहिए diff
मोशे सिमांटोव

3
आपको diffएक संख्या के वर्ग के रूप में उपयोग करने की आवश्यकता नहीं है हमेशा एक सकारात्मक संख्या होगी। यदि x1 - y1नकारात्मक है, तब (x1 - y1) ^ 2भी सकारात्मक है।
रेडवॉल्फ कार्यक्रम

0

मैं इस गणना का उपयोग उन चीजों में करता हूं जो मैं बनाता हूं, इसलिए मैं इसे गणित वस्तु में जोड़ना पसंद करता हूं:

Math.dist=function(x1,y1,x2,y2){ 
  if(!x2) x2=0; 
  if(!y2) y2=0;
  return Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); 
}
Math.dist(0,0, 3,4); //the output will be 5
Math.dist(1,1, 4,5); //the output will be 5
Math.dist(3,4); //the output will be 5

अपडेट करें:

यह दृष्टिकोण विशेष रूप से खुश करने वाला होता है जब आप कुछ स्थितियों में इस (जैसे मैं अक्सर करते हैं) को समाप्त करते हैं:

varName.dist=Math.sqrt( ( (varName.paramX-varX)/2-cx )*( (varName.paramX-varX)/2-cx ) + ( (varName.paramY-varY)/2-cy )*( (varName.paramY-varY)/2-cy ) );

वह डरावनी चीज बहुत अधिक प्रबंधनीय हो जाती है:

varName.dist=Math.dist((varName.paramX-varX)/2, (varName.paramY-varY)/2, cx, cy);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.