Câu trả lời:
Bạn có thể làm điều đó với định lý pythagoras
Nếu bạn có hai điểm (x1, y1) và (x2, y2) thì bạn có thể tính hiệu số x và hiệu số y, gọi chúng là a và b.
var a = x1 - x2;
var b = y1 - y2;
var c = Math.sqrt( a*a + b*b );
// c is the distance
x1 - x2, y1 - y2
hoặc x2 - x1, y2 - y1
?
7 - 5 = 2
hay 5 - 7 = -2
không quan trọng. -2 * -2 = 4
2 * 2 = 4
Lưu ý rằng đó Math.hypot
là một phần của tiêu chuẩn ES2015. Ngoài ra còn có một polyfill tốt trên tài liệu MDN cho tính năng này.
Vì vậy, nhận được khoảng cách trở nên dễ dàng như Math.hypot(x2-x1, y2-y1)
.
http://en.wikipedia.org/wiki/Euclidean_distance
Nếu bạn có tọa độ, hãy sử dụng công thức để tính khoảng cách:
var dist = Math.sqrt( Math.pow((x1-x2), 2) + Math.pow((y1-y2), 2) );
Nếu nền tảng của bạn hỗ trợ **
nhà điều hành , thay vào đó bạn có thể sử dụng:
const dist = Math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2);
Khoảng cách giữa hai tọa độ x và y! x1 và y1 là điểm / vị trí đầu tiên, x2 và y2 là điểm / vị trí thứ hai!
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
thay vì diff
.
diff
vì bình phương một số sẽ luôn dẫn đến một số dương. Nếu x1 - y1
là tiêu cực, (x1 - y1) ^ 2
là tích cực vẫn còn.
tôi có xu hướng sử dụng phép tính này rất nhiều trong những việc tôi làm, vì vậy tôi muốn thêm nó vào đối tượng Math:
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
Cập nhật:
cách tiếp cận này đặc biệt vui khi bạn rơi vào những tình huống tương tự như thế này (tôi thường làm):
varName.dist=Math.sqrt( ( (varName.paramX-varX)/2-cx )*( (varName.paramX-varX)/2-cx ) + ( (varName.paramY-varY)/2-cy )*( (varName.paramY-varY)/2-cy ) );
thứ khủng khiếp đó trở nên dễ quản lý hơn nhiều:
varName.dist=Math.dist((varName.paramX-varX)/2, (varName.paramY-varY)/2, cx, cy);