Algoritmo para el cálulo de áreas
Hola, me gustarÃa saber si existe un algoritmo para el cálculo del área y el centro de gravedad de un polÃgono irregular conociendo sólo los vértices. No me importa el lenguaje de programación, lo podrÃa traducir después.
Gracias
Gracias
!!!!!!!!!!!!!!!!!!!!!!!!!!!!cálculo de las áreas de cada elemento!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
write ( 15,* ) 'valores vector U'
do i=1,t
do j=1,3
u( i, j )=a ( b ( i, 2 ) , j ) - a ( b ( i ,1 ) , j )
enddo !!!!!j!!!!
enddo !!!!i!!!!
do i=1,t
write ( 15,* ) ( u ( i, j) ,j=1,3)
enddo
write ( 15,* ) 'valores vector V'
do i=1,t
do j=1,3
v( i, j )=a ( b ( i, 3 ) , j ) - a ( b ( i ,1 ) , j )
enddo !!!!!j!!!!
enddo !!!!i!!!!
do i=1,t
write ( 15,* ) ( v ( i, j), j=1,3)
enddo
write ( 15,* ) 'valores vector W'
do i=1,t
do j=1,3
w( i, j )=a ( b ( i, 3 ) , j ) - a ( b ( i ,2 ) , j )
enddo !!!!!j!!!!
enddo !!!!i!!!!
do i=1,t
write ( 15,* ) ( w ( i, j), j=1,3)
enddo
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!cálculo del producto vectorial a x b!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
write ( 15,* ) 'cálculo vectorial'
j=1
do i=1,t
e ( i, j ) = ( u ( i , j+1 ) * v ( i , j + 2 ) - u ( i , j+2 ) * v ( i , j + 1 ))
enddo
j=2
do i=1,t
e ( i, j ) = ( u ( i , j+1 ) * v ( i , j ) - u ( i , j-1 ) * v ( i , j + 1 ))
enddo
j=3
do i=1,t
e ( i, j ) = ( u ( i , j-2 ) * v ( i , j -1 ) - u ( i , j-1 ) * v ( i , j-2 ))
enddo
do i=1,t
write ( 15,* ) ( e (i,j),j=1,3)
enddo
write ( 15,* ) 'modulo de vectores'
emod ( i )=0
do i=1,t
do j=1,3
emod ( i )=sqrt ( emod (i)+e(i,j)*e(i,j))
enddo
enddo
do i=1,t
write ( 15,*) 'areas de los elemntos'
do i=1,t
area(i)=emod(i)/2
enddo
total=0
do i=1,t
total=total+area(i)
enddo
write ( 15 ,* ) 'area total',total
close ( 15 )
return
end
subroutine centroides(Xcent,Ycent,Zcent,X1,X2,X3,Y1,Y2,Y3,Z1,Z2,Z3)
a1=X2-X1
a2=Y2-Y1
a3=Z2-Z1
b1=X3-X1
b2=Y3-Y1
b3=Z3-Z1
c1=X3-X1
c2=Y3-Y1
c3=Z3-Z1
u1=a2*b3-a3*b2
u2=a3*b1-a1*b3
u3=a1*b2-a2*b1
umod=sqrt(u1*u1+u2*u2+u3*u3)
area1=umod/2
atotal=area1
Xm1=(X1+X2+X3)/3
Ym1=(Y1+Y2+Y3)/3
Zm1=(Z1+Z2+Z3)/3
Xcent=(area1*Xm1+area2*Xm2)/atotal
Ycent=(area1*Ym1+area2*Ym2)/atotal
Zcent=(area1*Zm1+area2*Zm2)/atotal
return
end
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
write ( 15,* ) 'valores vector U'
do i=1,t
do j=1,3
u( i, j )=a ( b ( i, 2 ) , j ) - a ( b ( i ,1 ) , j )
enddo !!!!!j!!!!
enddo !!!!i!!!!
do i=1,t
write ( 15,* ) ( u ( i, j) ,j=1,3)
enddo
write ( 15,* ) 'valores vector V'
do i=1,t
do j=1,3
v( i, j )=a ( b ( i, 3 ) , j ) - a ( b ( i ,1 ) , j )
enddo !!!!!j!!!!
enddo !!!!i!!!!
do i=1,t
write ( 15,* ) ( v ( i, j), j=1,3)
enddo
write ( 15,* ) 'valores vector W'
do i=1,t
do j=1,3
w( i, j )=a ( b ( i, 3 ) , j ) - a ( b ( i ,2 ) , j )
enddo !!!!!j!!!!
enddo !!!!i!!!!
do i=1,t
write ( 15,* ) ( w ( i, j), j=1,3)
enddo
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!cálculo del producto vectorial a x b!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
write ( 15,* ) 'cálculo vectorial'
j=1
do i=1,t
e ( i, j ) = ( u ( i , j+1 ) * v ( i , j + 2 ) - u ( i , j+2 ) * v ( i , j + 1 ))
enddo
j=2
do i=1,t
e ( i, j ) = ( u ( i , j+1 ) * v ( i , j ) - u ( i , j-1 ) * v ( i , j + 1 ))
enddo
j=3
do i=1,t
e ( i, j ) = ( u ( i , j-2 ) * v ( i , j -1 ) - u ( i , j-1 ) * v ( i , j-2 ))
enddo
do i=1,t
write ( 15,* ) ( e (i,j),j=1,3)
enddo
write ( 15,* ) 'modulo de vectores'
emod ( i )=0
do i=1,t
do j=1,3
emod ( i )=sqrt ( emod (i)+e(i,j)*e(i,j))
enddo
enddo
do i=1,t
write ( 15,*) 'areas de los elemntos'
do i=1,t
area(i)=emod(i)/2
enddo
total=0
do i=1,t
total=total+area(i)
enddo
write ( 15 ,* ) 'area total',total
close ( 15 )
return
end
subroutine centroides(Xcent,Ycent,Zcent,X1,X2,X3,Y1,Y2,Y3,Z1,Z2,Z3)
a1=X2-X1
a2=Y2-Y1
a3=Z2-Z1
b1=X3-X1
b2=Y3-Y1
b3=Z3-Z1
c1=X3-X1
c2=Y3-Y1
c3=Z3-Z1
u1=a2*b3-a3*b2
u2=a3*b1-a1*b3
u3=a1*b2-a2*b1
umod=sqrt(u1*u1+u2*u2+u3*u3)
area1=umod/2
atotal=area1
Xm1=(X1+X2+X3)/3
Ym1=(Y1+Y2+Y3)/3
Zm1=(Z1+Z2+Z3)/3
Xcent=(area1*Xm1+area2*Xm2)/atotal
Ycent=(area1*Ym1+area2*Ym2)/atotal
Zcent=(area1*Zm1+area2*Zm2)/atotal
return
end