Bài toán: Cho 3 cosin góc phương l, m, n trong không gian 3D. Kiểm tra xem chúng có thể là cosin góc phương của một đường thẳng hay không.
Điều kiện toán học
Cosin góc phương của vector thỏa mãn: l² + m² + n² = 1.
Do sai số làm tròn máy tính, kiểm tra giá trị tuyệt đối của hiệu số với 1 có nhỏ hơn ngưỡng cho phép (epsilon).
Triển khai Python
def solve(l, m, n):
angle = l * l + m * m + n * n
angle = round(angle, 8)
return abs(1 - angle) < 0.0001
# Test
print(solve(0.42426, 0.56568, 0.7071)) # True: vector (3,4,5) chuẩn hóa
# |(3,4,5)| = √50 ≈ 7.071
# l=3/7.071≈0.424, m=4/7.071≈0.566, n=5/7.071≈0.707
# l²+m²+n² = 9/50 + 16/50 + 25/50 = 50/50 = 1
print(solve(0.5, 0.5, 0.5)) # False: 0.25+0.25+0.25=0.75 ≠ 1
print(solve(1, 0, 0)) # True: vector trục x
Kết quả
True
Giải thích
- Tính tổng bình phương 3 cosin góc.
- Làm tròn 8 chữ số thập phân để giảm sai số floating point.
- Kiểm tra
|1 - sum| < 0.0001(epsilon = 1e-4). - Độ phức tạp: O(1).