2012-04-09 85 views
7

Tôi tương đối mới đối với lập trình. Tôi cần tính tỷ lệ khung hình (16: 9 hoặc 4: 3) từ một thứ nguyên nhất định nói axb. Làm thế nào tôi có thể đạt được điều này bằng cách sử dụng C#. Bất kỳ trợ giúp sẽ được đánh giá sâu sắc.C#: Cách tính tỷ lệ khung hình

public string AspectRatio(int x, int y) 
{ 
//code am looking for 
return ratio 
} 

Cảm ơn.

+0

Lấy chiều rộng tỷ lệ chiều cao – V4Vendetta

+3

thể trùng lặp của [Tính một Ratio trong C#] (http://stackoverflow.com/questions/527860/calculate-a- tỷ lệ-trong-c-sắc nét) – V4Vendetta

+0

@ V4Vendetta và nó chỉ containts cùng một giải pháp không tốt như vậy. – kirilloid

Trả lời

8

Bạn cần phải tìm Greatest Common Divisor, và chia cả x và y bởi nó.

static int GCD(int a, int b) 
{ 
    int Remainder; 

    while(b != 0) 
    { 
     Remainder = a % b; 
     a = b; 
     b = Remainder; 
    } 

    return a; 
} 

return string.Format("{0}:{1}",x/GCD(x,y), y/GCD(x,y)); 

PS

Nếu bạn muốn nó để xử lý cái gì đó như 16:10 (có thể được chia cho hai, 8: 5 sẽ được trả lại sử dụng phương pháp trên), bạn cần phải có một bảng các cặp tỷ lệ được xác định trước ((float)x)/y -ghép tỷ lệ

+0

Cảm ơn rất nhiều Hãy để tôi thử nó – user1321391

+0

Điều này không thành công cho tỷ lệ' 16: 10' ...;) – Lucero

+0

Người dùng máy tính xách tay kém với độ phân giải 1366x768 = ( – kirilloid

1

Bạn cần phải tìm ra GCD (http://en.wikipedia.org/wiki/Greatest_common_divisor) và sau đó:

return x/GCD + ":" + y/GCD; 
+0

Cảm ơn rất nhiều. Sẽ thử nó. – user1321391

+0

Điều này không thành công cho tỷ lệ '16: 10' ...;) – Lucero

+4

' 16: 10' còn được gọi là '8: 5' :) – V4Vendetta

5

Vì bạn chỉ cần quyết định giữa 16: 9 và 4: 3, đây là giải pháp đơn giản hơn nhiều.

public string AspectRatio(int x, int y) 
{ 
    double value = (double)x/y; 
    if (value > 1.7) 
     return "16:9"; 
    else 
     return "4:3"; 
} 
+0

Cảm ơn rất nhiều vì ý tưởng này. – user1321391

3

Như vậy là chỉ vài tỷ lệ tiêu chuẩn như: 4:3, 5:4, 16:10, 16:9. GCD là một ý tưởng tốt, nhưng nó sẽ thất bại cho ít nhất 16:10 tỷ lệ và độ phân giải 1366x768.

Thuật toán GCD thuần túy sẽ nhận được 683:384 cho 1366x768, khiến 683 là số nguyên tố, trong khi độ phân giải gần như là 16: 9 (16.0078125).

Tôi cho rằng, điều đó cho các nhiệm vụ thực tế, ai sẽ cần phải thực hiện thuật toán khá phức tạp:

Trước tiên hãy thử tỉ lệ màn hình được biết đến (tìm kiếm họ tại wikipedia), cho phép một số lỗi và chỉ sau đó sử dụng GCD như dự phòng.

Đừng quên về 32:10 ;-)

+0

Có rất ít trường hợp đặc biệt như bạn đã đề cập – user1321391

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