Hướng dẫn python calculate angle of line - python tính toán góc của dòng

Đầu tiên hãy tìm sự khác biệt giữa điểm bắt đầu và điểm cuối (ở đây, đây là một phân đoạn dòng được định hướng, không phải là "dòng", vì các dòng mở rộng vô hạn và không bắt đầu tại một điểm cụ thể).

deltaY = P2_y - P1_y
deltaX = P2_x - P1_x

Sau đó tính toán góc (chạy từ trục X dương ở P1 đến trục y dương tại P1).

angleInDegrees = arctan(deltaY / deltaX) * 180 / PI

Nhưng arctan có thể không lý tưởng, bởi vì phân chia sự khác biệt theo cách này sẽ xóa bỏ sự khác biệt cần thiết để phân biệt góc phần tư nào trong góc bên dưới). Thay vào đó, hãy sử dụng các cách sau nếu ngôn ngữ của bạn bao gồm hàm atan2:

angleInDegrees = atan2(deltaY, deltaX) * 180 / PI

Chỉnh sửa (ngày 22 tháng 2 năm 2017): Tuy nhiên, nói chung, gọi atan2(deltaY,deltaX) chỉ để có được góc thích hợp cho cos

angleInDegrees = arctan(deltaY / deltaX) * 180 / PI
0 có thể không phù hợp. Trong những trường hợp đó, bạn thường có thể làm như sau:

  1. Đối xử với
    angleInDegrees = arctan(deltaY / deltaX) * 180 / PI
    
    1 như một vector.
  2. Bình thường hóa vectơ đó đến một vector đơn vị. Để làm như vậy, chia
    angleInDegrees = arctan(deltaY / deltaX) * 180 / PI
    
    2 và
    angleInDegrees = arctan(deltaY / deltaX) * 180 / PI
    
    3 cho độ dài của vectơ (
    angleInDegrees = arctan(deltaY / deltaX) * 180 / PI
    
    4), trừ khi độ dài là 0.
  3. Sau đó,
    angleInDegrees = arctan(deltaY / deltaX) * 180 / PI
    
    2 bây giờ sẽ là cosin của góc giữa vectơ và trục ngang (theo hướng từ trục x dương đến trục y dương tại P1).
  4. angleInDegrees = arctan(deltaY / deltaX) * 180 / PI
    
    3 bây giờ sẽ là hình sin của góc độ đó.
  5. Nếu chiều dài của vectơ là 0, nó sẽ không có góc giữa nó và trục ngang (vì vậy nó sẽ không có một hình sin và cosin có ý nghĩa).

Chỉnh sửa (ngày 28 tháng 2 năm 2017): Ngay cả khi không bình thường hóa

angleInDegrees = arctan(deltaY / deltaX) * 180 / PI
1:

  • Dấu hiệu của
    angleInDegrees = arctan(deltaY / deltaX) * 180 / PI
    
    2 sẽ cho bạn biết liệu cosin được mô tả trong bước 3 là dương hay âm.
  • Dấu hiệu của
    angleInDegrees = arctan(deltaY / deltaX) * 180 / PI
    
    3 sẽ cho bạn biết liệu sin được mô tả trong bước 4 là dương hay âm.
  • Các dấu hiệu của
    angleInDegrees = arctan(deltaY / deltaX) * 180 / PI
    
    2 và
    angleInDegrees = arctan(deltaY / deltaX) * 180 / PI
    
    3 sẽ cho bạn biết góc phần tư nào ở góc, liên quan đến trục X dương tại P1:
    • angleInDegrees = atan2(deltaY, deltaX) * 180 / PI
      
      4,
      angleInDegrees = atan2(deltaY, deltaX) * 180 / PI
      
      5: 0 đến 90 độ.
    • angleInDegrees = atan2(deltaY, deltaX) * 180 / PI
      
      6,
      angleInDegrees = atan2(deltaY, deltaX) * 180 / PI
      
      5: 90 đến 180 độ.
    • angleInDegrees = atan2(deltaY, deltaX) * 180 / PI
      
      6,
      angleInDegrees = atan2(deltaY, deltaX) * 180 / PI
      
      9: 180 đến 270 độ (-180 đến -90 độ).
    • angleInDegrees = atan2(deltaY, deltaX) * 180 / PI
      
      4,
      angleInDegrees = atan2(deltaY, deltaX) * 180 / PI
      
      9: 270 đến 360 độ (-90 đến 0 độ).

Một triển khai trong Python sử dụng radian (được cung cấp vào ngày 19 tháng 7 năm 2015 bởi Eric Leschinski, người đã chỉnh sửa câu trả lời của tôi):

from math import *
def angle_trunc(a):
    while a < 0.0:
        a += pi * 2
    return a

def getAngleBetweenPoints(x_orig, y_orig, x_landmark, y_landmark):
    deltaY = y_landmark - y_orig
    deltaX = x_landmark - x_orig
    return angle_trunc(atan2(deltaY, deltaX))

angle = getAngleBetweenPoints(5, 2, 1,4)
assert angle >= 0, "angle must be >= 0"
angle = getAngleBetweenPoints(1, 1, 2, 1)
assert angle == 0, "expecting angle to be 0"
angle = getAngleBetweenPoints(2, 1, 1, 1)
assert abs(pi - angle) <= 0.01, "expecting angle to be pi, it is: " + str(angle)
angle = getAngleBetweenPoints(2, 1, 2, 3)
assert abs(angle - pi/2) <= 0.01, "expecting angle to be pi/2, it is: " + str(angle)
angle = getAngleBetweenPoints(2, 1, 2, 0)
assert abs(angle - (pi+pi/2)) <= 0.01, "expecting angle to be pi+pi/2, it is: " + str(angle)
angle = getAngleBetweenPoints(1, 1, 2, 2)
assert abs(angle - (pi/4)) <= 0.01, "expecting angle to be pi/4, it is: " + str(angle)
angle = getAngleBetweenPoints(-1, -1, -2, -2)
assert abs(angle - (pi+pi/4)) <= 0.01, "expecting angle to be pi+pi/4, it is: " + str(angle)
angle = getAngleBetweenPoints(-1, -1, -1, 2)
assert abs(angle - (pi/2)) <= 0.01, "expecting angle to be pi/2, it is: " + str(angle)

Tất cả các bài kiểm tra vượt qua. Xem https://en.wikipedia.org/wiki/unit_circle

Tệp này chứa văn bản unicode hai chiều có thể được giải thích hoặc biên dịch khác với những gì xuất hiện dưới đây. Để xem xét, hãy mở tệp trong một trình soạn thảo cho thấy các ký tự Unicode ẩn. Tìm hiểu thêm về các ký tự unicode hai chiều

==== J A V A ====================================================================================
/**
* Xác định góc của một đường thẳng được vẽ giữa điểm một và hai. Số được trả về, có độ gấp đôi tính bằng độ, cho chúng ta biết chúng ta phải xoay bao nhiêu đường ngang theo chiều kim đồng hồ để phù hợp với đường giữa hai điểm.
* Nếu bạn thích đối phó với các góc bằng cách sử dụng radian thay vì độ, chỉ cần thay đổi dòng cuối cùng thành: "Trả lại toán học.atan2 (ydiff, xdiff);"
*/
công khai kép getLleOflineBetweentWopoints (point.double p1, point.double p2)
{
Double xDiff = p2.x - p1.x;
Double ydiff = p2.y - p1.y;
trả về math.todegrees (math.atan2 (ydiff, xdiff));
}
==== C # ====================================================
/**
* Xác định góc của một đường thẳng được vẽ giữa điểm một và hai. Số được trả về, có độ gấp đôi tính bằng độ, cho chúng ta biết chúng ta phải xoay bao nhiêu đường ngang theo chiều kim đồng hồ để phù hợp với đường giữa hai điểm.
* Nếu bạn thích đối phó với các góc bằng cách sử dụng radian thay vì độ, chỉ cần thay đổi dòng cuối cùng thành: "Trả lại toán học.atan2 (ydiff, xdiff);"
*/
công khai kép getLleOflineBetweentWopoints (point.double p1, point.double p2)
{
Double xDiff = p2.x - p1.x;
Double ydiff = p2.y - p1.y;
trả về math.todegrees (math.atan2 (ydiff, xdiff));
}
==== C # ====================================================
* Xác định góc của một đường thẳng được vẽ giữa điểm một và hai. Số được trả về, đó là một chiếc phao theo độ, cho chúng ta biết chúng ta phải xoay bao nhiêu đường ngang theo chiều kim đồng hồ để phù hợp với đường giữa hai điểm.
* Xác định góc của một đường thẳng được vẽ giữa điểm một và hai. Số được trả về, có độ gấp đôi tính bằng độ, cho chúng ta biết chúng ta phải xoay bao nhiêu đường ngang theo chiều kim đồng hồ để phù hợp với đường giữa hai điểm.
* Nếu bạn thích đối phó với các góc bằng cách sử dụng radian thay vì độ, chỉ cần thay đổi dòng cuối cùng thành: "Trả lại toán học.atan2 (ydiff, xdiff);"
*/
công khai kép getLleOflineBetweentWopoints (point.double p1, point.double p2)
{
Double xDiff = p2.x - p1.x;
Double ydiff = p2.y - p1.y;
trả về math.todegrees (math.atan2 (ydiff, xdiff));
}
==== C # ====================================================
* Xác định góc của một đường thẳng được vẽ giữa điểm một và hai. Số được trả về, đó là một chiếc phao theo độ, cho chúng ta biết chúng ta phải xoay bao nhiêu đường ngang theo chiều kim đồng hồ để phù hợp với đường giữa hai điểm.
* Nếu bạn thích đối phó với các góc bằng cách sử dụng radian thay vì độ, chỉ cần thay đổi dòng cuối cùng thành: "Trả lại toán học.atan2 (ydiff, xdiff);"
FLOAT tĩnh công khai getLleOflineBetweentWopoints (Pointf P1, Pointf P2)
float xdiff = p2.x - p1.x;
float ydiff = p2.y - p1.y;
trả lại toán học.atan2 (ydiff, xdiff) * (180 / math.pi);
==== P Y T H O N ========================================================
/**
}
==== C # ====================================================
* Xác định góc của một đường thẳng được vẽ giữa điểm một và hai. Số được trả về, đó là một chiếc phao theo độ, cho chúng ta biết chúng ta phải xoay bao nhiêu đường ngang theo chiều kim đồng hồ để phù hợp với đường giữa hai điểm.
* Nếu bạn thích đối phó với các góc bằng cách sử dụng radian thay vì độ, chỉ cần thay đổi dòng cuối cùng thành: "Trả lại toán học.atan2 (ydiff, xdiff);"
FLOAT tĩnh công khai getLleOflineBetweentWopoints (Pointf P1, Pointf P2)
float xdiff = p2.x - p1.x;
float ydiff = p2.y - p1.y;
trả lại toán học.atan2 (ydiff, xdiff) * (180 / math.pi);
==== P Y T H O N ========================================================
/**

Làm thế nào để bạn tìm thấy góc trong Python?

Hàm góc () được sử dụng khi chúng ta muốn tính toán góc của đối số phức tạp.Một số phức được thể hiện bằng cách x + yi, trong đó x và y là số thực và i = (-1)^1/2.Góc được tính bằng công thức tan-1 (x/y). is used when we want to compute the angle of the complex argument. A complex number is represented by “ x + yi ” where x and y are real number and i= (-1)^1/2 . The angle is calculated by the formula tan-1(x/y).

Làm thế nào để bạn tìm thấy góc giữa hai dòng trong Python?

Làm thế nào để bạn tìm thấy góc giữa hai điểm trong Python ?..
Từ nhập khẩu toán học ATAN2, PI ..
góc def (a, b, c, /):.
Ax, ay = a [0] -b [0], a [1] -b [1].
CX, CY = C [0] -B [0], C [1] -B [1].
a = atan2 (ay, ax).
C = ATAN2 (CY, CX).
Nếu a <0: a += pi*2 ..

Làm thế nào để bạn tìm thấy góc của một đường ngang?

Độ nghiêng góc của một đường là góc được hình thành bởi giao điểm của đường và trục x.Sử dụng một "chạy" ngang 1 và m cho độ dốc, góc nghiêng, theta = tan-1 (m) hoặc m = tan (theta).theta=tan-1(m), or m=tan(theta).