Tìm một vectơ đơn vị chính xác ở giữa hai đoạn đường được kết nối


8

Có vẻ như là một câu hỏi nhanh chóng và dễ dàng nhưng tôi không thể tìm thấy chính xác những gì tôi đang tìm kiếm:

Làm thế nào để tính toán một vectơ độ dài đơn vị đang chỉ dọc theo đường thẳng chính xác bằng 50% góc của hai đoạn đường được kết nối?

Một bức tranh nói lên hàng ngàn từ (cũng tốt hơn lời giải thích của tôi!) Ví dụ về một vectơ đơn vị chia đôi hai đoạn đường được kết nối
Vì vậy, về cơ bản tôi muốn tính toán vectơ đơn vị màu xanh cho hai đoạn đường màu đỏ (thực sự là 3 điểm và do đó được đảm bảo kết nối)

Các đoạn màu đỏ có độ dài tùy ý và kết quả không phải là một đơn vị, nó sẽ dễ dàng hơn đối với tôi.
Cũng có ích khi có cách buộc vectơ kết quả chỉ theo một hướng nhất định (liên quan đến các phân đoạn đầu vào), điều này không cần thiết vì tôi nghĩ tôi có thể giải quyết vấn đề này - vì cuối cùng các phân đoạn dòng đầu vào hình thành một n-gon.

Bất kỳ ví dụ nào sẽ là lý tưởng trong C ++, nhưng các ngôn ngữ khác đều được chào đón.

Rất cám ơn cho bất kỳ con trỏ.

Câu trả lời:


13

Tạo và chuẩn hóa hai vectơ từ đoạn màu đỏ của bạn, bắt đầu từ đỉnh comon của chúng, sau đó thêm kết quả (thành phần theo thành phần). Sau đó, bạn có thể bình thường hóa đầu ra nếu bạn muốn có được một vectơ đơn vị.

Vấn đề là bạn sẽ luôn luôn là trường hợp thứ hai, vì góc giữa 2 vectơ sẽ luôn nhỏ hơn 180 °. Nhưng sau đó tất nhiên bạn chỉ có thể tạo ra các vectơ ngược lại và xem cái nào phù hợp hơn với mục đích của bạn.

Ngoài ra có một trường hợp đặc biệt khi cả hai vectơ được căn chỉnh và trung bình sẽ là 0 (nhưng bạn có thể dễ dàng phát hiện ra nó).


Tuyệt vời Tôi nghĩ rằng đây chính xác là những gì tôi đang tìm kiếm! Tôi biết điều đó thật dễ dàng :) Tôi sẽ để nó mở chỉ để xem những phản hồi khác tôi nhận được ... Cảm ơn
Adam Naylor

Tôi chuẩn bị viết ra một phương pháp phức tạp hơn liên quan đến sản phẩm chấm mặc dù tôi đã sử dụng phương pháp đơn giản này trước đây, doh!
CiscoIPPhone

Ý bạn là gì khi "Vấn đề là bạn sẽ luôn luôn là trường hợp thứ hai"?
CiscoIPPhone

@CiscoIPPhone Tôi tin rằng anh ấy đang tham khảo sơ đồ của tôi. Một giải pháp sản phẩm chấm được chào đón nhiều hơn CiscoIPPhone, ít nhất là tôi sẽ cho nó +1 :)
Adam Naylor

Quả thực tôi đã đề cập đến hình ảnh của bạn. Sử dụng một sản phẩm chấm, bạn có thể có được góc giữa hai vectơ, nhưng một lần nữa nó sẽ ở dưới 180 °.
XGouchet

1

Tôi nghĩ rằng bạn có thể có được hướng thống nhất bằng cách xử lý điều này như thể bạn đang tạo một đỉnh 2D bình thường. Đó là:

  1. Lấy từng vectơ màu đỏ, hoán đổi các thành phần x và y và phủ định một trong số chúng để tạo các quy tắc.

  2. Bình thường hóa chúng.

  3. Tính tổng hai vectơ đó và tái chuẩn hóa.

Có lẽ bạn cũng muốn kiểm tra trường hợp hai đường màu đỏ nằm chồng lên nhau - sự tái chuẩn hóa cuối cùng sẽ cố gắng chia cho số 0 ở đó.


Cảm ơn Adam, cách tiếp cận này có một tên? Tôi muốn xem xét thêm ...
Adam Naylor

Không phải là tôi biết. Thủ thuật tạo vectơ thông thường được giải thích tại stackoverflow.com/questions/1243614/ Khăn
Adam

0

Đặt A và B là vectơ của bạn:

kết quả

Các vectơ tổng không cần phải là vectơ đơn vị mà chỉ đơn giản là có độ dài bằng nhau, nếu | A | > = | B |, bạn có thể:

kết quả tương đương

ổn định hơn về số lượng vì bạn chỉ có một phân số và mẫu số lớn hơn

tổng hợp hoạt động như thế nào

Kết quả tương tự có thể thu được bằng phép con, một lần nữa các vectơ phải có độ dài bằng nhau

Điều này chỉ hoạt động cho các góc không lồi; bạn chỉ cần kiểm tra xem góc của bạn có lồi và nhân H với -1 không


Tôi không nghĩ rằng nó sẽ hoạt động nếu | A | ! = | B | ... xem xét A = [0,1] B = [100,0], kết quả không phải là [.707, .707]
Richard Fabian

@Richard Fabian Bạn nói đúng, tôi đã quên bất đẳng thức Tam giác!
FxIII
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.