2009-07-21 44 views
8

thể trùng lặp:
How do you calculate the average of a set of angles?trung bình của hai góc với bọc xung quanh

Tôi có hai góc độ, a = 20 độ và b = 350 độ. Trung bình của hai góc đó là 185 độ. Tuy nhiên, nếu chúng ta xem xét góc tối đa là 360 độ và cho phép quấn quanh, người ta có thể thấy rằng 5 độ là mức trung bình gần hơn.

Tôi gặp khó khăn khi đưa ra một công thức tốt để xử lý việc quấn quanh khi tính trung bình. Bất cứ ai có bất kỳ gợi ý?

Hay tôi đang tự bắn mình vào chân ở đây? Đây có phải là "hành vi xấu" trong toán học không?

+0

trùng lặp: http://stackoverflow.com/questions/491738/how-do-you-calculate-the-average-of-a-set -of-góc –

+0

Thực sự của nó rất giống với câu hỏi của tôi, kỳ lạ mà tôi không thể tìm thấy nó. – Mizipzor

Trả lời

2

Chỉ cần lấy một mức trung bình bình thường và sau đó lấy nó mod 180. Trong ví dụ của bạn, điều này cho 5 độ, như mong đợi.

+0

Stecys trả lời tiểu bang để có mod 360, mà dường như làm việc trong một vài nỗ lực tôi đã thử nó in. Trường hợp không 360 và 180 thành công? – Mizipzor

+0

Lấy trung bình như (a + b)/2 và sau đó mod 180 là chính xác giống như lần đầu tiên làm (a + b) mod 360 và sau đó chia cho 2. Cả hai đều tương đương nhau. –

+2

Tính năng này không hoạt động. Ví dụ: angle1 = 280, angle2 = 10, giá trị trung bình là 325. Công thức của bạn cho 145. – lenooh

2

Hãy thử điều này (ví dụ trong C#):

static void Main(string[] args) 
    { 
     Console.WriteLine(GetAngleAverage(0,0)); 
     Console.WriteLine(GetAngleAverage(269, 271)); 
     Console.WriteLine(GetAngleAverage(350, 20)); 
     Console.WriteLine(GetAngleAverage(361, 361)); 
    } 

    static int GetAngleAverage(int a, int b) 
    { 
     a = a % 360; 
     b = b % 360; 

     int sum = a + b; 
     if (sum > 360 && sum < 540) 
     { 
      sum = sum % 180; 
     } 
     return sum/2; 
    } 

Tôi nghĩ rằng nó hoạt động, đầu ra là

0 
270 
5 
1 
+0

Tôi nghĩ bạn muốn loại bỏ "trả về" bên trong khối if() . GetAngleAverage (350,20) phải là 5, không phải là 10 –

+0

Phải. Sửa lỗi đó. – weiqure

+0

Dòng "tổng hợp> 360" phải là "sum> = 360". Nếu không, góc trung bình 350 và 10 sẽ xuất hiện ở mức 180, đó không phải là điều bạn muốn. – naroom

0

nếu bạn có một cái nhìn tại các vòng tròn góc, bạn sẽ thấy rằng có 2 đối diện "góc" tương ứng với "trung bình" của bạn.

Vì vậy, cả 185 ° và 5 ° đều chính xác.

Nhưng bạn đã đề cập đến mức trung bình gần hơn. Vì vậy, trong trường hợp đó, bạn có thể chọn góc gần hơn.

Thông thường, các góc "trung bình" liên quan đến hướng ngược chiều kim đồng hồ. Các "trung bình" là không giống nhau nếu bạn chuyển đổi hai góc độ của bạn (hoặc nếu bạn sử dụng chiều kim đồng hồ).

Ví dụ, với a=20°b=350°, bạn đang tìm kiếm những góc mà đến sau a và trước btheo hướng ngược chiều kim đồng, 185° là câu trả lời. Nếu bạn đang tìm góc tới trước a và sau b theo hướng ngược chiều kim đồng hồ (hoặc sau a và trước b theo hướng khôn ngoan), là câu trả lời.

Câu trả lời của this post là cách phù hợp để thực hiện.

Vì vậy, các pseudo-code cho các giải pháp là

if (a+180)mod 360 == b then 
    return (a+b)/2 mod 360 and ((a+b)/2 mod 360) + 180 (they are both the solution, so you may choose one depending if you prefer counterclockwise or clockwise direction) 
else 
    return arctan( (sin(a)+sin(b))/(cos(a)+cos(b)) 
+0

Có, mức trung bình gần hơn mà Im tìm kiếm. – Mizipzor

+0

với 180 và b 270, tôi nhận được toán: atan ((toán: sin (180) + toán: sin (270))/(math: cos (180) + math: cos (270))). -1.1946710584651132 Không mong đợi – quantumpotato

Các vấn đề liên quan