2012-04-09 35 views
7

Soy relativamente nuevo en la programación. Necesito calcular la relación de aspecto (16: 9 o 4: 3) de una dimensión dada, decir axb. ¿Cómo puedo lograr esto usando C#. Cualquier ayuda sería muy apreciada.C#: Cómo calcular la relación de aspecto

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

Gracias.

+0

Obtener la relación entre anchura y altura – V4Vendetta

+3

posible duplicado de [Calcular una Razón en C#] (http://stackoverflow.com/questions/527860/calculate-a- ratio-in-c-sharp) – V4Vendetta

+0

@ V4Vendetta y solo contiene la misma solución no tan buena. – kirilloid

Respuesta

8

es necesario encontrar máximo común divisor, y dividir tanto x como y por eso.

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

Si desea que le permite manejar algo así como 16:10 (que se puede dividir en dos, 8: 5 será devuelto por el método anterior) es necesario tener una tabla de predefinido ((float)x)/y -parámetros de razón de retención

+0

Muchas gracias Déjenme probarlo – user1321391

+0

Esto falla para la relación' 16: 10' ...;) – Lucero

+0

Usuarios de portátiles pobres con una resolución de 1366x768 = ( – kirilloid

1

es necesario encontrar el MCD (http://en.wikipedia.org/wiki/Greatest_common_divisor) y luego:

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

Muchas gracias. Lo probaré. – user1321391

+0

Esto falla para la relación '16: 10' ...;) – Lucero

+4

' 16: 10' también conocido como '8: 5' :) – V4Vendetta

5

Ya que solo necesita decidir entre 16: 9 y 4: 3, aquí hay una solución mucho más simple.

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

Muchas gracias por la idea. – user1321391

3

Solo hay varias relaciones estándar como: 4:3, 5:4, 16:10, 16:9. GCD es una buena idea, pero fallará al menos para 16:10 relaciones y 1366x768 de resolución.

Algoritmo de GCD puro obtendrá 683:384 para 1366x768, porque 683 es ​​un primo, mientras que la resolución es casi 16: 9 (16.0078125).

supongo, que para las tareas reales, uno tendrá que aplicar bastante complicado algoritmo:

Pruebe primero las relaciones de aspecto conocidos (buscarlos en wikipedia), permitiendo algunos errores y sólo entonces usar GCD como de reserva.

No se olvide de 32:10 ;-)

+0

Muchas gracias. Sí, hay algunos casos excepcionales como usted mencionó – user1321391

Cuestiones relacionadas