Thuật toán va chạm giữa hai hình tròn

Thuật toán va chạm giữa hai hình tròn

Xét va chạm giữa các đối tượng là một trong các yếu tố sử dụng nhiều trong các hệ thống vật lý, trong ứng dụng được thấy nhiều trong game, … Bài viết này hướng dẫn cách phát hiện một va chạm giữa các đối tượng hình tròn với nhau và giải thích về thuật toán va chạm giữa hai hình tròn.

Thuật toán va chạm giữa hai hình tròn

Thuật toán

Mọi điểm nằm trên đường tròn cách đều tâm, nên việc kiểm tra va chạm giữa hai hình tròn sẽ được xác định dựa vào khoảng cách tâm giữa chúng.

Cho 2 đường tròn:

  • C1 có bán kính r1 và tâm có toạ độ A(x1; y1).
  • C2 có bán kính r2 và tâm có toạ độ B(x2; y2).

Để xác định khoảng cách giữa hai điểm, dựa vào công thức:

AB = √((x1 - x2)2 + (y1 - y2)2)

Phân tích

Hai đường tròn C1 và C2 rời nhau

Khi: AB > r1+ r2

Thuật toán va chạm giữa hai hình tròn

AB > r1 + r2

Hai đường tròn C1 và C2 lồng nhau

Khi: AB < r1 + r2

Thuật toán va chạm giữa hai hình tròn

AB  < r1 + r2

Ngoài ra còn trường hợp tiếp xúc: AB = r1 + r2.

Code mẫu JavaScript xét sự tương quan giữa 2 hình tròn

class Point {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }
}

class Circle {
  constructor(_o, _r) {
  this.o = _o;
  this.r = _r;
  }
}

function distance2( A,  B) {
  return (A.x - B.x) * (A.x - B.x) + (A.y - B.y) * (A.y - B.y);
}

function checkCollision( c1,  c2) {
  return ((c1.r + c2.r) * (c1.r + c2.r) < distance2(c1.o, c2.o));
}

function main() {
  let p1 = new Point(2.5, 6.6);
  let p2 = new Point(3.7, 7.3);

  let c1 = new Circle(p1, 2.5);
  let c2 = new Circle(p2, 3.4);

  if (checkCollision(c1, c2))
    console.log("AB");
  else
    console.log("A   B");

  return 0;
}

main();Code language: JavaScript (javascript)

Cảm ơn bạn đã theo dõi bài viết!

Các bạn có thể tham khảo các bài viết hay về JavaScript tại đây.


Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.

TỔNG HỢP TÀI LIỆU HỌC LẬP TRÌNH CƠ BẢN CHO NGƯỜI MỚI BẮT ĐẦU

KHOÁ HỌC BOOTCAMP JAVA/JAVASCRIPT/PHP TRỞ THÀNH LẬP TRÌNH VIÊN TRONG 5-6 THÁNG

Leave a Reply

Your email address will not be published. Required fields are marked *