Diferencia entre revisiones de «Área de un polígono»

De MateWiki
Saltar a: navegación, buscar

Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/mat/public_html/w/includes/diff/DairikiDiff.php on line 434
(Deducción de la fórmula)
 
(No se muestran 8 ediciones intermedias del mismo usuario)
Línea 11: Línea 11:
 
<math>
 
<math>
 
\begin{eqnarray*}  
 
\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 k|\\
+
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})|,  
 
&=&\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*}
 
\end{eqnarray*}
Línea 18: Línea 18:
 
tomando la regla de que <math>x_0=x_3, \; x_4=x_1</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 antihorario, triangulizarlo usando las diagonales a partir de un vértice y sumar el área de los triángulos que se forman [[Archivo:pentagono.jpg|miniaturadeimagen|triangulación a partir de las diagonales para calcular el área como la suma del área de triángulos]]
+
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. [[Archivo:pentagono.jpg|miniaturadeimagen|triangulación a partir de las diagonales para calcular el área como la suma de las áreas de los triángulos que lo 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,
 
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,
  
Línea 29: Línea 28:
 
</math>
 
</math>
  
tomando la regla de que <math>x_0=x_5, \; x_6=x_1</math>. El punto clave aquí es la primera igualdad, que se puede hacer 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 es lo mismo que la suma de los módulos.
+
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:
 
En el caso general de n vértices, la fórmula quedaría:
Línea 39: Línea 38:
 
tomando la regla de que <math>x_0=x_n, \; x_{n+1}=x_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 observar que el área de la parte que está en la envolvente convexa del polígono, pero no en el polígono, aparece dos veces y con signos contrarios.   
+
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.  
+
'''Observación:''' Los primeros y segundos momentos de inercia de un polígono pueden obtenerse con fórmulas similares siguiendo este mismo proceso.
  
 
== Función en Matlab ==
 
== Función en Matlab ==
Línea 51: Línea 50:
 
function S=ar_pol(C)
 
function S=ar_pol(C)
 
% Se introduce una matriz C con las coordenadas de los vértices del polígono  
 
% Se introduce una matriz C con las coordenadas de los vértices del polígono  
% por columnas y ordenados en sentido antihorario.  
+
% por columnas y ordenados en sentido horario o antihorario.  
 
% Se devuelve el área S
 
% Se devuelve el área S
% Aplicamos la fórmula que nos envió Rafael Morán
+
% Aplicamos la fórmula deducida anteriormente
 
% S = 1/2 abs(sum yi (x_(i-1)-x_(i+1)))
 
% 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  
 
% teniendo en cuenta la siguiente regla: (x_0,y_0)=(x_n,y_n) y  

Revisión actual del 11:32 7 mar 2017

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]
Triángulo
. 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.
triangulación a partir de las diagonales para calcular el área como la suma de las áreas de los triángulos que lo 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)