Giao điểm của vectơ và tam giác


7

Tôi đang cố gắng tạo bề mặt cảm ứng hình tam giác cho iOS nơi người dùng có thể kéo quanh một điểm bên trong hình tam giác này. Sử dụng thông tin từ trang này , thật dễ dàng để biết liệu điểm kéo ở bên trong hay bên ngoài tam giác. Tuy nhiên, tôi muốn cắt điểm vào các cạnh tam giác nếu người dùng kéo ra ngoài tam giác.

Điều này dễ dàng cho bên AB và bên AC , vì tôi chỉ cần đặt vectơ u hoặc v tương ứng bằng 0 nếu ngón tay của người dùng kéo ra ngoài các cạnh này. Tuy nhiên, tôi không chắc chắn làm thế nào để tìm điểm p, bên BC. Tôi cần tìm điểm giao nhau này nếu người dùng kéo ngón tay ra ngoài rìa BC .

tam giác với nhãn điểm và vector


Đơn giản chỉ cần lấy phép chiếu vô hướng của vectơ (B (u + v)) trên vectơ (BC), sử dụng Dotproduct, chia nó cho độ dài bình phương của BC.
Martijn Courteaux

Câu trả lời:


2

Tất cả các điểm trên cạnh BC đều có thuộc tính | u | + | v | = 1. Giảm độ lớn của vectơ dài hơn để thuộc tính này là đúng sẽ giúp bạn có điểm giao nhau. Trong ảnh của bạn, điều này có nghĩa là giảm độ lớn của v bằng 0,245764829343853. Điều này chỉ hoạt động nếu dòng của bạn từ A đến ngón tay đi qua BC.


1
Để giải thích: nếu bạn phát hiện u + v> 1, sau đó chia tỷ lệ các giá trị (u, v) theo 1 / (u + v); điều đó sẽ rút ngắn vectơ u + v để nó hạ cánh ngay trên cạnh.
Nathan Reed

1

Giả sử bạn có tọa độ cho A, B và C (mà chúng ta sẽ gọi Ax, Ay, v.v.) và D = u + v, điểm giao nhau là:

X = ((Bx - Cx) (Ax * Dy - Ay * Dx) - (Bx * Cy - By * Cx) (Ax - Dx))/((By - Cy) (Ax - Dx) - (Bx - Cx) (Ay - Dy))

Y = ((By - Cy) (Ax * Dy - Ay * Dx) - (Bx * Cy - By * Cx) (Ay - Dy))/((By - Cy) (Ax - Dx) - (Bx - Cx) (Ay - Dy))

Xem thêm bài viết của Wikipedia về giao lộ Line-line .

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.