Superficie de un triángulo

LogoFE es Logo Functional Extensions, una librería de procedimientos para ser usados con MSWLogo o con UCBLogo. El objetivo de LogoFE es proporcionar un gran "caja de herramientas" para la construcción de pequeños programas útiles o para explorar temáticas de Matemáticas, Física, Química, Estadística y otras materias de escuela, colegio y universidad.

Contenido

1. Determinante de una Matriz

Cálculo del superficie de un triángulo dado por sus coordenadas:

P1: (1, 1)
P2: (5, 1)
P3: (3, 5)

Con LogoFE, podemos dibujar tal triángulo así:

bp graflineas [] trans [[1 1] [5 1] [3 5] [1 1]]

Imagen: tri 1


O con algunos refinamientos, así:

bp graflineas [
 [Ytic: natural]
 [Xtic: natural]
 [XMax: 6] [XMin: 0]
 [YMax: 6] [YMin: 0]
] trans [[1 1] [5 1] [3 5] [1 1]]

Imagen: tri 2


Es fácil ver que tiene 4 unidades de altura por 4 unidades de base, así que su superficie debe ser S = 4 * 4 / 2 = 8

Sin embargo, un método para determinar la superficie de un triángulo dadas las coordenadas de sus puntos es usando un determinante.

Como se explica aquí, por ejemplo: Area de un triangulo

Para lo cual también podemos usar LogoFE:

Tenemos las coordenadas de los tres puntos:

muestra [[1 1] [5 1] [3 5]]
[[1 1] [5 1] [3 5]]

En este punto tenemos ya los elementos de nuestro determinante:

muestra impon [ponultimo 1] [[1 1] [5 1] [3 5]]
[[1 1 1] [5 1 1] [3 5 1]]

Calculamos el determinante:

muestra determat impon [ponultimo 1] [[1 1] [5 1] [3 5]]
16

Y dividimos para 2:

muestra dista 2 determat impon [ponultimo 1] [[1 1] [5 1] [3 5]]
[16 2]

muestra divid dista 2 determat impon [ponultimo 1] [[1 1] [5 1] [3 5]]
8

A esta función la llamaremos super_triangulo:

funciona "super_triangulo 1 [divid dista 2 determat impon [ponultimo 1]]

muestra super_triangulo [[1 1] [5 1] [3 5]]
8

Pero Carlos mencionó algo acerca de que a veces la superficie sale negativa cuando las coordenadas de los puntos son dadas en un orden diferente.

Cuáles son esos posibles ordenamientos:

muestra permuconj lista 3 [[1 1] [5 1] [3 5]]
[[[1 1] [5 1] [3 5]]
 [[1 1] [3 5] [5 1]]
 [[5 1] [1 1] [3 5]]
 [[5 1] [3 5] [1 1]]
 [[3 5] [1 1] [5 1]]
 [[3 5] [5 1] [1 1]]]

Y para cuáles de esos ordenamientos la superficie es negativa:

muestra impon "super_triangulo permuconj lista 3 [[1 1] [5 1] [3 5]]
[8 -8 -8 8 8 -8]

Así que mejor será que la función super_triangulo sea modificada así:

funciona "super_triangulo 1 [abs divid dista 2 determat impon [ponultimo 1]]

muestra impon "super_triangulo permuconj lista 3 [[1 1] [5 1] [3 5]]
[8 8 8 8 8 8]

2. División de Números Complejos

Otra forma de calcular la superficie de un triángulo (números complejos)

El plan es:

Imagen: complejos

  1. Conceptualizar los 3 puntos como números complejos.
  2. Restar dos de ellos del tercero, y trabajar con los números complejos resultantes (segunda figura)
  3. Rotar los dos números de tal manera que uno de ellos quede sobre el eje X (parte real).
  4. La superficie del triángulo es la parte real del número complejo que quedó totalmente sobre el eje X, multiplicada por la parte compleja del otro número (la altura del triángulo), y esto dividido para 2.

Estos son los números complejos (coordenadas de los tres puntos del triángulo)

muestra [[5 2] [3 5] [1 1]] 
[[5 2] [3 5] [1 1]] 

Separo el último:

muestra reforma lista [2 0] [[5 2] [3 5] [1 1]] 
[[[5 2] [3 5]] [1 1]] 

Distribuyo el último entre los otros:

muestra des [lista] reforma lista [2 0] [[5 2] [3 5] [1 1]] 
[[[5 2] [1 1]] [[3 5] [1 1]]] 

Distribuyo y resto:

muestra des [restacomp lista] reforma lista [2 0] [[5 2] [3 5] [1 1]] 
[[4 1] [2 4]] 

Al primer número lo llamaremos C y al otro lo llamaremos D.

La multiplicación de complejos es equivalente a una rotación. Lo siguiente es para determinar un número (complejo) tal que al multiplicarlo por los dos números anteriores haga que el primero de ellos (C) quede totalmente en el plano real. Trabajaremos con C:

muestra pr des [restacomp lista] reforma lista [2 0] [[5 2] [3 5] [1 1]] 
[4 1] 

El valor absoluto (la magnitud) de C es:

muestra abscomp pr des [restacomp lista] reforma lista [2 0] [[5 2] [3 5] [1 1]] 
4.12310562561766 

Queremos que toda esa magnitud quede en el eje x (eje real) la parte imaginaria debe ser 0.

muestra dista 0 abscomp pr des [restacomp lista] reforma lista [2 0] [[5 2] [3 5] [1 1]] 
[4.12310562561766 0] 

Para encontrar un número N tal que al multiplicarlo por C nos de éste último número [4.12310562561766 0] (llamémoslo R) despejamos:

NC = R
N = R / C

Nos preparamos para calcular N haciendo la división de complejos:

muestra expon [[dista 0 abscomp] mismo] pr des [restacomp lista] ~
 reforma lista [2 0] [[5 2] [3 5] [1 1]] 

[[4.12310562561766 0] [4 1]] 

Necesitaremos este paso intermedio luego:

muestra expon [[expon [[dista 0 abscomp] mismo] pr] ul] ~
 des [restacomp lista] reforma lista [2 0] [[5 2] [3 5] [1 1]] 

[[[4.12310562561766 0] [4 1]] [2 4]] 

A continuación tenemos N y D:

muestra dispon [dividcomp mismo] ~
 expon [[expon [[dista 0 abscomp] mismo] pr] ul] ~
 des [restacomp lista] reforma lista [2 0] [[5 2] [3 5] [1 1]] 

[[0.970142500145332 -0.242535625036333] [2 4]] 

N por D nos da el vector D rotado tal como aparece en la última figura:

muestra multicomp dispon [dividcomp mismo] ~
 expon [[expon [[dista 0 abscomp] mismo] pr] ul] ~
 des [restacomp lista] reforma lista [2 0] [[5 2] [3 5] [1 1]] 

[2.910427500436 3.39549875050866] 

Su parte compleja es:

muestra ul multicomp dispon [dividcomp mismo] ~
 expon [[expon [[dista 0 abscomp] mismo] pr] ul] ~
 des [restacomp lista] reforma lista [2 0] [[5 2] [3 5] [1 1]] 

3.39549875050866 

Esa es la altura del triángulo. La base del triángulo ya la habíamos calculado es:

muestra pr expon [[expon [[dista 0 abscomp] mismo] pr] ul] ~
 des [restacomp lista] reforma lista [2 0] [[5 2] [3 5] [1 1]] 

[[4.12310562561766 0] [4 1]] 

muestra pr pr expon [[expon [[dista 0 abscomp] mismo] pr] ul] ~
 des [restacomp lista] reforma lista [2 0] [[5 2] [3 5] [1 1]] 

[4.12310562561766 0] 

muestra pr pr pr expon [[expon [[dista 0 abscomp] mismo] pr] ul] ~
 des [restacomp lista] reforma lista [2 0] [[5 2] [3 5] [1 1]] 

4.12310562561766 

Recolectándo ambos resultados:

muestra expon [[pr pr pr] [ul multicomp dispon [dividcomp mismo]]] ~
 expon [[expon [[dista 0 abscomp] mismo] pr] ul] des [restacomp  lista] ~
 reforma lista [2 0] [[5 2] [3 5] [1 1]] 

[4.12310562561766 3.39549875050866] 

Y multiplicándolos obtenemos (base por altura):

muestra multi expon [[pr pr pr] [ul multicomp dispon [dividcomp mismo]]] ~
 expon [[expon [[dista 0 abscomp] mismo] pr] ul] des [restacomp lista] ~
 reforma lista [2 0] [[5 2] [3 5] [1 1]] 

14 

base por altura sobre 2:

muestra divid dista 2 multi expon [[pr pr pr] [ul multicomp dispon [dividcomp mismo]]] ~
 expon [[expon [[dista 0 abscomp] mismo] pr]  ul] des [restacomp lista] ~
 reforma lista [2 0] [[5 2] [3 5] [1 1]] 

7 

A continuación un diagrama que describe más o menos como los datos de entrada van fluyendo por las funciones hasta producir las salidas:

Imagen: comp diag

3. Producto Cruz

Hemos visto dos métodos para determinar la superficie de un triángulo dado por las coordenadas de sus tres vértices:

  1. construyendo un determinante y resolviéndolo.
  2. utilizando aritmética de números complejos.

Ahora presentaré una tercera forma: Utilizando el producto "cruz".

El resultado de aplicar el producto "cruz" a dos vectores es un vector con dirección perpendicular a plano formado por los dos vectores y de magnitud igual a la superficie de paralelogramo formado por ellos.

Imagen: cross distr

La estrategia es la siguiente:

  1. Restar de dos pares coordenados (vectores), el tercero
  2. Calcular el producto cruz de los vectores
  3. El vector resultante sólo tendrá su componente en el eje Z diferente de 0. porque será perpendicular al plano XY, porque los dos vectores multiplicados pertenecen a este plano. El valor de esta componente dividido para 2 es la superficie del triángulo que nos interesa.

Cálculo del área de un triángulo dado por sus coordenadas:

P1: (1, 1)
P2: (5, 1)
P3: (3, 5)

Separo el primer par coordenado:

muestra reforma lista [0 2] [[1 1] [5 1] [3 5]] 
[[1 1] [[5 1] [3 5]]] 

Lo distribuyo entre los otros dos:

muestra diz "lista reforma lista [0 2] [[1 1] [5 1] [3 5]] 
[[[1 1] [5 1]] [[1 1] [3 5]]] 

Hago sendas restas:

muestra diz [restacomp lista] reforma lista [0 2] [[1 1] [5 1] [3 5]] 
[[-4 0] [-2 -4]] 

Convierto los vectores en tridimensionales añadiendo un 0 como componente Z de cada uno:

muestra diz [ponultimo 0 restacomp lista] reforma lista [0 2] [[1 1] [5 1] [3 5]] 
[[-4 0 0] [-2 -4 0]] 

Aplico el producto "cruz":

muestra cruzvec [[-4 0 0] [-2 -4 0]] 
[0 0 16] 

La componente Z es la que nos interesa:

muestra ultimo cruzvec [[-4 0 0] [-2 -4 0]] 
16 

La dividimos para 2:

muestra divid dista 2 ultimo cruzvec [[-4 0 0] [-2 -4 0]] 
8 

Llamamos a nuestro programa "super2_triangulo":

funciona "super2_triangulo 1 [
 abs divid dista 2 ultimo cruzvec diz [ponultimo 0 restacomp lista] reforma lista [0 2]
] 

Utilizamos nuestro programa:

muestra super2_triangulo [[1 1] [5 1] [3 5]] 
8 

4. Producto Punto

José Carrión Beltrán nos dice:

Podemos añadir otra forma: sea el triángulo ABC; hallamos los vectores AC, AC' y AB. El AC' es el mismo AC girado 90º, o sea, si AC es (a,b), AC' podría ser (b,-a) o (-b,a). Sea p el producto escalar AB . AC' tomado en valor absoluto. El área de ABC será p/2.

La demostración es bien sencilla, se basa en la propiedad geométrica del producto escalar: el producto escalar de dos vectores es igual al producto de uno de ellos por el vector proyección del otro sobre él.

Intentemos nuevamente con los puntos utilizados para la solución con números complejos:

muestra [[5 2] [3 5] [1 1]] 
[[5 2] [3 5] [1 1]] 

Separo el último:

muestra reforma lista [2 0] [[5 2] [3 5] [1 1]] 
[[[5 2] [3 5]] [1 1]] 

Distribuyo el último entre los otros:

muestra des [lista] reforma lista [2 0] [[5 2] [3 5] [1 1]] 
[[[5 2] [1 1]] [[3 5] [1 1]]] 

Hasta aquí todo igual, pero ahora hagamos la resta en forma diferente.

Distribuyo y resto vectores:

muestra des [transpon [diferencia] lista] reforma lista [2 0] [[5 2] [3 5] [1 1]] 
[[4 1] [2 4]]

Porque transpon [diferencia] es resta de vectores:

muestra transpon [diferencia] [[2 3 4 5 6] [1 2 3 4 5]]
[1 1 1 1 1]

Luego giremos uno de los vectores 90 grados:

muestra dispon [[aplica [lista ?2 cambiasigno ?1]] mismo] ~
 des [transpon [diferencia] lista] reforma lista [2 0] [[5 2] [3 5] [1 1]] 

[[1 -4] [2 4]]

Luego, valor absoluto de la mitad del producto punto de lo anterior:

muestra abs divid dista 2 puntovec dispon [[aplica [lista ?2 cambiasigno ?1]] mismo] ~
 des [transpon [diferencia] lista] reforma lista [2 0] [[5 2] [3 5] [1 1]] 

7

5. Licencia

Este es un documento libre.

Autor: Daniel Ajoy

Licencia Creative Commons
Esta obra está bajo una Licencia Creative Commons Atribución-CompartirIgual 3.0 Unported.

6. Preguntas, Dudas, Comentarios, Peticiones

Síguenos en Facebook

7. Enlaces

Lenguaje de Programación Logo


Generado con PureJoy. Creación: 11:49 - Dec 15, 2017. Última Modificación: 17:12 - Apr 02, 2023