Yêu cầu thg 3 26, 2019 5:34 SA 1989 0 2
  • 1989 0 2
+1

Hỏi về cách xét vị trí tương đối của 2 đường tròn bằng js

Chia sẻ
  • 1989 0 2

E đang làm 1 đề bài xét vị trí tương đối của 2 đường tròn bằng js, có nghĩ ra cách là xét OO' = R + r thì là 2 đường tròn giao nhau.... mà viết vào code e k biết viết sao, đề bài cụ thể như sau ạ :

    1. Tạo module circle.js export 1 constructor function tên là Circle
    1. Circle có 3 property là x, y, radius (toạ độ x, y và bán kính)
    1. Circle có 1 method là isOverlapped (overlap là chồng lấn, đè lên nhau), trả về -1 nếu 2 hình tròn này đè lên nhau, trả về 1 nếu 2 hình tròn không đụng nhau, trả về 0 nếu 2 hình tròn tiếp xúc nhau.
    1. Test thử và code e viết được 1 tí ở link này :https://repl.it/@Cao_Xuan_SangXu/GrippingAllTabs

Phần ý 1 e chưa làm vì đang muốn viết thử vào 1 file xem có chạy được rồi mới tách ra file circle sau :3 mọi người giúp e với ạ, e cảm ơn

2 CÂU TRẢ LỜI


Đã trả lời thg 3 26, 2019 5:43 SA
Đã được chấp nhận
+8

Bài toán này anh nghĩ em có thể giải quyết như sau:

  • Tính khoảng cách giữa tâm 2 đường tròn

d=(x1x2)2+(y1y2)2d = \sqrt{{(x_{1} - x_{2})}^2 + {(y_{1} - y_{2})}^2}

  • So sánh khoảng các giữa tâm 2 đường tròn, với tổng độ dài 2 bán kính rr
d > r1 + r2 => return 1 
d == r1 + r2 => return 0
d < r1 + r2 => return -1

Code

function Circle(x, y, r) {
    this.x = x;
    this.y = y;
    this.r = r;

};
Circle.prototype.isOverlapped = function(c) {
  var d = Math.sqrt(Math.pow(this.x - c.x, 2) + Math.pow(this.y - c.y, 2));
  if (d == this.r + c.r) {
    return 0;
  }
  if (d < this.r + c.r) {
    return -1;
  }
  return 1;
}
Chia sẻ
thg 3 26, 2019 6:08 SA

Em cảm ơn ạ

Đã trả lời thg 3 26, 2019 6:10 SA
0

Ý 1 bạn tham khảo thử nhé https://repl.it/@hungkieu/GrippingAllTabs

Chia sẻ
thg 3 26, 2019 12:01 CH

em cảm ơn ạ 😁

thg 7 20, 2020 9:00 SA
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí