Cần giúp về hàm kiểm tra va chạm giữa 2 hình chữ nhật

Xin chào mọi người,
Hiện tại em đang tập code mấy cái physic example để nâng cao điểm môn Lý :smiley: . Trước khi bắt đầu làm thì em đã biết được cách để kiểm tra va chạm rồi NHƯNG vẫn chưa biết nó thực sự va chạm ở HƯỚNG NÀO để có thể xài DL III newton.

if ( object.pos.x + object.diameter/2 >= this.pos.x &&
     object.pos.x - object.diameter/2 <= this.pos.x + this.width &&
     object.pos.y + object.diameter/2 >= this.pos.y  &&
     object.pos.y - object.diameter/2 <= this.pos.y + this.height ) 
         //return true;

Trong đoạn mã ở trên thì:

  • object đại diện cho quả bóng
  • this đại diện cho hình chữ nhật

Mọi người giúp em trả về 1 trong 4 giá trị “left”, “right”, “top”, “bottom” (va chạm cạnh bên trái của hình chữ nhật thì return “left”, cạnh bên phải thì retun “right”), có giải thích thì quá tốt luôn :v

Bắt va chạm dc rồi thì đảo ngược gia tốc để nó di chuyển theo hướng ngược lại rồi cho chậm dần đều. Đó là cách đơn giản, còn phức tạp hơn thì anh nghĩ em mới lớp 10, chưa dc học mấy thứ ma trận vi phân nên làm cách đơn giản dc rồi.

Nếu em muốn tìm hiểu sâu mấy giải thuật intersection testing thì tìm đọc cuốn real-time rendering 3rd edition nhé, chapter 16 có giải thích tất cả và ở mức độ sâu luôn.

4 Likes

Bữa trước em cũng thử cho object.vel.x *= -1; object.vel.y *= -1; rồi nhưng kết quả là:
image
Kết quả em mong muốn:
image

Vì F = ma nên em dùng gia tốc ở đây mới chính xác, xong em có thể dùng PhysX, có sẵn mấy module này để em kiểm tra tính chính xác của giải thuật em viết.

4 Likes

Cái module physicX em không thấy tài liệu hướng dân ở đâu cả anh ơi :V
Em mới làm xong demo web nhưng có vẻ khi quả bóng có vận tốc lơn hơn height của hình chữ nhật thì có thể xảy ra trường hợp “đi xuyên tường” :(((
Anh có thể tạo thêm terrain cho game bằng cách nhập: Terrain.push({x:, y:, width:, height:})
My web

2 Likes

Không liên quan lắm nhưng mà bug rồi :kissing:

4 Likes

@Khoa_Bean chuyện xuyên tường vì cái tick của em bé hơn rất nhiều so với vận tốc khi va chạm của vật. Để khắc phục người ta dùng ray-cast physic. Tức là từ object sẽ bắn ra nhiều tia, khi có điểm va chạm với vật khác sẽ lập tức thông báo kết quả và điểm va chạm.

Còn tài liệu để học PhysX thì em tìm cuốn này nha:

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?