Área de un polígono
En este artículo vamos a hacer una función en MATLAB que calcula el área de un polígono.
1 Deducción de la fórmula
Vamos a empezar deduciendo una fórmula general a partir de las coordenadas de sus vértices.Supongamos primero que es un triángulo con vértices [math] V_i = (x_i,y_i), \; i=1,2,3[/math] . Si definimos [math] \{ \vec i, \vec j\} [/math] los vectores de la base cartesiana en la que están dados los vértices, entonces dos lados del triángulo están formados por los vectores:[math] \vec{V_1V_2} = (x_2-x_1)\vec i + (y_2-y_1)\vec j, \qquad \vec{V_1V_3} = (x_3-x_1)\vec i + (y_3-y_1)\vec j. [/math]
El módulo del producto vectorial de estos vectores es el área del paralelogramo que forman, es decir el doble del área del triángulo. Por tanto,
[math] \begin{eqnarray*} S&=&\frac12 |\vec{V_1V_2} \times \vec{V_1V_3}| = \frac12|((x_2-x_1)(y_3-y_1)-(x_3-x_1)(y_2-y_1))(\vec i \times \vec j)|\\ &=&\frac12|y_1(x_3-x_1)+y_2(x_1-x_3)+y_3(x_2-x_1)|=\frac12|\sum_{i=1}^3y_i(x_{i-1}-x_{i+1})|, \end{eqnarray*} [/math]
tomando la regla de que [math]x_0=x_3, \; x_4=x_1[/math].
En el caso de un polígono convexo podemos numerar los vértices en sentido horario (o antihorario), triangulizarlo usando las diagonales a partir de un vértice y sumar el área de los triángulos que se forman.Siguiendo el mismo proceso anterior para calcular el área de cada triángulo llegamos fácilmente a una fórmula similar. Concretamente, en el caso particular del pentágono de la figura,
[math] \begin{eqnarray*} S&=&\frac12 |\vec{V_1V_2} \times \vec{V_1V_3}|+\frac12 |\vec{V_1V_3} \times \vec{V_1V_4}|+\frac12 |\vec{V_1V_4} \times \vec{V_1V_5}| \\ &=& \frac12 |\vec{V_1V_2} \times \vec{V_1V_3}+\vec{V_1V_3} \times \vec{V_1V_4}+\vec{V_1V_4} \times \vec{V_1V_5}| =\frac12|\sum_{i=1}^5y_i(x_{i-1}-x_{i+1})|, \end{eqnarray*} [/math]
tomando la regla de que [math]x_0=x_5, \; x_6=x_1[/math]. El punto clave en la identidad anterior es la primera igualdad, que se da porque los tres vectores [math]\vec{V_1V_2} \times \vec{V_1V_3}, \; \vec{V_1V_3} \times \vec{V_1V_4}, \; \vec{V_1V_4} \times \vec{V_1V_5} [/math] tienen la misma dirección y sentido. Sólo cambia su módulo. Por tanto, en este caso el módulo de la suma coincide con la suma de los módulos.
En el caso general de n vértices, la fórmula quedaría:
[math] S=\frac12|\sum_{i=1}^ny_i(x_{i-1}-x_{i+1})| [/math]
tomando la regla de que [math]x_0=x_n, \; x_{n+1}=x_1[/math].
Por último, si el polígono es no convexo, es fácil ver que la misma fórmula se verifica. Basta interpretar el término dentro del valor absoluto como suma de áreas y darse cuenta de que el área de la parte que no está en el polígono aparece dos veces y con signos contrarios, y por tanto se cancela.
Observación: Los primeros y segundos momentos de inercia de un polígono pueden obtenerse con fórmulas similares siguiendo este mismo proceso.
2 Función en Matlab
A continuación se muestra como crear una función en Matlab que calcula el área de un polígono a partir de una matriz con los vértices ordenados es sentido antihorario.
% Función para calcular el área de un polígono
function S=ar_pol(C)
% Se introduce una matriz C con las coordenadas de los vértices del polígono
% por columnas y ordenados en sentido horario o antihorario.
% Se devuelve el área S
% Aplicamos la fórmula deducida anteriormente
% S = 1/2 abs(sum yi (x_(i-1)-x_(i+1)))
% teniendo en cuenta la siguiente regla: (x_0,y_0)=(x_n,y_n) y
% (x_(n+1),y_(n+1))=(x_1,y_1)
% donde n es el número de vértices
% Primero calculamos el número de vértices nv
nv=length(C);
% Ahora definimos los vectores con las coordenadas x e y de los vértices
x=C(1,:); % la primera fila contiene las coordenadas x de los vértices
y=C(2,:); % la segunda fila contiene las coordenadas y de los vértices
% Calculamos S pero separamos el primer y último término de la suma
% para poder tener en cuenta la regla
S = y(1)*(x(nv)-x(2)); % primer término
for i=2:nv-1
S = S+y(i)*(x(i-1)-x(i+1)); % términos del 2 al nv-1
end
S = S+y(nv)*(x(nv-1)-x(1)); % último término
S=0.5*abs(S);
Es importante grabar esta función en un fichero con el mismo nombre elegido para la función. En este caso: ar_pol.m. Una vez creada la función y grabada en el mismo directorio donde está nuestro programa principal, la podemos usar en nuestro programa. Por ejemplo
% Este es el programa principal
% Definimos una matriz con las coordenadas del polígono
c=[-1 0 -1 1 1;-1 0 1 1 -1];
% Calculamos su área
S=ar_pol(c)