Hướng dẫn how do you find the angle between two points in python? - Làm thế nào để bạn tìm thấy góc giữa hai điểm trong python?

Này Finxters! Hôm nay, bạn sẽ học một chức năng quan trọng mà bạn có thể cần viết trong tương lai: Cách viết chương trình Python để tính góc giữa 2 điểm theo chiều kim đồng hồ. calculate the angle between 2 points in a clockwise motion.

Chúng tôi sẽ sử dụng các nguyên tắc trong ngôn ngữ Python để viết một chương trình làm việc để viết các góc và tính toán góc hoặc radian trong một mặt phẳng nhất định! Chúng tôi sẽ dành thời gian của chúng tôi và giải thích mọi thứ, vì vậy không phải lo lắng khi chúng tôi cùng nhau đi qua điều này!

Vấn đề: Tính toán góc giữa hai điểm

Trong vấn đề cụ thể này, chúng tôi muốn tìm góc theo chiều kim đồng hồ giữa vectơ từ điểm gốc đến điểm A và vectơ từ điểm gốc đến điểm B. Chúng tôi sẽ có ba điểm và hai vectơ để góc của chúng tôi được xác định rõ. Điều này có thể được sử dụng trong cả định nghĩa đại số và hình học. Ví dụ của chúng tôi, chúng tôi sẽ sử dụng định nghĩa hình học.

Những gì chúng tôi muốn thực hiện: viết một chương trình Python sẽ tính toán góc theo chuyển động theo chiều kim đồng hồ. Writing a Python program that will calculate the angle in a clockwise motion.

Chương trình của chúng tôi cần có khả năng tính toán các góc giữa hai điểm từ nguồn gốc nhất định của (0,0), điểm A (0,1) và điểm B (1, -1). 3 điểm này sẽ cho góc 45* từ tổng số 360* bắt đầu từ trung tâm của biểu đồ (x,y).

Tôi muốn cho bạn thấy 2 cách khác nhau để làm điều này. Một cách tôi sẽ có một chương trình được viết ra cho thấy bạn từng bước. Theo cách thứ hai, tôi sẽ chỉ cho bạn một cách viết tương tự như một chương trình, giúp bạn có một lợi thế khi viết một chương trình cho một cuộc phỏng vấn mã.

Phương pháp 1: Viết nó ra - Cách khó

Trong ví dụ này, chúng tôi muốn bắt đầu bằng cách nhập mô -đun math, sau đó tạo một lớp xác định Vector khởi tạo x

v1_theta = math.atan2(v1.y, v1.x)
v2_theta = math.atan2(v2.y, v2.x)

r = (v2_theta - v1_theta) * (180.0 / math.pi)

if r < 0:
    r % 360

print r
0. Chúng tôi tạo các biến sau,
v1_theta = math.atan2(v1.y, v1.x)
v2_theta = math.atan2(v2.y, v2.x)

r = (v2_theta - v1_theta) * (180.0 / math.pi)

if r < 0:
    r % 360

print r
1 và
v1_theta = math.atan2(v1.y, v1.x)
v2_theta = math.atan2(v2.y, v2.x)

r = (v2_theta - v1_theta) * (180.0 / math.pi)

if r < 0:
    r % 360

print r
2 với các tham số mặc định.

import math

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

v1 = Vector(0, 1)
v2 = Vector(0, -1)

Sau đó, từ toán học, chúng tôi sử dụng phương pháp

v1_theta = math.atan2(v1.y, v1.x)
v2_theta = math.atan2(v2.y, v2.x)

r = (v2_theta - v1_theta) * (180.0 / math.pi)

if r < 0:
    r % 360

print r
3, return & nbsp; a
v1_theta = math.atan2(v1.y, v1.x)
v2_theta = math.atan2(v2.y, v2.x)

r = (v2_theta - v1_theta) * (180.0 / math.pi)

if r < 0:
    r % 360

print r
4, trong radians. Kết quả là giữa & nbsp; ________ 15 & nbsp; và & nbsp; ________ 16. Vectơ trong mặt phẳng từ gốc đến điểm & nbsp; ________ 17 & nbsp; làm cho góc này với trục
v1_theta = math.atan2(v1.y, v1.x)
v2_theta = math.atan2(v2.y, v2.x)

r = (v2_theta - v1_theta) * (180.0 / math.pi)

if r < 0:
    r % 360

print r
8 dương. Điểm của & nbsp; ________ 19 & nbsp; là các dấu hiệu của cả hai đầu vào được biết đến, do đó, nó có thể tính toán góc phần tư chính xác cho góc.

Ví dụ: & nbsp; ________ 20 & nbsp; và & nbsp; ________ 21 & nbsp; là cả & nbsp; Chúng tôi lưu các vectơ mới này vào các biến mới:

import numpy as np

def angle_between(p1, p2):
    ang1 = np.arctan2(*p1[::-1])
    ang2 = np.arctan2(*p2[::-1])
    return np.rad2deg((ang1 - ang2) % (2 * np.pi))

A = (1, 0)
B = (1, -1)

print(angle_between(A, B))

# 45.

print(angle_between(B, A))

# 315.
5 và
import numpy as np

def angle_between(p1, p2):
    ang1 = np.arctan2(*p1[::-1])
    ang2 = np.arctan2(*p2[::-1])
    return np.rad2deg((ang1 - ang2) % (2 * np.pi))

A = (1, 0)
B = (1, -1)

print(angle_between(A, B))

# 45.

print(angle_between(B, A))

# 315.
6.

v1_theta = math.atan2(v1.y, v1.x)
v2_theta = math.atan2(v2.y, v2.x)

r = (v2_theta - v1_theta) * (180.0 / math.pi)

if r < 0:
    r % 360

print r

Bằng cách lấy hai điểm này và trừ đi thứ nhất từ ​​điểm thứ hai, nhân nó với sản phẩm của 180 chia cho PI và lưu nó vào một biến (‘

import numpy as np

def angle_between(p1, p2):
    ang1 = np.arctan2(*p1[::-1])
    ang2 = np.arctan2(*p2[::-1])
    return np.rad2deg((ang1 - ang2) % (2 * np.pi))

A = (1, 0)
B = (1, -1)

print(angle_between(A, B))

# 45.

print(angle_between(B, A))

# 315.
7,). Chúng tôi modulo
import numpy as np

def angle_between(p1, p2):
    ang1 = np.arctan2(*p1[::-1])
    ang2 = np.arctan2(*p2[::-1])
    return np.rad2deg((ang1 - ang2) % (2 * np.pi))

A = (1, 0)
B = (1, -1)

print(angle_between(A, B))

# 45.

print(angle_between(B, A))

# 315.
8 bằng 360. R nhỏ hơn 0 vì nó sẽ là một số âm. Sau đó, chúng tôi in
import numpy as np

def angle_between(p1, p2):
    ang1 = np.arctan2(*p1[::-1])
    ang2 = np.arctan2(*p2[::-1])
    return np.rad2deg((ang1 - ang2) % (2 * np.pi))

A = (1, 0)
B = (1, -1)

print(angle_between(A, B))

# 45.

print(angle_between(B, A))

# 315.
7 ra. Đây chỉ là một cách để viết ra vấn đề này. Đó là một chút lộn xộn và nếu chúng ta không cẩn thận, chúng ta có thể dễ dàng nhận được đầu ra trả lời không chính xác.

Phương pháp 2: Viết nó ra - Cách Pythonic với Numpy

Trong ví dụ tiếp theo này, tôi sẽ sử dụng Numpy để có được góc giữa hai điểm và trả lại cho tôi. Khi viết bằng Python, tốt nhất là tốt nhất là theo dõi PEP8 và viết chương trình của bạn đơn giản nhất có thể để lấy ít bộ nhớ hơn trong mã của bạn và do đó ít thời gian chạy hơn khi kiểm tra chương trình của bạn.

Điều đầu tiên chúng tôi sẽ làm là (0,0)0, sau đó xác định góc sử dụng điểm 1 ((0,0)1) và điểm 2 ((0,0)2) làm đối số. Chúng tôi sẽ một lần nữa sử dụng (0,0)3 nhân với (0,0)1 để tìm góc 1 và (0,0)3 nhân với (0,0)2 để tìm góc thứ hai. Chúng tôi sẽ trả về các độ bằng hàm (0,0)7 bằng cách trừ đi góc thứ nhất từ ​​góc thứ hai, sau đó chúng tôi nhân 2 và (0,0)8 sau đó chúng tôi điều chỉnh sản phẩm của hai câu trả lời. Khi chúng tôi nhập vectơ của chúng tôi, chúng tôi nhận được câu trả lời của chúng tôi một cách chính xác khi chúng tôi in.

import numpy as np

def angle_between(p1, p2):
    ang1 = np.arctan2(*p1[::-1])
    ang2 = np.arctan2(*p2[::-1])
    return np.rad2deg((ang1 - ang2) % (2 * np.pi))

A = (1, 0)
B = (1, -1)

print(angle_between(A, B))

# 45.

print(angle_between(B, A))

# 315.

Như bạn có thể thấy in (0,0)9 và (0,1)0 cho chúng ta hai câu trả lời khác nhau! Lý do cho điều này là do điểm đầu tiên là di chuyển theo chiều kim đồng hồ đến điểm thứ hai cho chúng ta số lượng nhỏ hơn. Bằng cách đi ngược chiều kim đồng hồ, chúng ta có được một số lượng lớn hơn nhiều so với góc thực tế mà chúng ta đang tìm kiếm!

Bản tóm tắt

Như bạn thấy, viết chương trình này bằng Python rất dễ dàng vì Python đã xây dựng các mô -đun toán học và numpy để làm cho mã đẹp và sạch sẽ. Nó có vẻ tùy tiện nhưng chương trình này có thể được sử dụng trong một số ứng dụng từ kiến ​​trúc đến tham quan ảo trong khách sạn, căn hộ hoặc thậm chí là nhà hàng.

Như thể hiện trong bức ảnh này, bạn có thể tìm thấy một điểm duy nhất trong một không gian với ba điểm này. Nó cũng có thể được sử dụng trong việc tạo ra một phòng ảo, hoặc chiến đấu với tội phạm khi cố gắng sử dụng khoa học pháp y để bắt một kẻ xấu! Python là ngôn ngữ lập trình tuyệt vời không bao giờ làm tôi ngạc nhiên. Tôi hy vọng rằng sau khi đọc bài viết này, bạn sẽ được truyền cảm hứng để viết các chương trình Python của riêng bạn bằng những gì bạn đã học được ở đây để thêm vào danh mục đầu tư của bạn.