Câu trả lời này tương tự như một số câu trả lời khác nhưng tôi nghĩ giải thích toán học nhiều hơn và cho phép bạn kết hợp nó vào một chương trình dễ dàng hơn.
Bạn có thể tìm thấy độ dốc của đường "đã biết" bằng cách thực hiện (Ay-By)/(Ax-Bx)
(trong đó Ay
là toạ độ y của A
, v.v.). Cho phép chỉ gọi số này M
vì nó hoàn toàn có thể tính toán được.
Nếu hai dòng song song với nhau thì bạn có thể làm việc ra các gradient của đầu dây bên kia trong cùng một cách:
Gradient = (Cy-Dy)/(Cx-Dx) = M
nào sắp xếp lại để (Cy-Dy) = M*(Cx-Dx)
Chúng tôi cũng biết rằng C->D
là một chiều dài nhất định (cho phép gọi nó là L). Vì vậy, chúng ta có thể nói
(Cy-Dy)^2+(Cx-Dx)^2 = L^2
Sử dụng phương trình dốc, chúng ta có thể thay thế để có được:
(M^2+1)(Cx-Dx)^2 = L^2
Với chúng tôi biết những gì M, L và Dx là chúng ta có thể dễ dàng giải quyết này:
Cx = ((L^2)/(M^2+1))^0.5 + Dx
sau đó chúng ta có thể sử dụng giá trị này của Cx
cùng với một trong hai phương trình (Gradient có lẽ là dễ nhất) để có được Cy
.
Lưu ý rằng phương trình cuối cùng có căn bậc hai có thể dương hoặc âm, do đó bạn sẽ nhận được hai giá trị có thể là Cx
và do đó có thể có hai giá trị có thể là Cy
. Điều này tương đương với việc di chuyển theo hai hướng đối diện trên đường song song từ D
.
Edit:
Như đã đề cập trong ý kiến này sẽ thất bại nếu dòng là dọc (tức là Ax-Bx = 0
). Bạn sẽ cần phải đặc biệt trường hợp này, nhưng trong trường hợp này câu trả lời sẽ trở thành một trường hợp tầm thường chỉ cần thêm hoặc trừ chiều dài của bạn từ giá trị của Cy.
nhu cầu "thuộc về mathoverflow" tùy chọn chặt chẽ, mặc dù họ có lẽ muốn chê bai gì bạn đã hỏi một câu hỏi đơn giản như: p – meagar
@meager: Từ những gì tôi đã nhìn thấy, họ sẽ ngừng ngắn lửa nhưng họ cũng có thể là một chút wee. :-) –
Tôi là một lập trình viên tuyệt vời nhưng kỹ năng toán học của tôi luôn là NULL – jmasterx