Làm thế nào tôi có thể kiểm tra nếu một điểm nằm giữa hai đường thẳng song song?


9

Trong trò chơi tôi đang thiết kế, có một vụ nổ bắn ra từ điểm gốc về hướng chuột. Độ rộng của vụ nổ này sẽ luôn giống nhau.

Dọc phía dưới màn hình (những gì hiện tại) hình vuông di chuyển sẽ được thực hiện bởi vụ nổ mà người chơi điều khiển.

Hiện tại tôi đang cố gắng tìm ra cách để khám phá xem các góc của các hình vuông này có nằm trong hai đường giới hạn của vụ nổ hay không. Tôi nghĩ cách tốt nhất để làm điều này là xoay các góc của hình vuông xung quanh điểm gốc như thể vụ nổ hoàn toàn nằm ngang và xem giá trị Y của các góc nhỏ hơn hoặc bằng chiều rộng của vụ nổ sẽ có nghĩa là họ nằm trong khu vực bị ảnh hưởng, nhưng tôi không thể làm việc

Câu trả lời:


11

Điểm nằm giữa 2 đường thẳng song song nếu đó là một bên của một dòng và bên kia của dòng khác (cung cấp các điểm theo cùng một hướng).

Bạn có thể sử dụng câu trả lời hàng đầu từ câu hỏi này tại stackoverflow để tìm ra phía nào của một dòng (được xác định bởi 2 điểm trên đó) một điểm nằm trên.


Một phương pháp khác sẽ là tính khoảng cách từ điểm đến đường giữa và so sánh nó với một nửa độ dày của vụ nổ của bạn.


2

Đây là cách tôi thực hiện (với một kiểm tra bổ sung xem các mặt phẳng được cung cấp có thực sự song song hay không. Các đối tượng Mặt phẳng chứa phương trình mặt phẳng ở dạng này: Ax + By + Cz + D = 0, mà bạn có thể dễ dàng tạo từ 3 đã cho điểm hoặc từ một điểm và bình thường (xem trang này nếu bạn không chắc chắn về toán học: http://paulbourke.net/geometry/pointlineplane/ )

bool isPointBetweenParallelPlanes(const vec3 point, const Plane a, const Plane b){
// test if planes are parallel
vec3 cross = a.normal CROSS b.normal;
assert((a.normal CROSS b.normal) == vec3(0,0,0) && "These planes should be parallel.");
return ((a.normal DOT point) + a.D) * ((b.normal DOT point) + b.D) < 0.0;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.