SlideShare una empresa de Scribd logo
Elementos 2D triangulares 1/78
Elementos 2D triangulares
Rafael Ramírez Ros
Clase MN-P02 & MN-P03 (versión 20/02/2024)
Elementos 2D triangulares 2/78
Contenidos
1 Problemas de detección e interpolación
Detección en un triángulo
Detección en un mallado triangular
Interpolación en un triángulo
Interpolación en un mallado triangular
2 Repositorio oficial
3 Comandos específicos
4 Cuestiones
5 Respuestas
Elementos 2D triangulares 3/78
Problemas de detección e interpolación
Índice
1 Problemas de detección e interpolación
Detección en un triángulo
Detección en un mallado triangular
Interpolación en un triángulo
Interpolación en un mallado triangular
2 Repositorio oficial
3 Comandos específicos
4 Cuestiones
5 Respuestas
Elementos 2D triangulares 4/78
Problemas de detección e interpolación
Detección en un triángulo
Índice
1 Problemas de detección e interpolación
Detección en un triángulo
Detección en un mallado triangular
Interpolación en un triángulo
Interpolación en un mallado triangular
2 Repositorio oficial
3 Comandos específicos
4 Cuestiones
5 Respuestas
Elementos 2D triangulares 5/78
Problemas de detección e interpolación
Detección en un triángulo
Detección en un triángulo
Sea Ωun triángulo de vértices (nodos)
p1 = (x1, y1), p2 = (x2, y2), p3 = (x3, y3).
Hipótesis: Los tres vértices no están alineados.
Sea p = (x,y) ∈ R2.
Pregunta: ¿p ∈ Ω? (Consideramos que los puntos de la
frontera pertenecen al triángulo.)
Advertencia: Si p está en la frontera, pequeños errores
numéricos podrían hacernos pensar que p /
∈Ω.
Elementos 2D triangulares 6/78
Problemas de detección e interpolación
Detección en un triángulo
Coordenadas baricéntricas (definición)
∃!α = (α1, α2, α3) ∈ R3 tal que
f
p = α p + α
1 1 2 2 3 3
p + α p ,
α1 + α2 + α3 = 1
Decimos que α son las coordenadas baricéntricas del
punto p respecto el triángulo Ω.
Respuesta: p ∈ Ωsi y solo si α ≥ 0.
Importante: La ecuación α1 + α2 + α3 = 1 se añade para
determinar unívocamente las coordenadas baricéntricas,
pero eso solo funciona si los puntos no están alineados.
Elementos 2D triangulares 7/78
Problemas de detección e interpolación
Detección en un triángulo
Coordenadas baricéntricas (propiedades)
p es el baricentro de Ω⇔α = (1/3,1/3,1/3).
Si los índices {i, j, k} se mueven cíclicamente en el
conjunto {1,2,3}, entonces:
p = pj ⇔αj = 1 & αi = αk = 0.
p está en la mediana de Ωpor pj ⇔αi = αk .
p está en la recta que pasa por pi y pk ⇔αj = 0.
p está en el lado definido por pi y pk ⇔αj = 0 & αi ,αk ≥ 0.
p es el centro de masas al situar tres masas α1, α2 y α3
tales que α1 + α2 + α3 = 1 en los vértices p1, p2 y p3.
Si Ωj es el triángulo de vértices p, pi y pk , entonces:
j
p ∈ Ω⇒α = j
Area[Ω ]
Area[Ω]
, j = 1,2,3.
Elementos 2D triangulares 8/78
Problemas de detección e interpolación
Detección en un triángulo
Dos ejemplos
Elementos 2D triangulares 9/78
Problemas de detección e interpolación
Detección en un triángulo
Relación con las funciones de forma
Las funciones de forma del triángulo Ωson las tres únicas
funciones
ψj(x,y) = aj + βjx + γj y, j = 1,2,3,
para algunos coeficientes aj,βj,γj ∈ R tales que
ψj(pi ) = δij :=
f
1, si i = j
0, si i /=j
.
Se sabe que
αj = ψj(p), i = 1,2,3.
Elementos 2D triangulares 10 /78
Problemas de detección e interpolación
Detección en un triángulo
Cálculo matricial de los coeficientes
Si consideramos las matrices
1
1 x1 y
A = 1 x2 y2 ,
1 x3 y3
1 3
γ1 γ2
a a2 a
C = β1 β2 β3 ,
γ3
entonces
a + β x + γ y
1 1 1 1 1 a2 + β2x1 + γ2y1 a + β x + γ y
3 3 1 3 1
AC = a1 + β1x2 + γ1y2 a2 + β2x2 + γ2y2
a1 + β1x3 + γ1y3 a2 + β2x3 + γ2y3
a3 + β3x2 + γ3y2
a3 + β3x3 + γ3y3
=
1 1
ψ (p ) ψ2(p1) 3 1
ψ (p )
ψ1(p3) ψ2(p3)
ψ1(p2) ψ2(p2) ψ3(p2)
ψ3(p3)
1 0 0
= 0 1 0 = Id.
0 0 1
Por tanto, C = A−1.
Elementos 2D triangulares 11 /78
Problemas de detección e interpolación
Detección en un triángulo
Cálculo matricial de α
Si consideramos la matriz
1 3
γ1 γ2
a a2 a
C = β1 β2 β3
γ3
y el vector fila z = (1, x,y), entonces
zC = a + β x + γ y,a + β x + γ
1 1 1 2 2 2 3 3 3
y,a + β x + γ y
)
(
= ψ1(p), ψ2(p), ψ3(p)
)
=
(
α1, α2, α3
)
= α.
Elementos 2D triangulares 12 /78
Problemas de detección e interpolación
Detección en un mallado triangular
Índice
1 Problemas de detección e interpolación
Detección en un triángulo
Detección en un mallado triangular
Interpolación en un triángulo
Interpolación en un mallado triangular
2 Repositorio oficial
3 Comandos específicos
4 Cuestiones
5 Respuestas
Elementos 2D triangulares 13 /78
Problemas de detección e interpolación
Detección en un mallado triangular
Mallados triangulares
Un mallado triangular está definido por
Un conjunto de puntos del plano (llamados nodos):
N = {pm = (xm,ym) : m = 1,...,M} ;
Un conjunto de ternas de índices:
T = {te = (ie,je,ke) : e = 1, ...,E} .
El e-ésimo elemento de este mallado es el triángulo Ωe
cuyos tres vértices son los nodos pie
, pje
y pke
.
Hipótesis:
1 Los vértices de cada triángulo están ordenados en sentido
antihorario y no están alineados;
2 Triángulos diferentes o bien tienen intersección vacía o
bien solo comparten algunos lados y/o vértices comunes.
Elementos 2D triangulares 14 /78
Problemas de detección e interpolación
Detección en un mallado triangular
Ejemplo
Mallado triángular con 5 nodos y 4 elementos
Elementos 2D triangulares 15 /78
Problemas de detección e interpolación
Detección en un mallado triangular
Problema
Sea Ωe el triángulo de vértices pie
, pje
y pke
.
Sea Ω =
mallado.
E
e=1
Ωe la unión de todos los triángulos del
Sea p ∈ Ω.
Problema: Determinar el índice e tal que p ∈ Ωe.
Advertencia: El índice e no es único cuando p es un nodo
o está situado sobre un lado o vértice común de dos
elementos adyacentes.
Elementos 2D triangulares 16 /78
Problemas de detección e interpolación
Interpolación en un triángulo
Índice
1 Problemas de detección e interpolación
Detección en un triángulo
Detección en un mallado triangular
Interpolación en un triángulo
Interpolación en un mallado triangular
2 Repositorio oficial
3 Comandos específicos
4 Cuestiones
5 Respuestas
Elementos 2D triangulares 17 /78
Problemas de detección e interpolación
Interpolación en un triángulo
Problema
Sea Ωun triángulo de vértices (nodos)
p1 = (x1, y1), p2 = (x2, y2), p3 = (x3, y3).
Hipótesis: Los tres vértices no están alineados.
Sean u1, u2, u3 ∈ R tres valores reales.
∃!u : Ω→ R lineal que interpola esos tres valores. O sea,
existe una única función tal que
1 Es lineal: u(x,y) = a + bx + cy para algunos a,b, c ∈ R; e
2 Interpola: u(pj ) = uj, para j = 1, 2,3.
Importante: Si α = (α1, α2, α3) son las coordenadas
baricéntricas de un punto p ∈ Ωrespecto Ω, entonces
u(p) = α1u1 + α2u2 + α3u3.
Elementos 2D triangulares 18 /78
Problemas de detección e interpolación
Interpolación en un mallado triangular
Índice
1 Problemas de detección e interpolación
Detección en un triángulo
Detección en un mallado triangular
Interpolación en un triángulo
Interpolación en un mallado triangular
2 Repositorio oficial
3 Comandos específicos
4 Cuestiones
5 Respuestas
Elementos 2D triangulares 19 /78
Problemas de detección e interpolación
Interpolación en un mallado triangular
Problema a resolver
Tenemos un mallado triangular dado por:
Un conjunto de nodos p1, ...,pM ; y
Un conjunto de triángulos Ω1,...,ΩE.
Tenemos un conjunto de valores u1, ...,uM ∈ R.
Sea Ω = E
e=1
Ωe la unión de los triángulos del mallado.
∃
v
!u : Ω → R lineal a trozos que interpola a todos los
alores. O sea, existe una única función tal que:
1 Es lineal en cada triángulo: u|Ωe (x,y) = ae + bex + cey
para algunos coeficientes ae,be,ce ∈ R y para e = 1,...,E;
2 Interpola: u(pm) = um, para m = 1, ...,M.
Importante: Si α = (α1, α2, α3) son las coordenadas
baricéntricas de un punto p ∈ Ωe respecto Ωe, entonces
u(p) = α1uie + α2uje + α3uke .
Elementos 2D triangulares 20 /78
Problemas de detección e interpolación
Interpolación en un mallado triangular
Ejemplo
Elementos 2D triangulares 21 /78
Repositorio oficial
Índice
1 Problemas de detección e interpolación
Detección en un triángulo
Detección en un mallado triangular
Interpolación en un triángulo
Interpolación en un mallado triangular
2 Repositorio oficial
3 Comandos específicos
4 Cuestiones
5 Respuestas
Elementos 2D triangulares 22 /78
Repositorio oficial
Repositorio oficial
Es un conjunto de funciones-M y mallados que usaremos
a lo largo del curso para dibujar y realizar cálculos.
Debéis saber cómo se usan las funciones, pero, salvo
excepciones, no hace falta entender cómo están hechas.
No se pueden modificar.
Los dos repositorios están publicados en la esquina
inferior izquierda de la página de Numerical Factory.
Importante: Bajad los ficheros additionalFiles.zip y
meshFilesAll.rar, desempaquetadlos y guardad todo
el contenido en dos directorios que formen parte del path
de Matlab.
Elementos 2D triangulares 23 /78
Repositorio oficial
Función baryCoord
1 function [alphas,isInside]=baryCoord(vertices,point)
donde:
vertices (array 3x2) = tres vértices de un triángulo;
point (array 1x2) = coordenadas de un punto del plano;
alphas (array 1x3) = coordenadas baricéntricas;
isInside =
f
1, si el punto está dentro del triángulo
0, si el punto está fuera del triángulo
Nota: Con las notaciones de la primera sección:
1
2
vertices = [x1,y1; x2,y2; x3,y3];
point = [x,y];
Advertencia: No confundáis vectores fila con vectores columna.
Elementos 2D triangulares 24 /78
Repositorio oficial
Función plotElements
1 function plotElements(nodes, elem, numbering)
donde:
nodes (array nNodes x ndim) = coordenadas de cada
nodo del mallado, escritas por filas;
elem (array nElem x nVert) = índices de los vértices
de cada elemento del mallado, escritos por filas;
numbering =
f
1, para numerar nodos y elementos
0, en caso contrario
Nota: Hoy estudiamos un problema 2D: ndim=2 y trabajamos
con elementos triangulares: nVert=3. Más adelante
cambiaremos esos valores, pero usaremos la misma función.
Elementos 2D triangulares 25 /78
Repositorio oficial
Función plotContourSolution
1 function plotContourSolution(nodes,elem,u,titulo,paleta)
donde:
nodes (array nNodes x ndim) = coordenadas de cada
nodo del mallado, escritas por filas;
elem (array nElem x nVert) = índices de los vértices
de cada elemento del mallado, escritos por filas;
u (array nNodes x 1) = valores sobre los nodos;
titulo (string) = texto del título;
paleta (string) = paleta de colores usada.
Nota: Matlab tiene casi 20 paletas de color. Algunos ejemplos
son ’jet’, ’gray’, ’cool’, ’hot’, ’spring’, ’summer’,
’autumn’, ’winter’ y ’copper’.
Elementos 2D triangulares 26 /78
Comandos específicos
Índice
1 Problemas de detección e interpolación
Detección en un triángulo
Detección en un mallado triangular
Interpolación en un triángulo
Interpolación en un mallado triangular
2 Repositorio oficial
3 Comandos específicos
4 Cuestiones
5 Respuestas
Elementos 2D triangulares 27 /78
Comandos específicos
Invertir de una matriz
Dada una matriz cuadrada A de orden n, hay dos formas de
calcular en Matlab su inversa C = A−1.
1 Usar el comando inv.
1 C = inv(A);
2 Usar el comando eye y el símbolo .
1 C = Aeye(n);
Nota: Es más eficiente usar la instrucción x = Ab que la
instrucción x = inv(A)*b para resolver el sistema Ax = b.
Elementos 2D triangulares 28 /78
Comandos específicos
Seleccionar filas y/o columnas de una matriz
Si A es una matriz (array), entonces:
A(5,:) selecciona la fila 5 de la matriz;
A([1,2,5],:) selecciona las filas 1, 2 y 5 de la matriz;
A(3:5,:) selecciona desde la fila 3 hasta la fila 5;
A(1:5,:) selecciona las 5 primeras filas;
A(5:end,:) selecciona las filas a partir de la 5 (incluida);
A(:,[2,5]) selecciona las columnas 2 y 5 de la matriz;
A(1:5,3:end) selecciona las 5 primeras filas y las
columnas a partir de la 3 (incluida);
A(:,:) selecciona toda la matriz.
Elementos 2D triangulares 29 /78
Comandos específicos
Dibujar un polígono
Sean pi = (xi,yi) para i = 1,...,m los vértices de un
polígono Ω⊂ R2 ordenados en sentido antihorario.
Sea vertices un array m x 2, cuya fila i contiene las
coordenadas xi e yi.
Las siguientes instrucciones dibujan el polígono:
1
2
vplot = [vertices;vertices(1,:)];
plot(vplot(:,1),vplot(:,2),’k-’)
Explicación: La primera línea añade el primer vértice como
última fila del array vplot para que el polígono quede
cerrado.
Elementos 2D triangulares 30 /78
Comandos específicos
Cargar y cuantificar un mallado
El comando eval carga ficheros de datos. Por ejemplo,
1 eval(’meshHole’);
carga las matrices nodes (de tamaño 136x2) y elem (de
tamaño 220x3) que definen el mallado 2D triangular del
fichero meshHole.m. Nota: No se escribe la extensión del
fichero en el comando eval.
También trabajaremos con mallados cuadrangulares, 1D o
3D, pero todos se cargan con el comando eval.
Una vez cargado un mallado, las instrucciones
1
2
>> nNodes = size(nodes,1);
>> nElem = size(elem,1);
calculan su número de nodos y elementos
Elementos 2D triangulares 31 /78
Comandos específicos
Seleccionar los nodos de un elemento
Sea nodes un array nNodes x ndim con las
coordenadas de cada nodo del mallado, escritas por filas.
Sea elem un array nElem x nVert con los índices de
los vértices de cada elemento del mallado, escritos por
filas.
En esta clase, trabajamos con mallados 2D triangulares.
Es decir, ndim=2 y nVert=3.
Muy importante: La instrucción
1 nodes(elem(e,:),:)
selecciona el array nVert x ndim con las coordenadas
de cada nodo del elemento e del mallado, escritas por
filas.
Elementos 2D triangulares 32 /78
Comandos específicos
Interpolar en un mallado triangular
Sea u un array nNodes x 1 con los valores de una
cantidad en cada nodo del mallado triangular.
Sea elem un array nElem x 3 con los índices de los
vértices de cada elemento del mallado, escritos por filas.
Sean α = (α1, α2, α3) las coordenadas baricéntricas de un
punto p ∈ Ωe respecto Ωe.
La instrucción
1 uP = dot(alphas,u(elem(e,:)));
calcula el valor interpolado u(p) = α1uie + α2uje + α3uke .
Nota: El comando dot calcula el producto escalar de dos
vectores con el mismo número de componentes. Se
pueden multiplicar vectores fila por vectores columna.
Elementos 2D triangulares 33 /78
Comandos específicos
Añadir un directorio al “path”
En su estado inicial, cuando se le dice a Matlab que
ejecute un script o función escrita por el usuario, solo la
busca en el directorio que aparece en la esquina superior
izquierda de la ventana de comandos.
Es decir, inicialmente el “path” (camino de búsqueda) solo
contiene a ese directorio, que el usuario puede escoger.
El comando addpath añade directorios al “path”:
1
2
>> addpath ../additionalFiles
>> addpath ../meshFilesAll
Nota: El símbolo .. es el directorio padre del actual, luego
../meshFilesAll es un directorio hermano del actual.
Elementos 2D triangulares 34 /78
Comandos específicos
Mi estructura de directorios
Todas los subdirectorios cuelgan del mismo directorio raíz;
Funciones repositorio '
V
'
- subdirectorio
additionalFiles;
Mallados repositorio '
V
'
- subdirectorio meshFilesAll; y
Ficheros propios para la práctica t.p '
V
'
- subdirectorio t-p,
donde t = 1,2,3,4 y p = 1,...,13.
Elementos 2D triangulares 35 /78
Comandos específicos
Script para las figuras
1 %FILE: p12_myFigureSettings.m
2 %DESCRIPTION: Settings to get nice figures practice 1.2.
3 % reset(groot) -> reset to original settings.
4 set(groot,’DefaultLineLineWidth’,3.5)
5 set(groot,’DefaultAxesLineWidth’,1)
6 set(groot,’DefaultLineMarkerSize’,20)
7 set(groot,’DefaultLineMarkerEdgeColor’,’k’)
8 set(groot,’DefaultAxesFontSize’,20)
9 set(groot,’DefaultAxesFontWeight’,’bold’)
10 set(groot,’DefaultTextFontSize’,20)
11 set(groot,’DefaultAxesFontName’,’Times new Roman’)
12 set(groot,’DefaultLegendFontName’,’Times new Roman’)
13 set(groot,’defaultAxesXGrid’,’on’)
14 set(groot,’defaultAxesYGrid’,’on’)
Elementos 2D triangulares 36 /78
Cuestiones
Índice
1 Problemas de detección e interpolación
Detección en un triángulo
Detección en un mallado triangular
Interpolación en un triángulo
Interpolación en un mallado triangular
2 Repositorio oficial
3 Comandos específicos
4 Cuestiones
5 Respuestas
Elementos 2D triangulares 37 /78
Cuestiones
1 Construye tu propia versión de la función baryCoord.
Compara tu versión con la que hay en el repositorio oficial,
la cual pone el enfasis en las funciones de forma.
2 Considera el triángulo Ωde vértices
p1 = (1, 1), p2 = (3, 2), p3 = (2, 4).
a) Calcula las coordinadas baricéntricas del punto p = (2, 2).
b) Calcula el punto q cuyas coordenadas baricéntricas son
β = (1/6,1/3,1/2).
c) ¿Por qué no hay ningún punto de coordenadas
baricéntricas γ = (1/3,1/2,1/3)?
d) Calcula la función de forma ψ2(x,y).
Elementos 2D triangulares 38 /78
Cuestiones
3 Supongamos que escribimos las siguientes instrucciones
en un script o en la ventana de comandos:
1
2
3
>> nodes = [1,1; 3,2; 2,4];
>> point = [2,2];
>> [betas,isInside] = baryCoord(nodes,point)
¿Hay algún error en esas instrucciones?
4 Supongamos que escribimos las siguientes instrucciones
en un script o en la ventana de comandos para calcular la
segunda función de forma ψ2(x,y):
1
2
3
4
>> vertices = [1,1; 3,2; 2,4];
>> point = [0,0];
>> [alphas,isInside]=baryCoord(vertices,point)
>> A[0;1;0]
¿Hay algún error en esas instrucciones?
Elementos 2D triangulares 39 /78
Cuestiones
5 Consideramos el triángulo de la cuestión 2 y los puntos
q1 = (1.5,3),
q2 = (3.5,1),
q3 = (2, 3),
q4 = (2.5,3).
a) ¿Cuáles están fuera del triángulo? ¿Cuáles están dentro?
¿Cuáles están situados sobre un lado? ¿Sobre qué lado?
b) Dibuja el triángulo Ω en negro, los puntos exteriores de
rojo, los puntos completamente interiores de azul y los
puntos en la frontera en verde.
Elementos 2D triangulares 40 /78
Cuestiones
6 [Díficil] Considera la función dada por el código
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function [alphas,isInside] = baryCoordWrong(vertices,point)
%Computation of the barycentric coordinates
A = [ones(3,1),vertices];
C = Aeye(3); %Inverse of A
alphas = (C*[1; point’])’;
%Check if the point is inside the triangle
isInside=1;
if (min(alphas) < -1.e-14)
isInside=0;
end
end
a) Esta implementación contiene un error. ¿Cuál es?
b) Sin embargo, calcula correctamente todas las coordenadas
baricéntricas en el triángulo de la cuestión 2. ¿Por qué?
Elementos 2D triangulares 41 /78
Cuestiones
7 Crea una función
1 function [alphas,isInside]=baryRGBColor(vertices,point)
con los mismos argumentos que la función baryCoord
que dibuje el triángulo de negro, el vértice 1 de rojo, el 2
de verde, el 3 de azul y el punto de negro si está fuera y
con el color alphas en los canales RGB si está dentro.
Opcional: Mira la función baryRGBColorMouse donde el
punto se entra con el ratón.
8 Considera el triángulo de referencia ΩR de vértices
r1 = (0, 0), r2 = (1, 0), r3 = (0, 1).
a) Calcula a mano las tres funciones de forma ψj(x,y).
b) Calcula a mano las coordenadas baricéntricas del punto
genérico r = (x,y).
c) Comprueba los resultados con la función baryCoord.
Elementos 2D triangulares 42 /78
Cuestiones
9 Sea Ωun triángulo arbitrario y sea ΩR el triángulo de
referencia ΩR de la cuestión 8. Sea p un punto del plano.
Crea una función
1 function pointR = triangle2Reference(vertices,point)
donde:
vertices (array 3x2) = los tres vértices de Ω, escritos
por filas;
point (array 1x2) = coordenadas de p;
pointR (array 1x2) = coordenadas del punto r cuyas
coordenadas baricéntricas respecto ΩR coinciden con las
coordenadas baricéntricas respecto Ωde p.
Añade unas instrucciones a la función para dibujar ambos
triángulos y ambos puntos.
Opcional: Mira la función triangle2ReferenceMouse
donde el punto se entra con el ratón.
Elementos 2D triangulares 43 /78
Cuestiones
10 a) Dibuja a mano el mallado triangular dado por:
%Primer nodo: n1
%Segundo nodo: n2
1 nodes = [0, 0;
2 1, 0;
3 1, 1;
4 0, 1;
5 0.5, 0.5]; %Quinto nodo:
%Tercer nodo: n3
%Cuarto nodo: n4
n5
6 elem = [1, 2, 5; %Primer elemento: e1
7 2, 3, 5; %Segundo elemento: e2
8 3, 4, 5; %Tercer elemento: e3
9 4, 1, 5]; %Cuarto elemento: e4
Después, dibújalo con la función plotElements.
b) Detecta en qué elemento (en este caso, triángulo) del
mallado está contenido el punto p = (0.8, 0.7).
c) Escribe un script automatizado whatTriangle.m que
recorra en un bucle todos los elementos del mallado hasta
detectar en qué elemento está p.
Elementos 2D triangulares 44 /78
Cuestiones
11 Carga el mallado triangular meshHole.m.
a) ¿Cuántos nodos tiene?
b) ¿Cuántos elementos (triángulos) tiene?
c) ¿Qué elemento contiene al punto p = (0.83, 0.7)?
d) ¿Cuáles son los tres vértices de ese elemento?
e) Dibuja el mallado con la función plotElements y el punto.
12 Considera el mallado triangular de 8 nodos y 6 elementos:
a) Escribe unas matrices nodes y elem que lo codifiquen.
b) ¿Son únicas? En caso negativo, explica sus variaciones.
c) Comprueba el resultado con la función plotElements.
Elementos 2D triangulares 45 /78
Cuestiones
13 Haz lo mismo que en la cuestión 12, pero con el mallado
triangular:
Una costumbre útil: Es más fácil ver dónde está cada
punto si activamos el “grid” con la instrucción grid on.
Elementos 2D triangulares 46 /78
Cuestiones
14 Dibuja con la función plotElements el mallado triangular
que corresponde a los datos:
1
2
3
4
5
nodes = [0, 0; %Primer nodo: n1
1, 0; %Segundo nodo: n2
1, 1; %Tercer nodo: n3
0, 1; %Cuarto nodo: n4
0.5, 0.5]; %Quinto nodo: n5
6 elem = [5, 1, 2; %Primer elemento: e1
7 5, 2, 3; %Segundo elemento: e2
8 5, 3, 4; %Tercer elemento: e3
9 5, 1, 4]; %Cuarto elemento: e4
Obtenemos exactamente el mismo dibujo que el mallado
de la cuestión 10. Sin embargo, este nuevo mallado no es
“correcto”. ¿Por qué? ¿Qué elemento “falla”?
Elementos 2D triangulares 47 /78
Cuestiones
15 [Díficil] Carga el mallado triangular meshHole.m.
a) Determina los triángulos de áreas mínima y máxima.
b) Determina los triángulos de perímetros mínimo y máximo.
c) Calcula el área promedio y el perímetro promedio.
16 Carga el mallado triangular meshHole.m.
a) Calcula el valor interpolado en el punto p = (0.83, 0.7) de
la cantidad
1 u = (1:size(nodes,1))’;
que asigna a cada nodo el valor que corresponde a su
índice. Es decir, los primeros/últimos nodos tienen valores
(“temperaturas”) fríos/calientes.
Nota: Hoy no es obligatorio que u sea un vector columna,
luego podríamos escribir u = 1:size(nodes,1).
b) “Colorea” el mallado usando la función del repositorio
plotContourSolution con la paleta de colores ’jet’.
Elementos 2D triangulares 48 /78
Cuestiones
17 Carga el mallado triangular meshHole.m.
a) Construye un vector columna u con los valores que toma
en cada uno de sus nodos la función
g(x, y) = x2 + y2.
Es decir, los nodos que están cerca/lejos del origen tienen
valores (“temperaturas”) fríos/calientes.
b) Calcula el valor interpolado u(p) en el punto
p = (0.5, 0.75).
Calcula el error cometido en la aproximación g(p) ≈ u(p).
Es decir, calcula error(p) = |g(p) − u(p)|.
c)
q = (0.2, 0)?
d) “Colorea” el mallado usando la función del repositorio
plotContourSolution con la paleta de colores ’jet’.
Elementos 2D triangulares 49 /78
Cuestiones
18 Sea interpolTriangMesh el script usado para resolver
las cuestiones 16–17 y supongamos que hemos cargado
el mallado meshHole.m.
a) ¿Resuelven correctamente la cuestión 16 las siguientes
instrucciones? Justifica la respuesta.
1
2
3
>> f = (1:size(nodes,1))’;
>> p = [0.83,0.7];
>> interpolTriangMesh
b) Ejecutamos las siguientes instrucciones en la ventana de
comandos para resolver la cuestión 16
1
2
3
>> u = (1:size(nodes,1))’;
>> point = [0.83,0.7];
>> interpolTriangMesh
y después escribimos nElem para ver cuántos elementos
tiene el mallado. ¿Es correcto ese proceso?
c) Compara estas cuestiones con las cuestiones 3–4.
Elementos 2D triangulares 50 /78
Respuestas
Índice
1 Problemas de detección e interpolación
Detección en un triángulo
Detección en un mallado triangular
Interpolación en un triángulo
Interpolación en un mallado triangular
2 Repositorio oficial
3 Comandos específicos
4 Cuestiones
5 Respuestas
Elementos 2D triangulares 51 /78
Respuestas
1 Advertencia: La siguiente función no coincide con la oficial.
1 function [alphas, isInside] = baryCoord(vertices, point)
2 %FILE: baryCoord.m
3 %DESCRIPTION:
4 %Compute the barycentric coordinates of a point with respect to a triangle
5 %INPUT:
6 % vertices (array 3x2) = Coordinates of the vertices of the triangle
7 % vertices=[x1,y1;x2,y2;x3,y3]
8 % point (array 1x2) = Coordinates of the point.
9 %OUTPUT:
10 % alphas (array 1x3) = Barycentric coordinates of the point
11 % isInside (integer) = if isInside=1, then the point belongs to the triangle,
12 % if isInside=0, the point lies outside.
13 %EXAMPLE OF USE: [alphas, isInside]=baryCoord([1,1;3,2;2,4], [2,2])
14
15 % Part 1: Compute the barycentric coordinates
16 A = [ones(3,1),vertices];
17 C = Aeye(3); %Inverse of A
18 alphas = [1,point]*C;
19
20 % Part 2: Check if the point is inside the triangle
21 isInside=1;
22 if (min(alphas) < -1.e-14) %We consider a small tolerance for safety
23 isInside=0;
24 end
25
26 end
Elementos 2D triangulares 52 /78
Respuestas
2 a) Ventana de comandos:
1
2
3
4
5
6
7
>> vertices = [1,1; 3,2; 2,4];
>> point = [2,2];
>> [alphas,isInside] = baryCoord(vertices,point)
alphas =
4.0000e-01 4.0000e-01 2.0000e-01
isInside =
1
b) q = β1p1 + β2p2 + β3p3 = (13/6, 17/6).
Ventana de comandos:
1
2
3
4
>> betas = [1/6,1/3,1/2];
>> q = betas*vertices %Since betas is 1x3 and vertices is 3x2
q =
2.1667e+00 2.8333e+00
c) Porque γ1 + γ2 + γ3 /= 1.
d) ψ2(x,y) = (−2 + 3x − y)/5. Ventana de comandos:
1 >> vertices = [1,1; 3,2; 2,4];
2 >> A = [ones(3,1), vertices];
3 >> A[0;1;0]
4 ans
5 -4.0000e-01
6 6.0000e-01
7 -2.0000e-01
Elementos 2D triangulares 53 /78
Respuestas
3 Las instrucciones son correctas.
Aunque la cabecera de la función sea
1 function [alphas,isInside]=baryCoord(vertices,point)
es correcto invocarla cambiando el nombre de los
argumentos de entrada y/o salida, pues solo importa que
los argumentos tengan el tipo correcto (arrays del tamaño
adecuado, strings, cells, estructuras, etcétera).
4 Las instrucciones son incorrectas.
Las variables usadas dentro de una función (salvo sin son
argumentos de salida) son locales. Es decir, solo son
conocidas dentro de la función. Por tanto, cuando
llegamos a la línea 4 del script, la matriz A es desconocida.
Elementos 2D triangulares 54 /78
Respuestas
5 a) q1 y q2 están fuera, q3 dentro y q4 sobre el lado definido
por p2 y p3.
Ventana de comandos:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
>> vertices = [1,1; 3,2; 2,4];
>> q1 = [1.5,3];
>> [alphas,isInside]=baryCoord(vertices,q1)
alphas =
4.0000e-01 -1.0000e-01 7.0000e-01
isInside =
0
>> q2 = [3.5,1];
>> [alphas,isInside]=baryCoord(vertices,q2)
alphas =
-5.5511e-17 1.5000e+00 -5.0000e-01
isInside =
0
>> q3 = [2,3];
>> [alphas,isInside]=baryCoord(vertices,q3)
alphas =
2.0000e-01 2.0000e-01 6.0000e-01
isInside =
1
>> q4 = [2.5,3];
>> [alphas,isInside]=baryCoord(vertices,q4)
alphas =
0 5.0000e-01 5.0000e-01
isInside =
1
Elementos 2D triangulares 55 /78
Respuestas
5 b) Script:
1 %FILE: p12_Question5b.m
2 %DESCRIPTION: Answer to Question 5b (see slides on Triangular Elements)
3
4 vertices = [1,1; 3,2; 2,4]; %Triangle vertices
5 q = [1.5,3; 3.5,1; 2,3; 2.5,3]; %The four points to study
6
7 %We add the first vertex at the end to plot a closed triangle,
8 vplot=[vertices;vertices(1,:)];
9 plot(vplot(:,1),vplot(:,2),’k-’);
10 hold on
11
12 %We use the baryCoord function to study each point q(i,:)
13 [n,m] = size(q);
14 for i=1:n
15 [alphas,isInside]=baryCoord(vertices,q(i,:));
16 if isInside==0
17 plot(q(i,1),q(i,2),’ko’,’MarkerFaceColor’,’r’)
18 elseif min(alphas)>1.e-14 %We consider a small tolerance for safety
19 plot(q(i,1),q(i,2),’ko’,’MarkerFaceColor’,’b’)
20 else
21 plot(q(i,1),q(i,2),’ko’,’MarkerFaceColor’,’g’)
22 end
23 end
24 hold off
Elementos 2D triangulares 56 /78
Respuestas
q1 = (1.5, 3) está fuera;
q2 = (3.5, 1) está fuera y
sobre la prolongación de
un lado;
q3 = (2, 3) está dentro;
q4 = (2.5, 3) está dentro y
sobre un lado.
Nota: Para obtener este bonito
dibujo, es necesario ejecutar
antes el script
p12_myFigureSettings
con los buenos settings para
figuras.
Elementos 2D triangulares 57 /78
Respuestas
6 a) La fórmula correcta es α = zC, no α = (Cz,),.
b) Porque el triángulo de la cuestión 2 hace que la matriz
1 x1 y1 1 1 1
A = 1 x2 y2 = 1 3 2
1 x3 y3 1 2 4
sea simétrica, luego C = A−1 también lo es y, por tanto,
(Cz,), = zC, = zC.
Elementos 2D triangulares 58 /78
Respuestas
alphas = [1,point]*C;
7 Función:
1 function [alphas, isInside]=baryRGBColor(vertices, point)
2 %FILE: baryRGBColor.m
3 %DESCRIPTION: RGB-color representation of the barycentric coordinates
4 %Part 1: Compute the barycentric coordinates
5 A = [ones(3,1),vertices];
6 C = Aeye(3); %Inverse of A
7
8 %Part 2: Check if the point is inside the triangle
9 isInside=1;
10 if (min(alphas) < -1.e-14) %We consider a small tolerance for safety
11 isInside=0;
12 end
13 %Part 3: Plotting
14 vplot=[vertices;vertices(1,:)];
15 plot(vplot(:,1),vplot(:,2),’k-’)
16 hold on
17 plot(vertices(1,1),vertices(1,2),’ko’,’MarkerFaceColor’,’r’)
18 plot(vertices(2,1),vertices(2,2),’ko’,’MarkerFaceColor’,’g’)
19 plot(vertices(3,1),vertices(3,2),’ko’,’MarkerFaceColor’,’b’)
20 if isInside
21 plot(point(1),point(2),’ko’,’MarkerFaceColor’,abs(alphas))
22 else
23 plot(point(1),point(2),’ko’,’MarkerFaceColor’,’k’)
24 end
25 title([’[R,G,B] = [’,num2str(alphas(1),’%.2f’),’,’,...
26 num2str(alphas(2),’%.2f’),’,’,num2str(alphas(3),’%.2f’),’]’])
27 hold off
28 end
Elementos 2D triangulares 59 /78
Respuestas
p1 = (1, 1)
p2 = (3, 2)
p3 = (2, 4)
p = (2, 2)
Nota: Para obtener este bonito
dibujo, es necesario ejecutar
antes el script
p12_myFigureSettings
con los buenos settings para
figuras.
Elementos 2D triangulares 60 /78
Respuestas
%Left-button -> boton = 1
%First time we do not delete the previous picture
[x,y,boton]=ginput(1);
alphas = [1,x,y]*C;
if (borrar)
delete(h2); delete(h3);
end
if (min(alphas) < -1.e-14)
h2=plot(x,y,’ko’,’MarkerFaceColor’,’k’);
else
h2=plot(x,y,’ko’,’MarkerFaceColor’,abs(alphas));
end
h3=title([’[R,G,B] = [’,num2str(alphas(1),’%.2f’),’,’,...
num2str(alphas(2),’%.2f’),’,’,num2str(alphas(3),’%.2f’),’]’]);
borrar=1; %After the first time, we do delete the previous picture
1 function baryRGBColorMouse(vertices)
2 %FILE: baryRGBColorMouse.m
3 %DESCRIPTION: RGB-color representation of barycentric coordinates + mouse
4 A = [ones(3,1),vertices];
5 C = Aeye(3); %Inverse of A
6 %Draw the triangle and its vertices
7 vplot=[vertices;vertices(1,:)];
8 plot(vplot(:,1),vplot(:,2),’k-’)
9 hold on
10 plot(vertices(1,1),vertices(1,2),’ko’,’MarkerFaceColor’,’r’)
11 plot(vertices(2,1),vertices(2,2),’ko’,’MarkerFaceColor’,’g’)
12 plot(vertices(3,1),vertices(3,2),’ko’,’MarkerFaceColor’,’b’)
13 %Wait for mouse input, delete old point & title, redraw new point & title
14 boton=1;
15 borrar=0;
16 while(boton==1)
17
18
19
20
21
22
23
24
25
26
27
28
29
30 end
Elementos 2D triangulares 61 /78
Respuestas
8 a) Las tres funciones de forma son
ψ1(x,y) = 1 − x − y, ψ2(x,y) = x, ψ3(x,y) = y.
b) Las coordenadas baricéntricas del punto r = (x,y) son
α = (α1, α2, α3) = (1 − x − y,x,y).
b) Comprobación en la ventana de comandos:
0 5.0000e-01 5.0000e-01
4.0000e-01
1 >> verticesR = [0,0; 1,0; 0,1];
2 >> pointR = [0.5,0.5];
3 >> [alphasR,isInsideR]=baryCoord(verticesR,pointR)
4 alphasR =
5
6 inInsideR =
7 1
8 >> pointR = [-0.5,0.4];
9 >> [alphasR,isInsideR]=baryCoord(verticesR,pointR)
10 alphasR =
11 1.1000e+00 -5.0000e-01
12 isInsideR =
13 0
Elementos 2D triangulares 62 /78
Respuestas
%Inverse of A
alphas = [1,point]*C;
9 Función:
1 function pointR = triangle2Reference(vertices, point)
2 %FILE: triangle2Reference.m
3 %DESCRIPTION: Answer to Question 9 (see slides on Triangular Elements)
4
5 %Compute pointR
6 A = [ones(3,1),vertices];
7 C = Aeye(3);
8
9 pointR = [alphas(2),alphas(3)];
10
11 %Draw figure
12 vplot = [vertices;vertices(1,:)];
13 plot(vplot(:,1),vplot(:,2),’k-’)
14 hold on
15 axis equal
16 verticesR = [0,0;1,0;0,1]; %Reference triangle
17 vplotR=[verticesR;verticesR(1,:)];
18 plot(vplotR(:,1),vplotR(:,2),’k-’)
19 plot(point(1),point(2),’ko’,’MarkerFaceColor’,’red’,’lineWidth’,2)
20 plot(pointR(1),pointR(2),’ko’,’MarkerFaceColor’,’blue’,’lineWidth’,2)
21 linePlot = [point; pointR];
22 plot(linePlot(:,1),linePlot(:,2),’g-’)
23 hold off
24
25 end
Elementos 2D triangulares 63 /78
Respuestas
Elementos 2D triangulares 64 /78
Respuestas
10 a) Ventana de comandos:
1 >> nodes = [0, 0;
2 1, 0;
3 1, 1;
4 0, 1;
5 0.5, 0.5];
6 >> elem = [1, 2, 5;
7 2, 3, 5;
8 3, 4, 5;
9 4, 1, 5];
10 >> plotElements(nodes,elem,1);
Advertencia: La función
plotElements debe
estar o bien en el
directorio actual o bien
en el “path” de Matlab.
Elementos 2D triangulares
65 /78
Respuestas
10 b) Primera versión (no automatizable):
1 >> point = [0.8,0.7];
2 >> [alphas1,isInside1]=baryCoord(nodes([1,2,5],:),point)
3 alphas1 =
4 -5.0000e-01 1.0000e-01 1.4000e+00
5 isInside1 =
6 0
7 >> [alphas2,isInside2]=baryCoord(nodes([2,3,5],:),point)
8 alphas2 =
9 1.0000e-01 5.0000e-01 4.0000e-01
10 isInside2 =
11 1
12 >> [alphas3,isInside3]=baryCoord(nodes([3,4,5],:),point)
13 alphas3 =
14 5.0000e-01 -1.0000e-01 6.0000e-01
15 isInside3 =
16 0
17 >> [alphas4,isInside4]=baryCoord(nodes([4,1,5],:),point)
18 alphas4 =
19 -1.0000e-01 -5.0000e-01 1.6000e+00
20 isInside4 =
21 0
Conclusión: p = (0.8, 0.7) está en el segundo elemento.
Elementos 2D triangulares
66 /78
Respuestas
10 b) Segunda versión (automatizable):
1 >> point = [0.8,0.7];
2 >> [alphas1,isInside1]=baryCoord(nodes(elem(1,:),:),point)
3 alphas1 =
4 -5.0000e-01 1.0000e-01 1.4000e+00
5 isInside1 =
6 0
7 >> [alphas2,isInside2]=baryCoord(nodes(elem(2,:),:),point)
8 alphas2 =
9 1.0000e-01 5.0000e-01 4.0000e-01
10 isInside2 =
11 1
12 >> [alphas3,isInside3]=baryCoord(nodes(elem(3,:),:),point)
13 alphas3 =
14 5.0000e-01 -1.0000e-01 6.0000e-01
15 isInside3 =
16 0
17 >> [alphas4,isInside4]=baryCoord(nodes(elem(4,:),:),point)
18 alphas4 =
19 -1.0000e-01 -5.0000e-01 1.6000e+00
20 isInside4 =
21 0
Conclusión: p = (0.8, 0.7) está en el segundo elemento.
Elementos 2D triangulares
67 /78
Respuestas
10 c) Script (automatizado):
1 %FILE: whatTriangle.m
2 %DESCRIPTION: Answer Questions 10c & 11 (slides on Triangular Elements)
3 nElem = size(elem,1);
4 for e=1:nElem %We run over all elements
5 [alphas,isInside]=baryCoord(nodes(elem(e,:),:),point);
6 if isInside
7 fprintf(’The point is in triangle %dn’,e);
8
9
10
break %We exit the FOR loop
end
end
Ventana de comandos:
1
2
3
4
5
6
7
8
>> nodes = [0, 0; 1, 0; 1, 1; 0, 1; 0.5, 0.5];
>> elem = [1, 2, 5;
2, 3, 5;
3, 4, 5;
4, 1, 5];
>> point = [0.8,0.7];
>> whatTriangle
The point is in triangle 2
Elementos 2D triangulares 68 /78
Respuestas
11 a) 136 nodos (línea 5).
b) 220 elementos (línea 8).
c) p ∈ Ω189 (línea 11).
d) Líneas 14–16.
e) Ventana de comandos:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>> addpath ../meshFilesAll
>> eval(’meshHole’)
>> nNodes = size(nodes,1)
ans =
136
>> nElem = size(elem,1)
ans =
220
>> point = [0.83,0.7];
>> whatTriangle
The point is in triangle 189
>> nodes(elem(189,:),:)
ans =
8.7447e-01 6.2188e-01
8.7850e-01 7.5802e-01
7.3942e-01 7.4997e-01
>> plotElements(nodes,elem,0)
>> hold on
>> plot(point(1),point(2),’o’,...
’MarkerFaceColor’,’r’,...
’MarkerSize’,10,’LineWidth’,2)
>> hold off
Elementos 2D triangulares
69 /78
Respuestas
12 a) Script:
1 nodes=[-2,0;
2 -1,0;
3 0,0;
4 1,0;
5 2,0;
6 -1,1;
7 0,1;
8 1,1];
9 elem = [1, 2, 6;
10 2, 3, 6;
11 3, 7, 6;
12 3, 8, 7;
13 3, 4, 8;
14 4, 5, 8];
b) No son únicas. Podemos cambiar el orden de los nodos (o
sea, permutar filas de nodes y entonces modificar elem
para no cambiar el mallado), cambiar el orden de los
elementos (o sea, permutar filas de elem) o el orden de los
nodos dentro de algunos elementos (o sea, realizar
permutaciones cíclicas dentro de algunas filas de nodes).
c) Basta escribir plotElements(nodes,elem,1).
Elementos 2D triangulares
70 /78
Respuestas
13 a) Script:
1 nodes=[-2,0;
2 -1,0;
3 0,0;
4 1,0;
5 2,0;
6 -1,1;
7 0,1;
8 1,1];
9 elem = [1, 2, 6;
10 2, 7, 6;
11 2, 3, 7;
12 3, 4, 7;
13 4, 8, 7;
14 4, 5, 8];
b) No son únicas. Podemos cambiar el orden de los nodos (o
sea, permutar filas de nodes y entonces modificar elem
para no cambiar el mallado), cambiar el orden de los
elementos (o sea, permutar filas de elem) o el orden de los
nodos dentro de algunos elementos (o sea, realizar
permutaciones cíclicas dentro de algunas filas de nodes).
c) Basta escribir plotElements(nodes,elem,1).
Elementos 2D triangulares 71 /78
Respuestas
14 Los nodos del cuarto elemento no están ordenados en
sentido antihorario. Eso es peligroso, pues algunas
funciones del repositorio oficial pueden dar resultados
incorrectos en mallados con algún elemento mal ordenado.
De hecho, ordenar mal los nodos de un elemento también
puede tener malas consecuencias en cálculos manuales.
15 Ejecutando en la ventana de comandos el script de la
siguiente página obtenemos que:
1
2
3
4
5
6
7
8
9
>> addpath ../meshFilesAll/
>> eval(’meshHole’)
>> areasPerimetersTriangles
Triangle 7 has maximum area
Triangle 52 has minimum area
Triangle 7 has maximum perimeter
Triangle 44 has minimum perimeter
The mean area is 0.007967
The mean perimeter is 0.415972
Elementos 2D triangulares 72 /78
Respuestas
Script:
p1 = nodes(elem(e,1),:);
p2 = nodes(elem(e,2),:);
p3 = nodes(elem(e,3),:);
%First vertex
%Second vertex
%Third vertex
perim(e) = norm(p2-p1) + norm(p3-p2) + norm(p3-p1); %Perimeter
areas(e) = det([p2-p1;p3-p1])/2; %Area
1 %FILE: areasPerimetersTriangles.m
2 %DESCRIPTION: Answer to Question 15 (see slides on Triangular Elements)
3 nElem = size(elem,1); %Number of elements in the mesh
4 areas = zeros(1,nElem); %We create a vector to storage all areas
5 perim = zeros(1,nElem); %We create a vector to storage all perimeters
6 for e=1:nElem %We run over all elements
7
8
9
10
11
12 end
13 [maxArea,eMaxArea] = max(areas); %The second output is the desired index
14 [minArea,eMinArea] = min(areas); %The second output is the desired index
15 [maxPerim,eMaxPerim] = max(perim); %The second output is the desired index
16 [minPerim,eMinPerim] = min(perim); %The second output is the desired index
17 fprintf(’Triangle %d has maximum arean’,eMaxArea);
18 fprintf(’Triangle %d has minimum arean’,eMinArea);
19 fprintf(’Triangle %d has maximum perimetern’,eMaxPerim);
20 fprintf(’Triangle %d has minimum perimetern’,eMinPerim);
21 fprintf(’The mean area is %6.4fn’,mean(areas));
22 fprintf(’The mean perimeter is %6.4fn’,mean(perim));
Reto: Escribir una versión de este script que use los comandos
polyshape, perimeter y polyarea de Matlab. Os podéis inspirar
en el script areasPerimetersQuad de la siguiente sección.
Elementos 2D triangulares 73 /78
Respuestas
16 Ejecutando en la ventana de comandos el script de la
siguiente página obtenemos que:
1 >> addpath ../meshFilesAll/
2 >> eval(’meshHole’);
3 >> u = (1:size(nodes,1))’;
4 >> point = [0.83,0.7];
5 >> interpolTriangMesh
6 The point is in triangle 189;
7 whose nodes have indexes 109, 112, and 92.
8 The interpolated value is uP = 104.0420
Finalmente, obtenemos el dibujo con la instrucción:
1 >> plotContourSolution(nodes,elem,u,’Color plot’,’jet’)
Elementos 2D triangulares 74 /78
Respuestas
= Elements; the indexes of the three nodes of
each triangle in a row
= Values on the nodes
= Coordinates of the point
= linearly interpolated value at the point
= index of the triangle containing the point
if isInside %If isinside, compute the results and break the for loop
elemP = e;
nodesP = elem(e,:);
uP = dot(alphas,u(elem(e,:))); %dot is the scalar product
break
end
1 %FILE: interpolTriangMesh.m
2 %DESCRIPTION: Given a triangular mesh, some values at its nodes, and a
3 %point, we find the triangle containing the point and we linearly
4 %interpolate the value at the point by using its barycentric coordinates
5 %INPUT:
6 % nodes (array nNodes x 2) = Nodes; each node in a row
7 % elem (array nElem x 3)
8 %
9 % u (array nNodes x 1)
10 % point (array 1x2)
11 %where nNodes = number of nodes and nElem = number of elements
12 %OUTPUT:
13 % uP
14 % elemP
15 % nodesP (array 1x3) = indexes of the nodes of the triangle elemP
16 nElem=size(elem,1);
17 for e=1:nElem %We run over all elements
18 [alphas, isInside] = baryCoord(nodes(elem(e,:),:), point);
19
20
21
22
23
24
25 end
26 fprintf(’The point is in triangle %d;n’,elemP);
27 fprintf(’whose nodes have indexes %d, %d, and %d.n’,...
28 nodesP(1),nodesP(2),nodesP(3));
29 fprintf(’The interpolated value is uP = %6.4fn’,uP);
Elementos 2D triangulares 75 /78
Respuestas
Elementos 2D triangulares 76 /78
Respuestas
17 a) Ventana de comandos:
1
2
3
4
>> addpath ../meshFilesAll/
>> eval(’meshHole’);
>> g = @(x,y) x.^2 + y.^2; %Funcion inline
>> u = g(nodes(:,1),nodes(:,2));
b) Usamos el script visto en la cuestión 16:
1
2
3
4
5
6
7
8
9
>> point = [0.5,0.75];
>> interpolTriangMesh
The point is in triangle 158;
whose nodes have indexes 69, 62, and 54.
The interpolatred value is uP = 0.8161
>> gP = g(point(1),point(2));
>> errorP = abs(gP-uP) %uP was computed in the script
errorP =
3.5901e-03
c) No, ya que q /
∈Ω.
d) El dibujo se obtiene con la instrucción:
1 >> plotContourSolution(nodes,elem,u,’Color plot’,’jet’)
Elementos 2D triangulares 77 /78
Respuestas
Elementos 2D triangulares 78 /78
Respuestas
18 a) Esas instrucciones son incorrectas, pues el array de
valores f y el punto p tienen otros nombres en el script.
b) Esas instrucciones son correctas, pues después de
ejecutar un script se recuerdan todas las variables
calculadas en él, a no ser que las borremos con el
comando clear.
c) En las funciones, el nombre de los argumentos es
irrelevante y las variables locales internas desaparecen al
salir de la función. Los scripts se comportan de forma
completamente opuesta. Los buenos programadores
prefieren trabajar con funciones.

Más contenido relacionado

Similar a Coordenadas baricéntricas. Elementos 2D triangulares

conicas tp.pdf
conicas tp.pdfconicas tp.pdf
conicas tp.pdf
MaxiMedina14
 
Tema 1 def 14_15
Tema 1 def 14_15Tema 1 def 14_15
Angulos en.posicion.normal 2018
Angulos en.posicion.normal 2018Angulos en.posicion.normal 2018
Angulos en.posicion.normal 2018
Edgar
 
Semana 3 del 11al 15 abril-m3
Semana 3 del 11al 15 abril-m3Semana 3 del 11al 15 abril-m3
Semana 3 del 11al 15 abril-m3
Lorena Covarrubias
 
Matrices
Matrices Matrices
Semana 4x
Semana 4xSemana 4x
Cuaderno Matemática 12º Semestre
Cuaderno Matemática 12º SemestreCuaderno Matemática 12º Semestre
Cuaderno Matemática 12º Semestre
Prof. Luis Eduardo Camacho Saez
 
Matrices Matemáticos universitario pptx
Matrices  Matemáticos universitario pptxMatrices  Matemáticos universitario pptx
Matrices Matemáticos universitario pptx
NancyJulcasumaran
 
UTPL-FUNDAMENTOS MATEMÁTICOS-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-FUNDAMENTOS MATEMÁTICOS-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)UTPL-FUNDAMENTOS MATEMÁTICOS-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-FUNDAMENTOS MATEMÁTICOS-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
Videoconferencias UTPL
 
Divide y Venceras
Divide y VencerasDivide y Venceras
Divide y Venceras
Silvana Cecilia Vire
 
FUNDAMENTOS MATEMATICOS (I Bimestre Abril Agosto 2011)
FUNDAMENTOS MATEMATICOS (I Bimestre Abril Agosto 2011)FUNDAMENTOS MATEMATICOS (I Bimestre Abril Agosto 2011)
FUNDAMENTOS MATEMATICOS (I Bimestre Abril Agosto 2011)
Videoconferencias UTPL
 
Semana 4
Semana 4Semana 4
Matrices y determinantes
Matrices y determinantesMatrices y determinantes
Matrices y determinantes
bea sosa
 
Matrices
MatricesMatrices
Matrices
Brian Bastidas
 
Apunte1 ecuaciones diferenciales de profe claudio
Apunte1 ecuaciones diferenciales de profe claudioApunte1 ecuaciones diferenciales de profe claudio
Apunte1 ecuaciones diferenciales de profe claudio
VALENTINASALAZAR850972
 
Cap
CapCap
Introduccion al Calculo Matricial Ccesa007.pdf
Introduccion al Calculo Matricial Ccesa007.pdfIntroduccion al Calculo Matricial Ccesa007.pdf
Introduccion al Calculo Matricial Ccesa007.pdf
Demetrio Ccesa Rayme
 
Cuaderno Matemática 10º Semestre
Cuaderno Matemática 10º  SemestreCuaderno Matemática 10º  Semestre
Cuaderno Matemática 10º Semestre
Prof. Luis Eduardo Camacho Saez
 
Libro recopilacion demre
Libro recopilacion demreLibro recopilacion demre
Libro recopilacion demre
Hernan Rodriguez Troncoso
 
Matrices
MatricesMatrices

Similar a Coordenadas baricéntricas. Elementos 2D triangulares (20)

conicas tp.pdf
conicas tp.pdfconicas tp.pdf
conicas tp.pdf
 
Tema 1 def 14_15
Tema 1 def 14_15Tema 1 def 14_15
Tema 1 def 14_15
 
Angulos en.posicion.normal 2018
Angulos en.posicion.normal 2018Angulos en.posicion.normal 2018
Angulos en.posicion.normal 2018
 
Semana 3 del 11al 15 abril-m3
Semana 3 del 11al 15 abril-m3Semana 3 del 11al 15 abril-m3
Semana 3 del 11al 15 abril-m3
 
Matrices
Matrices Matrices
Matrices
 
Semana 4x
Semana 4xSemana 4x
Semana 4x
 
Cuaderno Matemática 12º Semestre
Cuaderno Matemática 12º SemestreCuaderno Matemática 12º Semestre
Cuaderno Matemática 12º Semestre
 
Matrices Matemáticos universitario pptx
Matrices  Matemáticos universitario pptxMatrices  Matemáticos universitario pptx
Matrices Matemáticos universitario pptx
 
UTPL-FUNDAMENTOS MATEMÁTICOS-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-FUNDAMENTOS MATEMÁTICOS-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)UTPL-FUNDAMENTOS MATEMÁTICOS-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-FUNDAMENTOS MATEMÁTICOS-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
 
Divide y Venceras
Divide y VencerasDivide y Venceras
Divide y Venceras
 
FUNDAMENTOS MATEMATICOS (I Bimestre Abril Agosto 2011)
FUNDAMENTOS MATEMATICOS (I Bimestre Abril Agosto 2011)FUNDAMENTOS MATEMATICOS (I Bimestre Abril Agosto 2011)
FUNDAMENTOS MATEMATICOS (I Bimestre Abril Agosto 2011)
 
Semana 4
Semana 4Semana 4
Semana 4
 
Matrices y determinantes
Matrices y determinantesMatrices y determinantes
Matrices y determinantes
 
Matrices
MatricesMatrices
Matrices
 
Apunte1 ecuaciones diferenciales de profe claudio
Apunte1 ecuaciones diferenciales de profe claudioApunte1 ecuaciones diferenciales de profe claudio
Apunte1 ecuaciones diferenciales de profe claudio
 
Cap
CapCap
Cap
 
Introduccion al Calculo Matricial Ccesa007.pdf
Introduccion al Calculo Matricial Ccesa007.pdfIntroduccion al Calculo Matricial Ccesa007.pdf
Introduccion al Calculo Matricial Ccesa007.pdf
 
Cuaderno Matemática 10º Semestre
Cuaderno Matemática 10º  SemestreCuaderno Matemática 10º  Semestre
Cuaderno Matemática 10º Semestre
 
Libro recopilacion demre
Libro recopilacion demreLibro recopilacion demre
Libro recopilacion demre
 
Matrices
MatricesMatrices
Matrices
 

Último

Los Dominios y Reinos de los Seres Vivos
Los Dominios y Reinos de los Seres VivosLos Dominios y Reinos de los Seres Vivos
Los Dominios y Reinos de los Seres Vivos
karlafreire0608
 
Eureka 2024 ideas y dudas para la feria de Ciencias
Eureka 2024 ideas y dudas para la feria de CienciasEureka 2024 ideas y dudas para la feria de Ciencias
Eureka 2024 ideas y dudas para la feria de Ciencias
arianet3011
 
MATERIAL ESCOLAR 2024-2025 3 AÑOS CEIP SAN CRISTÓBAL
MATERIAL ESCOLAR 2024-2025 3 AÑOS CEIP SAN CRISTÓBALMATERIAL ESCOLAR 2024-2025 3 AÑOS CEIP SAN CRISTÓBAL
MATERIAL ESCOLAR 2024-2025 3 AÑOS CEIP SAN CRISTÓBAL
Ana Fernandez
 
DESARROLLO DE LAS RELACIONES CON LOS STAKEHOLDERS.pdf
DESARROLLO DE LAS RELACIONES CON LOS STAKEHOLDERS.pdfDESARROLLO DE LAS RELACIONES CON LOS STAKEHOLDERS.pdf
DESARROLLO DE LAS RELACIONES CON LOS STAKEHOLDERS.pdf
JonathanCovena1
 
Hablemos de ESI para estudiantes Cuadernillo
Hablemos de ESI para estudiantes CuadernilloHablemos de ESI para estudiantes Cuadernillo
Hablemos de ESI para estudiantes Cuadernillo
Mónica Sánchez
 
Mundo ABC Examen 1 Grado- Tercer Trimestre.pdf
Mundo ABC Examen 1 Grado- Tercer Trimestre.pdfMundo ABC Examen 1 Grado- Tercer Trimestre.pdf
Mundo ABC Examen 1 Grado- Tercer Trimestre.pdf
ViriEsteva
 
Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...
Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...
Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...
Juan Martín Martín
 
Power Point: El conflicto inminente (Bosquejo)
Power Point: El conflicto inminente (Bosquejo)Power Point: El conflicto inminente (Bosquejo)
Power Point: El conflicto inminente (Bosquejo)
https://gramadal.wordpress.com/
 
MATERIAL ESCOLAR 2024-2025. 4 AÑOS CEIP SAN CRISTOBAL
MATERIAL ESCOLAR 2024-2025. 4 AÑOS CEIP SAN CRISTOBALMATERIAL ESCOLAR 2024-2025. 4 AÑOS CEIP SAN CRISTOBAL
MATERIAL ESCOLAR 2024-2025. 4 AÑOS CEIP SAN CRISTOBAL
Ana Fernandez
 
Presentación simple corporativa degradado en violeta blanco.pdf
Presentación simple corporativa degradado en violeta blanco.pdfPresentación simple corporativa degradado en violeta blanco.pdf
Presentación simple corporativa degradado en violeta blanco.pdf
eleandroth
 
APUNTES UNIDAD I ECONOMIA EMPRESARIAL .pdf
APUNTES UNIDAD I ECONOMIA EMPRESARIAL .pdfAPUNTES UNIDAD I ECONOMIA EMPRESARIAL .pdf
APUNTES UNIDAD I ECONOMIA EMPRESARIAL .pdf
VeronicaCabrera50
 
Presentación de proyecto en acuarela moderna verde.pdf
Presentación de proyecto en acuarela moderna verde.pdfPresentación de proyecto en acuarela moderna verde.pdf
Presentación de proyecto en acuarela moderna verde.pdf
LuanaJaime1
 
CORREOS SEGUNDO 2024 HONORIO DELGADO ESPINOZA
CORREOS SEGUNDO 2024 HONORIO DELGADO ESPINOZACORREOS SEGUNDO 2024 HONORIO DELGADO ESPINOZA
CORREOS SEGUNDO 2024 HONORIO DELGADO ESPINOZA
Sandra Mariela Ballón Aguedo
 
Cronica-de-una-Muerte-Anunciada - Gabriel Garcia Marquez.pdf
Cronica-de-una-Muerte-Anunciada - Gabriel Garcia Marquez.pdfCronica-de-una-Muerte-Anunciada - Gabriel Garcia Marquez.pdf
Cronica-de-una-Muerte-Anunciada - Gabriel Garcia Marquez.pdf
RicardoValdiviaVega
 
POESÍA POR EL DIA DEL PADREEEEEEEEEE.pdf
POESÍA POR EL DIA DEL PADREEEEEEEEEE.pdfPOESÍA POR EL DIA DEL PADREEEEEEEEEE.pdf
POESÍA POR EL DIA DEL PADREEEEEEEEEE.pdf
karlavasquez49
 
Liturgia día del Padre del siguiente domingo.pptx
Liturgia día del Padre del siguiente domingo.pptxLiturgia día del Padre del siguiente domingo.pptx
Liturgia día del Padre del siguiente domingo.pptx
YeniferGarcia36
 
FEEDBACK DE LA ESTRUCTURA CURRICULAR- 2024.pdf
FEEDBACK DE LA ESTRUCTURA CURRICULAR- 2024.pdfFEEDBACK DE LA ESTRUCTURA CURRICULAR- 2024.pdf
FEEDBACK DE LA ESTRUCTURA CURRICULAR- 2024.pdf
Jose Luis Jimenez Rodriguez
 
Mi Comunidad En El Sector Monterrey-Poste Blanco
Mi Comunidad En El Sector Monterrey-Poste BlancoMi Comunidad En El Sector Monterrey-Poste Blanco
Mi Comunidad En El Sector Monterrey-Poste Blanco
Ruth Noemí Soto Villegas
 
La vida de Martin Miguel de Güemes para niños de primaria
La vida de Martin Miguel de Güemes para niños de primariaLa vida de Martin Miguel de Güemes para niños de primaria
La vida de Martin Miguel de Güemes para niños de primaria
EricaCouly1
 
ACERTIJO DESCIFRANDO CÓDIGO DEL CANDADO DE LA TORRE EIFFEL EN PARÍS. Por JAVI...
ACERTIJO DESCIFRANDO CÓDIGO DEL CANDADO DE LA TORRE EIFFEL EN PARÍS. Por JAVI...ACERTIJO DESCIFRANDO CÓDIGO DEL CANDADO DE LA TORRE EIFFEL EN PARÍS. Por JAVI...
ACERTIJO DESCIFRANDO CÓDIGO DEL CANDADO DE LA TORRE EIFFEL EN PARÍS. Por JAVI...
JAVIER SOLIS NOYOLA
 

Último (20)

Los Dominios y Reinos de los Seres Vivos
Los Dominios y Reinos de los Seres VivosLos Dominios y Reinos de los Seres Vivos
Los Dominios y Reinos de los Seres Vivos
 
Eureka 2024 ideas y dudas para la feria de Ciencias
Eureka 2024 ideas y dudas para la feria de CienciasEureka 2024 ideas y dudas para la feria de Ciencias
Eureka 2024 ideas y dudas para la feria de Ciencias
 
MATERIAL ESCOLAR 2024-2025 3 AÑOS CEIP SAN CRISTÓBAL
MATERIAL ESCOLAR 2024-2025 3 AÑOS CEIP SAN CRISTÓBALMATERIAL ESCOLAR 2024-2025 3 AÑOS CEIP SAN CRISTÓBAL
MATERIAL ESCOLAR 2024-2025 3 AÑOS CEIP SAN CRISTÓBAL
 
DESARROLLO DE LAS RELACIONES CON LOS STAKEHOLDERS.pdf
DESARROLLO DE LAS RELACIONES CON LOS STAKEHOLDERS.pdfDESARROLLO DE LAS RELACIONES CON LOS STAKEHOLDERS.pdf
DESARROLLO DE LAS RELACIONES CON LOS STAKEHOLDERS.pdf
 
Hablemos de ESI para estudiantes Cuadernillo
Hablemos de ESI para estudiantes CuadernilloHablemos de ESI para estudiantes Cuadernillo
Hablemos de ESI para estudiantes Cuadernillo
 
Mundo ABC Examen 1 Grado- Tercer Trimestre.pdf
Mundo ABC Examen 1 Grado- Tercer Trimestre.pdfMundo ABC Examen 1 Grado- Tercer Trimestre.pdf
Mundo ABC Examen 1 Grado- Tercer Trimestre.pdf
 
Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...
Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...
Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...
 
Power Point: El conflicto inminente (Bosquejo)
Power Point: El conflicto inminente (Bosquejo)Power Point: El conflicto inminente (Bosquejo)
Power Point: El conflicto inminente (Bosquejo)
 
MATERIAL ESCOLAR 2024-2025. 4 AÑOS CEIP SAN CRISTOBAL
MATERIAL ESCOLAR 2024-2025. 4 AÑOS CEIP SAN CRISTOBALMATERIAL ESCOLAR 2024-2025. 4 AÑOS CEIP SAN CRISTOBAL
MATERIAL ESCOLAR 2024-2025. 4 AÑOS CEIP SAN CRISTOBAL
 
Presentación simple corporativa degradado en violeta blanco.pdf
Presentación simple corporativa degradado en violeta blanco.pdfPresentación simple corporativa degradado en violeta blanco.pdf
Presentación simple corporativa degradado en violeta blanco.pdf
 
APUNTES UNIDAD I ECONOMIA EMPRESARIAL .pdf
APUNTES UNIDAD I ECONOMIA EMPRESARIAL .pdfAPUNTES UNIDAD I ECONOMIA EMPRESARIAL .pdf
APUNTES UNIDAD I ECONOMIA EMPRESARIAL .pdf
 
Presentación de proyecto en acuarela moderna verde.pdf
Presentación de proyecto en acuarela moderna verde.pdfPresentación de proyecto en acuarela moderna verde.pdf
Presentación de proyecto en acuarela moderna verde.pdf
 
CORREOS SEGUNDO 2024 HONORIO DELGADO ESPINOZA
CORREOS SEGUNDO 2024 HONORIO DELGADO ESPINOZACORREOS SEGUNDO 2024 HONORIO DELGADO ESPINOZA
CORREOS SEGUNDO 2024 HONORIO DELGADO ESPINOZA
 
Cronica-de-una-Muerte-Anunciada - Gabriel Garcia Marquez.pdf
Cronica-de-una-Muerte-Anunciada - Gabriel Garcia Marquez.pdfCronica-de-una-Muerte-Anunciada - Gabriel Garcia Marquez.pdf
Cronica-de-una-Muerte-Anunciada - Gabriel Garcia Marquez.pdf
 
POESÍA POR EL DIA DEL PADREEEEEEEEEE.pdf
POESÍA POR EL DIA DEL PADREEEEEEEEEE.pdfPOESÍA POR EL DIA DEL PADREEEEEEEEEE.pdf
POESÍA POR EL DIA DEL PADREEEEEEEEEE.pdf
 
Liturgia día del Padre del siguiente domingo.pptx
Liturgia día del Padre del siguiente domingo.pptxLiturgia día del Padre del siguiente domingo.pptx
Liturgia día del Padre del siguiente domingo.pptx
 
FEEDBACK DE LA ESTRUCTURA CURRICULAR- 2024.pdf
FEEDBACK DE LA ESTRUCTURA CURRICULAR- 2024.pdfFEEDBACK DE LA ESTRUCTURA CURRICULAR- 2024.pdf
FEEDBACK DE LA ESTRUCTURA CURRICULAR- 2024.pdf
 
Mi Comunidad En El Sector Monterrey-Poste Blanco
Mi Comunidad En El Sector Monterrey-Poste BlancoMi Comunidad En El Sector Monterrey-Poste Blanco
Mi Comunidad En El Sector Monterrey-Poste Blanco
 
La vida de Martin Miguel de Güemes para niños de primaria
La vida de Martin Miguel de Güemes para niños de primariaLa vida de Martin Miguel de Güemes para niños de primaria
La vida de Martin Miguel de Güemes para niños de primaria
 
ACERTIJO DESCIFRANDO CÓDIGO DEL CANDADO DE LA TORRE EIFFEL EN PARÍS. Por JAVI...
ACERTIJO DESCIFRANDO CÓDIGO DEL CANDADO DE LA TORRE EIFFEL EN PARÍS. Por JAVI...ACERTIJO DESCIFRANDO CÓDIGO DEL CANDADO DE LA TORRE EIFFEL EN PARÍS. Por JAVI...
ACERTIJO DESCIFRANDO CÓDIGO DEL CANDADO DE LA TORRE EIFFEL EN PARÍS. Por JAVI...
 

Coordenadas baricéntricas. Elementos 2D triangulares

  • 1. Elementos 2D triangulares 1/78 Elementos 2D triangulares Rafael Ramírez Ros Clase MN-P02 & MN-P03 (versión 20/02/2024)
  • 2. Elementos 2D triangulares 2/78 Contenidos 1 Problemas de detección e interpolación Detección en un triángulo Detección en un mallado triangular Interpolación en un triángulo Interpolación en un mallado triangular 2 Repositorio oficial 3 Comandos específicos 4 Cuestiones 5 Respuestas
  • 3. Elementos 2D triangulares 3/78 Problemas de detección e interpolación Índice 1 Problemas de detección e interpolación Detección en un triángulo Detección en un mallado triangular Interpolación en un triángulo Interpolación en un mallado triangular 2 Repositorio oficial 3 Comandos específicos 4 Cuestiones 5 Respuestas
  • 4. Elementos 2D triangulares 4/78 Problemas de detección e interpolación Detección en un triángulo Índice 1 Problemas de detección e interpolación Detección en un triángulo Detección en un mallado triangular Interpolación en un triángulo Interpolación en un mallado triangular 2 Repositorio oficial 3 Comandos específicos 4 Cuestiones 5 Respuestas
  • 5. Elementos 2D triangulares 5/78 Problemas de detección e interpolación Detección en un triángulo Detección en un triángulo Sea Ωun triángulo de vértices (nodos) p1 = (x1, y1), p2 = (x2, y2), p3 = (x3, y3). Hipótesis: Los tres vértices no están alineados. Sea p = (x,y) ∈ R2. Pregunta: ¿p ∈ Ω? (Consideramos que los puntos de la frontera pertenecen al triángulo.) Advertencia: Si p está en la frontera, pequeños errores numéricos podrían hacernos pensar que p / ∈Ω.
  • 6. Elementos 2D triangulares 6/78 Problemas de detección e interpolación Detección en un triángulo Coordenadas baricéntricas (definición) ∃!α = (α1, α2, α3) ∈ R3 tal que f p = α p + α 1 1 2 2 3 3 p + α p , α1 + α2 + α3 = 1 Decimos que α son las coordenadas baricéntricas del punto p respecto el triángulo Ω. Respuesta: p ∈ Ωsi y solo si α ≥ 0. Importante: La ecuación α1 + α2 + α3 = 1 se añade para determinar unívocamente las coordenadas baricéntricas, pero eso solo funciona si los puntos no están alineados.
  • 7. Elementos 2D triangulares 7/78 Problemas de detección e interpolación Detección en un triángulo Coordenadas baricéntricas (propiedades) p es el baricentro de Ω⇔α = (1/3,1/3,1/3). Si los índices {i, j, k} se mueven cíclicamente en el conjunto {1,2,3}, entonces: p = pj ⇔αj = 1 & αi = αk = 0. p está en la mediana de Ωpor pj ⇔αi = αk . p está en la recta que pasa por pi y pk ⇔αj = 0. p está en el lado definido por pi y pk ⇔αj = 0 & αi ,αk ≥ 0. p es el centro de masas al situar tres masas α1, α2 y α3 tales que α1 + α2 + α3 = 1 en los vértices p1, p2 y p3. Si Ωj es el triángulo de vértices p, pi y pk , entonces: j p ∈ Ω⇒α = j Area[Ω ] Area[Ω] , j = 1,2,3.
  • 8. Elementos 2D triangulares 8/78 Problemas de detección e interpolación Detección en un triángulo Dos ejemplos
  • 9. Elementos 2D triangulares 9/78 Problemas de detección e interpolación Detección en un triángulo Relación con las funciones de forma Las funciones de forma del triángulo Ωson las tres únicas funciones ψj(x,y) = aj + βjx + γj y, j = 1,2,3, para algunos coeficientes aj,βj,γj ∈ R tales que ψj(pi ) = δij := f 1, si i = j 0, si i /=j . Se sabe que αj = ψj(p), i = 1,2,3.
  • 10. Elementos 2D triangulares 10 /78 Problemas de detección e interpolación Detección en un triángulo Cálculo matricial de los coeficientes Si consideramos las matrices 1 1 x1 y A = 1 x2 y2 , 1 x3 y3 1 3 γ1 γ2 a a2 a C = β1 β2 β3 , γ3 entonces a + β x + γ y 1 1 1 1 1 a2 + β2x1 + γ2y1 a + β x + γ y 3 3 1 3 1 AC = a1 + β1x2 + γ1y2 a2 + β2x2 + γ2y2 a1 + β1x3 + γ1y3 a2 + β2x3 + γ2y3 a3 + β3x2 + γ3y2 a3 + β3x3 + γ3y3 = 1 1 ψ (p ) ψ2(p1) 3 1 ψ (p ) ψ1(p3) ψ2(p3) ψ1(p2) ψ2(p2) ψ3(p2) ψ3(p3) 1 0 0 = 0 1 0 = Id. 0 0 1 Por tanto, C = A−1.
  • 11. Elementos 2D triangulares 11 /78 Problemas de detección e interpolación Detección en un triángulo Cálculo matricial de α Si consideramos la matriz 1 3 γ1 γ2 a a2 a C = β1 β2 β3 γ3 y el vector fila z = (1, x,y), entonces zC = a + β x + γ y,a + β x + γ 1 1 1 2 2 2 3 3 3 y,a + β x + γ y ) ( = ψ1(p), ψ2(p), ψ3(p) ) = ( α1, α2, α3 ) = α.
  • 12. Elementos 2D triangulares 12 /78 Problemas de detección e interpolación Detección en un mallado triangular Índice 1 Problemas de detección e interpolación Detección en un triángulo Detección en un mallado triangular Interpolación en un triángulo Interpolación en un mallado triangular 2 Repositorio oficial 3 Comandos específicos 4 Cuestiones 5 Respuestas
  • 13. Elementos 2D triangulares 13 /78 Problemas de detección e interpolación Detección en un mallado triangular Mallados triangulares Un mallado triangular está definido por Un conjunto de puntos del plano (llamados nodos): N = {pm = (xm,ym) : m = 1,...,M} ; Un conjunto de ternas de índices: T = {te = (ie,je,ke) : e = 1, ...,E} . El e-ésimo elemento de este mallado es el triángulo Ωe cuyos tres vértices son los nodos pie , pje y pke . Hipótesis: 1 Los vértices de cada triángulo están ordenados en sentido antihorario y no están alineados; 2 Triángulos diferentes o bien tienen intersección vacía o bien solo comparten algunos lados y/o vértices comunes.
  • 14. Elementos 2D triangulares 14 /78 Problemas de detección e interpolación Detección en un mallado triangular Ejemplo Mallado triángular con 5 nodos y 4 elementos
  • 15. Elementos 2D triangulares 15 /78 Problemas de detección e interpolación Detección en un mallado triangular Problema Sea Ωe el triángulo de vértices pie , pje y pke . Sea Ω = mallado. E e=1 Ωe la unión de todos los triángulos del Sea p ∈ Ω. Problema: Determinar el índice e tal que p ∈ Ωe. Advertencia: El índice e no es único cuando p es un nodo o está situado sobre un lado o vértice común de dos elementos adyacentes.
  • 16. Elementos 2D triangulares 16 /78 Problemas de detección e interpolación Interpolación en un triángulo Índice 1 Problemas de detección e interpolación Detección en un triángulo Detección en un mallado triangular Interpolación en un triángulo Interpolación en un mallado triangular 2 Repositorio oficial 3 Comandos específicos 4 Cuestiones 5 Respuestas
  • 17. Elementos 2D triangulares 17 /78 Problemas de detección e interpolación Interpolación en un triángulo Problema Sea Ωun triángulo de vértices (nodos) p1 = (x1, y1), p2 = (x2, y2), p3 = (x3, y3). Hipótesis: Los tres vértices no están alineados. Sean u1, u2, u3 ∈ R tres valores reales. ∃!u : Ω→ R lineal que interpola esos tres valores. O sea, existe una única función tal que 1 Es lineal: u(x,y) = a + bx + cy para algunos a,b, c ∈ R; e 2 Interpola: u(pj ) = uj, para j = 1, 2,3. Importante: Si α = (α1, α2, α3) son las coordenadas baricéntricas de un punto p ∈ Ωrespecto Ω, entonces u(p) = α1u1 + α2u2 + α3u3.
  • 18. Elementos 2D triangulares 18 /78 Problemas de detección e interpolación Interpolación en un mallado triangular Índice 1 Problemas de detección e interpolación Detección en un triángulo Detección en un mallado triangular Interpolación en un triángulo Interpolación en un mallado triangular 2 Repositorio oficial 3 Comandos específicos 4 Cuestiones 5 Respuestas
  • 19. Elementos 2D triangulares 19 /78 Problemas de detección e interpolación Interpolación en un mallado triangular Problema a resolver Tenemos un mallado triangular dado por: Un conjunto de nodos p1, ...,pM ; y Un conjunto de triángulos Ω1,...,ΩE. Tenemos un conjunto de valores u1, ...,uM ∈ R. Sea Ω = E e=1 Ωe la unión de los triángulos del mallado. ∃ v !u : Ω → R lineal a trozos que interpola a todos los alores. O sea, existe una única función tal que: 1 Es lineal en cada triángulo: u|Ωe (x,y) = ae + bex + cey para algunos coeficientes ae,be,ce ∈ R y para e = 1,...,E; 2 Interpola: u(pm) = um, para m = 1, ...,M. Importante: Si α = (α1, α2, α3) son las coordenadas baricéntricas de un punto p ∈ Ωe respecto Ωe, entonces u(p) = α1uie + α2uje + α3uke .
  • 20. Elementos 2D triangulares 20 /78 Problemas de detección e interpolación Interpolación en un mallado triangular Ejemplo
  • 21. Elementos 2D triangulares 21 /78 Repositorio oficial Índice 1 Problemas de detección e interpolación Detección en un triángulo Detección en un mallado triangular Interpolación en un triángulo Interpolación en un mallado triangular 2 Repositorio oficial 3 Comandos específicos 4 Cuestiones 5 Respuestas
  • 22. Elementos 2D triangulares 22 /78 Repositorio oficial Repositorio oficial Es un conjunto de funciones-M y mallados que usaremos a lo largo del curso para dibujar y realizar cálculos. Debéis saber cómo se usan las funciones, pero, salvo excepciones, no hace falta entender cómo están hechas. No se pueden modificar. Los dos repositorios están publicados en la esquina inferior izquierda de la página de Numerical Factory. Importante: Bajad los ficheros additionalFiles.zip y meshFilesAll.rar, desempaquetadlos y guardad todo el contenido en dos directorios que formen parte del path de Matlab.
  • 23. Elementos 2D triangulares 23 /78 Repositorio oficial Función baryCoord 1 function [alphas,isInside]=baryCoord(vertices,point) donde: vertices (array 3x2) = tres vértices de un triángulo; point (array 1x2) = coordenadas de un punto del plano; alphas (array 1x3) = coordenadas baricéntricas; isInside = f 1, si el punto está dentro del triángulo 0, si el punto está fuera del triángulo Nota: Con las notaciones de la primera sección: 1 2 vertices = [x1,y1; x2,y2; x3,y3]; point = [x,y]; Advertencia: No confundáis vectores fila con vectores columna.
  • 24. Elementos 2D triangulares 24 /78 Repositorio oficial Función plotElements 1 function plotElements(nodes, elem, numbering) donde: nodes (array nNodes x ndim) = coordenadas de cada nodo del mallado, escritas por filas; elem (array nElem x nVert) = índices de los vértices de cada elemento del mallado, escritos por filas; numbering = f 1, para numerar nodos y elementos 0, en caso contrario Nota: Hoy estudiamos un problema 2D: ndim=2 y trabajamos con elementos triangulares: nVert=3. Más adelante cambiaremos esos valores, pero usaremos la misma función.
  • 25. Elementos 2D triangulares 25 /78 Repositorio oficial Función plotContourSolution 1 function plotContourSolution(nodes,elem,u,titulo,paleta) donde: nodes (array nNodes x ndim) = coordenadas de cada nodo del mallado, escritas por filas; elem (array nElem x nVert) = índices de los vértices de cada elemento del mallado, escritos por filas; u (array nNodes x 1) = valores sobre los nodos; titulo (string) = texto del título; paleta (string) = paleta de colores usada. Nota: Matlab tiene casi 20 paletas de color. Algunos ejemplos son ’jet’, ’gray’, ’cool’, ’hot’, ’spring’, ’summer’, ’autumn’, ’winter’ y ’copper’.
  • 26. Elementos 2D triangulares 26 /78 Comandos específicos Índice 1 Problemas de detección e interpolación Detección en un triángulo Detección en un mallado triangular Interpolación en un triángulo Interpolación en un mallado triangular 2 Repositorio oficial 3 Comandos específicos 4 Cuestiones 5 Respuestas
  • 27. Elementos 2D triangulares 27 /78 Comandos específicos Invertir de una matriz Dada una matriz cuadrada A de orden n, hay dos formas de calcular en Matlab su inversa C = A−1. 1 Usar el comando inv. 1 C = inv(A); 2 Usar el comando eye y el símbolo . 1 C = Aeye(n); Nota: Es más eficiente usar la instrucción x = Ab que la instrucción x = inv(A)*b para resolver el sistema Ax = b.
  • 28. Elementos 2D triangulares 28 /78 Comandos específicos Seleccionar filas y/o columnas de una matriz Si A es una matriz (array), entonces: A(5,:) selecciona la fila 5 de la matriz; A([1,2,5],:) selecciona las filas 1, 2 y 5 de la matriz; A(3:5,:) selecciona desde la fila 3 hasta la fila 5; A(1:5,:) selecciona las 5 primeras filas; A(5:end,:) selecciona las filas a partir de la 5 (incluida); A(:,[2,5]) selecciona las columnas 2 y 5 de la matriz; A(1:5,3:end) selecciona las 5 primeras filas y las columnas a partir de la 3 (incluida); A(:,:) selecciona toda la matriz.
  • 29. Elementos 2D triangulares 29 /78 Comandos específicos Dibujar un polígono Sean pi = (xi,yi) para i = 1,...,m los vértices de un polígono Ω⊂ R2 ordenados en sentido antihorario. Sea vertices un array m x 2, cuya fila i contiene las coordenadas xi e yi. Las siguientes instrucciones dibujan el polígono: 1 2 vplot = [vertices;vertices(1,:)]; plot(vplot(:,1),vplot(:,2),’k-’) Explicación: La primera línea añade el primer vértice como última fila del array vplot para que el polígono quede cerrado.
  • 30. Elementos 2D triangulares 30 /78 Comandos específicos Cargar y cuantificar un mallado El comando eval carga ficheros de datos. Por ejemplo, 1 eval(’meshHole’); carga las matrices nodes (de tamaño 136x2) y elem (de tamaño 220x3) que definen el mallado 2D triangular del fichero meshHole.m. Nota: No se escribe la extensión del fichero en el comando eval. También trabajaremos con mallados cuadrangulares, 1D o 3D, pero todos se cargan con el comando eval. Una vez cargado un mallado, las instrucciones 1 2 >> nNodes = size(nodes,1); >> nElem = size(elem,1); calculan su número de nodos y elementos
  • 31. Elementos 2D triangulares 31 /78 Comandos específicos Seleccionar los nodos de un elemento Sea nodes un array nNodes x ndim con las coordenadas de cada nodo del mallado, escritas por filas. Sea elem un array nElem x nVert con los índices de los vértices de cada elemento del mallado, escritos por filas. En esta clase, trabajamos con mallados 2D triangulares. Es decir, ndim=2 y nVert=3. Muy importante: La instrucción 1 nodes(elem(e,:),:) selecciona el array nVert x ndim con las coordenadas de cada nodo del elemento e del mallado, escritas por filas.
  • 32. Elementos 2D triangulares 32 /78 Comandos específicos Interpolar en un mallado triangular Sea u un array nNodes x 1 con los valores de una cantidad en cada nodo del mallado triangular. Sea elem un array nElem x 3 con los índices de los vértices de cada elemento del mallado, escritos por filas. Sean α = (α1, α2, α3) las coordenadas baricéntricas de un punto p ∈ Ωe respecto Ωe. La instrucción 1 uP = dot(alphas,u(elem(e,:))); calcula el valor interpolado u(p) = α1uie + α2uje + α3uke . Nota: El comando dot calcula el producto escalar de dos vectores con el mismo número de componentes. Se pueden multiplicar vectores fila por vectores columna.
  • 33. Elementos 2D triangulares 33 /78 Comandos específicos Añadir un directorio al “path” En su estado inicial, cuando se le dice a Matlab que ejecute un script o función escrita por el usuario, solo la busca en el directorio que aparece en la esquina superior izquierda de la ventana de comandos. Es decir, inicialmente el “path” (camino de búsqueda) solo contiene a ese directorio, que el usuario puede escoger. El comando addpath añade directorios al “path”: 1 2 >> addpath ../additionalFiles >> addpath ../meshFilesAll Nota: El símbolo .. es el directorio padre del actual, luego ../meshFilesAll es un directorio hermano del actual.
  • 34. Elementos 2D triangulares 34 /78 Comandos específicos Mi estructura de directorios Todas los subdirectorios cuelgan del mismo directorio raíz; Funciones repositorio ' V ' - subdirectorio additionalFiles; Mallados repositorio ' V ' - subdirectorio meshFilesAll; y Ficheros propios para la práctica t.p ' V ' - subdirectorio t-p, donde t = 1,2,3,4 y p = 1,...,13.
  • 35. Elementos 2D triangulares 35 /78 Comandos específicos Script para las figuras 1 %FILE: p12_myFigureSettings.m 2 %DESCRIPTION: Settings to get nice figures practice 1.2. 3 % reset(groot) -> reset to original settings. 4 set(groot,’DefaultLineLineWidth’,3.5) 5 set(groot,’DefaultAxesLineWidth’,1) 6 set(groot,’DefaultLineMarkerSize’,20) 7 set(groot,’DefaultLineMarkerEdgeColor’,’k’) 8 set(groot,’DefaultAxesFontSize’,20) 9 set(groot,’DefaultAxesFontWeight’,’bold’) 10 set(groot,’DefaultTextFontSize’,20) 11 set(groot,’DefaultAxesFontName’,’Times new Roman’) 12 set(groot,’DefaultLegendFontName’,’Times new Roman’) 13 set(groot,’defaultAxesXGrid’,’on’) 14 set(groot,’defaultAxesYGrid’,’on’)
  • 36. Elementos 2D triangulares 36 /78 Cuestiones Índice 1 Problemas de detección e interpolación Detección en un triángulo Detección en un mallado triangular Interpolación en un triángulo Interpolación en un mallado triangular 2 Repositorio oficial 3 Comandos específicos 4 Cuestiones 5 Respuestas
  • 37. Elementos 2D triangulares 37 /78 Cuestiones 1 Construye tu propia versión de la función baryCoord. Compara tu versión con la que hay en el repositorio oficial, la cual pone el enfasis en las funciones de forma. 2 Considera el triángulo Ωde vértices p1 = (1, 1), p2 = (3, 2), p3 = (2, 4). a) Calcula las coordinadas baricéntricas del punto p = (2, 2). b) Calcula el punto q cuyas coordenadas baricéntricas son β = (1/6,1/3,1/2). c) ¿Por qué no hay ningún punto de coordenadas baricéntricas γ = (1/3,1/2,1/3)? d) Calcula la función de forma ψ2(x,y).
  • 38. Elementos 2D triangulares 38 /78 Cuestiones 3 Supongamos que escribimos las siguientes instrucciones en un script o en la ventana de comandos: 1 2 3 >> nodes = [1,1; 3,2; 2,4]; >> point = [2,2]; >> [betas,isInside] = baryCoord(nodes,point) ¿Hay algún error en esas instrucciones? 4 Supongamos que escribimos las siguientes instrucciones en un script o en la ventana de comandos para calcular la segunda función de forma ψ2(x,y): 1 2 3 4 >> vertices = [1,1; 3,2; 2,4]; >> point = [0,0]; >> [alphas,isInside]=baryCoord(vertices,point) >> A[0;1;0] ¿Hay algún error en esas instrucciones?
  • 39. Elementos 2D triangulares 39 /78 Cuestiones 5 Consideramos el triángulo de la cuestión 2 y los puntos q1 = (1.5,3), q2 = (3.5,1), q3 = (2, 3), q4 = (2.5,3). a) ¿Cuáles están fuera del triángulo? ¿Cuáles están dentro? ¿Cuáles están situados sobre un lado? ¿Sobre qué lado? b) Dibuja el triángulo Ω en negro, los puntos exteriores de rojo, los puntos completamente interiores de azul y los puntos en la frontera en verde.
  • 40. Elementos 2D triangulares 40 /78 Cuestiones 6 [Díficil] Considera la función dada por el código 1 2 3 4 5 6 7 8 9 10 11 12 13 14 function [alphas,isInside] = baryCoordWrong(vertices,point) %Computation of the barycentric coordinates A = [ones(3,1),vertices]; C = Aeye(3); %Inverse of A alphas = (C*[1; point’])’; %Check if the point is inside the triangle isInside=1; if (min(alphas) < -1.e-14) isInside=0; end end a) Esta implementación contiene un error. ¿Cuál es? b) Sin embargo, calcula correctamente todas las coordenadas baricéntricas en el triángulo de la cuestión 2. ¿Por qué?
  • 41. Elementos 2D triangulares 41 /78 Cuestiones 7 Crea una función 1 function [alphas,isInside]=baryRGBColor(vertices,point) con los mismos argumentos que la función baryCoord que dibuje el triángulo de negro, el vértice 1 de rojo, el 2 de verde, el 3 de azul y el punto de negro si está fuera y con el color alphas en los canales RGB si está dentro. Opcional: Mira la función baryRGBColorMouse donde el punto se entra con el ratón. 8 Considera el triángulo de referencia ΩR de vértices r1 = (0, 0), r2 = (1, 0), r3 = (0, 1). a) Calcula a mano las tres funciones de forma ψj(x,y). b) Calcula a mano las coordenadas baricéntricas del punto genérico r = (x,y). c) Comprueba los resultados con la función baryCoord.
  • 42. Elementos 2D triangulares 42 /78 Cuestiones 9 Sea Ωun triángulo arbitrario y sea ΩR el triángulo de referencia ΩR de la cuestión 8. Sea p un punto del plano. Crea una función 1 function pointR = triangle2Reference(vertices,point) donde: vertices (array 3x2) = los tres vértices de Ω, escritos por filas; point (array 1x2) = coordenadas de p; pointR (array 1x2) = coordenadas del punto r cuyas coordenadas baricéntricas respecto ΩR coinciden con las coordenadas baricéntricas respecto Ωde p. Añade unas instrucciones a la función para dibujar ambos triángulos y ambos puntos. Opcional: Mira la función triangle2ReferenceMouse donde el punto se entra con el ratón.
  • 43. Elementos 2D triangulares 43 /78 Cuestiones 10 a) Dibuja a mano el mallado triangular dado por: %Primer nodo: n1 %Segundo nodo: n2 1 nodes = [0, 0; 2 1, 0; 3 1, 1; 4 0, 1; 5 0.5, 0.5]; %Quinto nodo: %Tercer nodo: n3 %Cuarto nodo: n4 n5 6 elem = [1, 2, 5; %Primer elemento: e1 7 2, 3, 5; %Segundo elemento: e2 8 3, 4, 5; %Tercer elemento: e3 9 4, 1, 5]; %Cuarto elemento: e4 Después, dibújalo con la función plotElements. b) Detecta en qué elemento (en este caso, triángulo) del mallado está contenido el punto p = (0.8, 0.7). c) Escribe un script automatizado whatTriangle.m que recorra en un bucle todos los elementos del mallado hasta detectar en qué elemento está p.
  • 44. Elementos 2D triangulares 44 /78 Cuestiones 11 Carga el mallado triangular meshHole.m. a) ¿Cuántos nodos tiene? b) ¿Cuántos elementos (triángulos) tiene? c) ¿Qué elemento contiene al punto p = (0.83, 0.7)? d) ¿Cuáles son los tres vértices de ese elemento? e) Dibuja el mallado con la función plotElements y el punto. 12 Considera el mallado triangular de 8 nodos y 6 elementos: a) Escribe unas matrices nodes y elem que lo codifiquen. b) ¿Son únicas? En caso negativo, explica sus variaciones. c) Comprueba el resultado con la función plotElements.
  • 45. Elementos 2D triangulares 45 /78 Cuestiones 13 Haz lo mismo que en la cuestión 12, pero con el mallado triangular: Una costumbre útil: Es más fácil ver dónde está cada punto si activamos el “grid” con la instrucción grid on.
  • 46. Elementos 2D triangulares 46 /78 Cuestiones 14 Dibuja con la función plotElements el mallado triangular que corresponde a los datos: 1 2 3 4 5 nodes = [0, 0; %Primer nodo: n1 1, 0; %Segundo nodo: n2 1, 1; %Tercer nodo: n3 0, 1; %Cuarto nodo: n4 0.5, 0.5]; %Quinto nodo: n5 6 elem = [5, 1, 2; %Primer elemento: e1 7 5, 2, 3; %Segundo elemento: e2 8 5, 3, 4; %Tercer elemento: e3 9 5, 1, 4]; %Cuarto elemento: e4 Obtenemos exactamente el mismo dibujo que el mallado de la cuestión 10. Sin embargo, este nuevo mallado no es “correcto”. ¿Por qué? ¿Qué elemento “falla”?
  • 47. Elementos 2D triangulares 47 /78 Cuestiones 15 [Díficil] Carga el mallado triangular meshHole.m. a) Determina los triángulos de áreas mínima y máxima. b) Determina los triángulos de perímetros mínimo y máximo. c) Calcula el área promedio y el perímetro promedio. 16 Carga el mallado triangular meshHole.m. a) Calcula el valor interpolado en el punto p = (0.83, 0.7) de la cantidad 1 u = (1:size(nodes,1))’; que asigna a cada nodo el valor que corresponde a su índice. Es decir, los primeros/últimos nodos tienen valores (“temperaturas”) fríos/calientes. Nota: Hoy no es obligatorio que u sea un vector columna, luego podríamos escribir u = 1:size(nodes,1). b) “Colorea” el mallado usando la función del repositorio plotContourSolution con la paleta de colores ’jet’.
  • 48. Elementos 2D triangulares 48 /78 Cuestiones 17 Carga el mallado triangular meshHole.m. a) Construye un vector columna u con los valores que toma en cada uno de sus nodos la función g(x, y) = x2 + y2. Es decir, los nodos que están cerca/lejos del origen tienen valores (“temperaturas”) fríos/calientes. b) Calcula el valor interpolado u(p) en el punto p = (0.5, 0.75). Calcula el error cometido en la aproximación g(p) ≈ u(p). Es decir, calcula error(p) = |g(p) − u(p)|. c) q = (0.2, 0)? d) “Colorea” el mallado usando la función del repositorio plotContourSolution con la paleta de colores ’jet’.
  • 49. Elementos 2D triangulares 49 /78 Cuestiones 18 Sea interpolTriangMesh el script usado para resolver las cuestiones 16–17 y supongamos que hemos cargado el mallado meshHole.m. a) ¿Resuelven correctamente la cuestión 16 las siguientes instrucciones? Justifica la respuesta. 1 2 3 >> f = (1:size(nodes,1))’; >> p = [0.83,0.7]; >> interpolTriangMesh b) Ejecutamos las siguientes instrucciones en la ventana de comandos para resolver la cuestión 16 1 2 3 >> u = (1:size(nodes,1))’; >> point = [0.83,0.7]; >> interpolTriangMesh y después escribimos nElem para ver cuántos elementos tiene el mallado. ¿Es correcto ese proceso? c) Compara estas cuestiones con las cuestiones 3–4.
  • 50. Elementos 2D triangulares 50 /78 Respuestas Índice 1 Problemas de detección e interpolación Detección en un triángulo Detección en un mallado triangular Interpolación en un triángulo Interpolación en un mallado triangular 2 Repositorio oficial 3 Comandos específicos 4 Cuestiones 5 Respuestas
  • 51. Elementos 2D triangulares 51 /78 Respuestas 1 Advertencia: La siguiente función no coincide con la oficial. 1 function [alphas, isInside] = baryCoord(vertices, point) 2 %FILE: baryCoord.m 3 %DESCRIPTION: 4 %Compute the barycentric coordinates of a point with respect to a triangle 5 %INPUT: 6 % vertices (array 3x2) = Coordinates of the vertices of the triangle 7 % vertices=[x1,y1;x2,y2;x3,y3] 8 % point (array 1x2) = Coordinates of the point. 9 %OUTPUT: 10 % alphas (array 1x3) = Barycentric coordinates of the point 11 % isInside (integer) = if isInside=1, then the point belongs to the triangle, 12 % if isInside=0, the point lies outside. 13 %EXAMPLE OF USE: [alphas, isInside]=baryCoord([1,1;3,2;2,4], [2,2]) 14 15 % Part 1: Compute the barycentric coordinates 16 A = [ones(3,1),vertices]; 17 C = Aeye(3); %Inverse of A 18 alphas = [1,point]*C; 19 20 % Part 2: Check if the point is inside the triangle 21 isInside=1; 22 if (min(alphas) < -1.e-14) %We consider a small tolerance for safety 23 isInside=0; 24 end 25 26 end
  • 52. Elementos 2D triangulares 52 /78 Respuestas 2 a) Ventana de comandos: 1 2 3 4 5 6 7 >> vertices = [1,1; 3,2; 2,4]; >> point = [2,2]; >> [alphas,isInside] = baryCoord(vertices,point) alphas = 4.0000e-01 4.0000e-01 2.0000e-01 isInside = 1 b) q = β1p1 + β2p2 + β3p3 = (13/6, 17/6). Ventana de comandos: 1 2 3 4 >> betas = [1/6,1/3,1/2]; >> q = betas*vertices %Since betas is 1x3 and vertices is 3x2 q = 2.1667e+00 2.8333e+00 c) Porque γ1 + γ2 + γ3 /= 1. d) ψ2(x,y) = (−2 + 3x − y)/5. Ventana de comandos: 1 >> vertices = [1,1; 3,2; 2,4]; 2 >> A = [ones(3,1), vertices]; 3 >> A[0;1;0] 4 ans 5 -4.0000e-01 6 6.0000e-01 7 -2.0000e-01
  • 53. Elementos 2D triangulares 53 /78 Respuestas 3 Las instrucciones son correctas. Aunque la cabecera de la función sea 1 function [alphas,isInside]=baryCoord(vertices,point) es correcto invocarla cambiando el nombre de los argumentos de entrada y/o salida, pues solo importa que los argumentos tengan el tipo correcto (arrays del tamaño adecuado, strings, cells, estructuras, etcétera). 4 Las instrucciones son incorrectas. Las variables usadas dentro de una función (salvo sin son argumentos de salida) son locales. Es decir, solo son conocidas dentro de la función. Por tanto, cuando llegamos a la línea 4 del script, la matriz A es desconocida.
  • 54. Elementos 2D triangulares 54 /78 Respuestas 5 a) q1 y q2 están fuera, q3 dentro y q4 sobre el lado definido por p2 y p3. Ventana de comandos: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 >> vertices = [1,1; 3,2; 2,4]; >> q1 = [1.5,3]; >> [alphas,isInside]=baryCoord(vertices,q1) alphas = 4.0000e-01 -1.0000e-01 7.0000e-01 isInside = 0 >> q2 = [3.5,1]; >> [alphas,isInside]=baryCoord(vertices,q2) alphas = -5.5511e-17 1.5000e+00 -5.0000e-01 isInside = 0 >> q3 = [2,3]; >> [alphas,isInside]=baryCoord(vertices,q3) alphas = 2.0000e-01 2.0000e-01 6.0000e-01 isInside = 1 >> q4 = [2.5,3]; >> [alphas,isInside]=baryCoord(vertices,q4) alphas = 0 5.0000e-01 5.0000e-01 isInside = 1
  • 55. Elementos 2D triangulares 55 /78 Respuestas 5 b) Script: 1 %FILE: p12_Question5b.m 2 %DESCRIPTION: Answer to Question 5b (see slides on Triangular Elements) 3 4 vertices = [1,1; 3,2; 2,4]; %Triangle vertices 5 q = [1.5,3; 3.5,1; 2,3; 2.5,3]; %The four points to study 6 7 %We add the first vertex at the end to plot a closed triangle, 8 vplot=[vertices;vertices(1,:)]; 9 plot(vplot(:,1),vplot(:,2),’k-’); 10 hold on 11 12 %We use the baryCoord function to study each point q(i,:) 13 [n,m] = size(q); 14 for i=1:n 15 [alphas,isInside]=baryCoord(vertices,q(i,:)); 16 if isInside==0 17 plot(q(i,1),q(i,2),’ko’,’MarkerFaceColor’,’r’) 18 elseif min(alphas)>1.e-14 %We consider a small tolerance for safety 19 plot(q(i,1),q(i,2),’ko’,’MarkerFaceColor’,’b’) 20 else 21 plot(q(i,1),q(i,2),’ko’,’MarkerFaceColor’,’g’) 22 end 23 end 24 hold off
  • 56. Elementos 2D triangulares 56 /78 Respuestas q1 = (1.5, 3) está fuera; q2 = (3.5, 1) está fuera y sobre la prolongación de un lado; q3 = (2, 3) está dentro; q4 = (2.5, 3) está dentro y sobre un lado. Nota: Para obtener este bonito dibujo, es necesario ejecutar antes el script p12_myFigureSettings con los buenos settings para figuras.
  • 57. Elementos 2D triangulares 57 /78 Respuestas 6 a) La fórmula correcta es α = zC, no α = (Cz,),. b) Porque el triángulo de la cuestión 2 hace que la matriz 1 x1 y1 1 1 1 A = 1 x2 y2 = 1 3 2 1 x3 y3 1 2 4 sea simétrica, luego C = A−1 también lo es y, por tanto, (Cz,), = zC, = zC.
  • 58. Elementos 2D triangulares 58 /78 Respuestas alphas = [1,point]*C; 7 Función: 1 function [alphas, isInside]=baryRGBColor(vertices, point) 2 %FILE: baryRGBColor.m 3 %DESCRIPTION: RGB-color representation of the barycentric coordinates 4 %Part 1: Compute the barycentric coordinates 5 A = [ones(3,1),vertices]; 6 C = Aeye(3); %Inverse of A 7 8 %Part 2: Check if the point is inside the triangle 9 isInside=1; 10 if (min(alphas) < -1.e-14) %We consider a small tolerance for safety 11 isInside=0; 12 end 13 %Part 3: Plotting 14 vplot=[vertices;vertices(1,:)]; 15 plot(vplot(:,1),vplot(:,2),’k-’) 16 hold on 17 plot(vertices(1,1),vertices(1,2),’ko’,’MarkerFaceColor’,’r’) 18 plot(vertices(2,1),vertices(2,2),’ko’,’MarkerFaceColor’,’g’) 19 plot(vertices(3,1),vertices(3,2),’ko’,’MarkerFaceColor’,’b’) 20 if isInside 21 plot(point(1),point(2),’ko’,’MarkerFaceColor’,abs(alphas)) 22 else 23 plot(point(1),point(2),’ko’,’MarkerFaceColor’,’k’) 24 end 25 title([’[R,G,B] = [’,num2str(alphas(1),’%.2f’),’,’,... 26 num2str(alphas(2),’%.2f’),’,’,num2str(alphas(3),’%.2f’),’]’]) 27 hold off 28 end
  • 59. Elementos 2D triangulares 59 /78 Respuestas p1 = (1, 1) p2 = (3, 2) p3 = (2, 4) p = (2, 2) Nota: Para obtener este bonito dibujo, es necesario ejecutar antes el script p12_myFigureSettings con los buenos settings para figuras.
  • 60. Elementos 2D triangulares 60 /78 Respuestas %Left-button -> boton = 1 %First time we do not delete the previous picture [x,y,boton]=ginput(1); alphas = [1,x,y]*C; if (borrar) delete(h2); delete(h3); end if (min(alphas) < -1.e-14) h2=plot(x,y,’ko’,’MarkerFaceColor’,’k’); else h2=plot(x,y,’ko’,’MarkerFaceColor’,abs(alphas)); end h3=title([’[R,G,B] = [’,num2str(alphas(1),’%.2f’),’,’,... num2str(alphas(2),’%.2f’),’,’,num2str(alphas(3),’%.2f’),’]’]); borrar=1; %After the first time, we do delete the previous picture 1 function baryRGBColorMouse(vertices) 2 %FILE: baryRGBColorMouse.m 3 %DESCRIPTION: RGB-color representation of barycentric coordinates + mouse 4 A = [ones(3,1),vertices]; 5 C = Aeye(3); %Inverse of A 6 %Draw the triangle and its vertices 7 vplot=[vertices;vertices(1,:)]; 8 plot(vplot(:,1),vplot(:,2),’k-’) 9 hold on 10 plot(vertices(1,1),vertices(1,2),’ko’,’MarkerFaceColor’,’r’) 11 plot(vertices(2,1),vertices(2,2),’ko’,’MarkerFaceColor’,’g’) 12 plot(vertices(3,1),vertices(3,2),’ko’,’MarkerFaceColor’,’b’) 13 %Wait for mouse input, delete old point & title, redraw new point & title 14 boton=1; 15 borrar=0; 16 while(boton==1) 17 18 19 20 21 22 23 24 25 26 27 28 29 30 end
  • 61. Elementos 2D triangulares 61 /78 Respuestas 8 a) Las tres funciones de forma son ψ1(x,y) = 1 − x − y, ψ2(x,y) = x, ψ3(x,y) = y. b) Las coordenadas baricéntricas del punto r = (x,y) son α = (α1, α2, α3) = (1 − x − y,x,y). b) Comprobación en la ventana de comandos: 0 5.0000e-01 5.0000e-01 4.0000e-01 1 >> verticesR = [0,0; 1,0; 0,1]; 2 >> pointR = [0.5,0.5]; 3 >> [alphasR,isInsideR]=baryCoord(verticesR,pointR) 4 alphasR = 5 6 inInsideR = 7 1 8 >> pointR = [-0.5,0.4]; 9 >> [alphasR,isInsideR]=baryCoord(verticesR,pointR) 10 alphasR = 11 1.1000e+00 -5.0000e-01 12 isInsideR = 13 0
  • 62. Elementos 2D triangulares 62 /78 Respuestas %Inverse of A alphas = [1,point]*C; 9 Función: 1 function pointR = triangle2Reference(vertices, point) 2 %FILE: triangle2Reference.m 3 %DESCRIPTION: Answer to Question 9 (see slides on Triangular Elements) 4 5 %Compute pointR 6 A = [ones(3,1),vertices]; 7 C = Aeye(3); 8 9 pointR = [alphas(2),alphas(3)]; 10 11 %Draw figure 12 vplot = [vertices;vertices(1,:)]; 13 plot(vplot(:,1),vplot(:,2),’k-’) 14 hold on 15 axis equal 16 verticesR = [0,0;1,0;0,1]; %Reference triangle 17 vplotR=[verticesR;verticesR(1,:)]; 18 plot(vplotR(:,1),vplotR(:,2),’k-’) 19 plot(point(1),point(2),’ko’,’MarkerFaceColor’,’red’,’lineWidth’,2) 20 plot(pointR(1),pointR(2),’ko’,’MarkerFaceColor’,’blue’,’lineWidth’,2) 21 linePlot = [point; pointR]; 22 plot(linePlot(:,1),linePlot(:,2),’g-’) 23 hold off 24 25 end
  • 63. Elementos 2D triangulares 63 /78 Respuestas
  • 64. Elementos 2D triangulares 64 /78 Respuestas 10 a) Ventana de comandos: 1 >> nodes = [0, 0; 2 1, 0; 3 1, 1; 4 0, 1; 5 0.5, 0.5]; 6 >> elem = [1, 2, 5; 7 2, 3, 5; 8 3, 4, 5; 9 4, 1, 5]; 10 >> plotElements(nodes,elem,1); Advertencia: La función plotElements debe estar o bien en el directorio actual o bien en el “path” de Matlab.
  • 65. Elementos 2D triangulares 65 /78 Respuestas 10 b) Primera versión (no automatizable): 1 >> point = [0.8,0.7]; 2 >> [alphas1,isInside1]=baryCoord(nodes([1,2,5],:),point) 3 alphas1 = 4 -5.0000e-01 1.0000e-01 1.4000e+00 5 isInside1 = 6 0 7 >> [alphas2,isInside2]=baryCoord(nodes([2,3,5],:),point) 8 alphas2 = 9 1.0000e-01 5.0000e-01 4.0000e-01 10 isInside2 = 11 1 12 >> [alphas3,isInside3]=baryCoord(nodes([3,4,5],:),point) 13 alphas3 = 14 5.0000e-01 -1.0000e-01 6.0000e-01 15 isInside3 = 16 0 17 >> [alphas4,isInside4]=baryCoord(nodes([4,1,5],:),point) 18 alphas4 = 19 -1.0000e-01 -5.0000e-01 1.6000e+00 20 isInside4 = 21 0 Conclusión: p = (0.8, 0.7) está en el segundo elemento.
  • 66. Elementos 2D triangulares 66 /78 Respuestas 10 b) Segunda versión (automatizable): 1 >> point = [0.8,0.7]; 2 >> [alphas1,isInside1]=baryCoord(nodes(elem(1,:),:),point) 3 alphas1 = 4 -5.0000e-01 1.0000e-01 1.4000e+00 5 isInside1 = 6 0 7 >> [alphas2,isInside2]=baryCoord(nodes(elem(2,:),:),point) 8 alphas2 = 9 1.0000e-01 5.0000e-01 4.0000e-01 10 isInside2 = 11 1 12 >> [alphas3,isInside3]=baryCoord(nodes(elem(3,:),:),point) 13 alphas3 = 14 5.0000e-01 -1.0000e-01 6.0000e-01 15 isInside3 = 16 0 17 >> [alphas4,isInside4]=baryCoord(nodes(elem(4,:),:),point) 18 alphas4 = 19 -1.0000e-01 -5.0000e-01 1.6000e+00 20 isInside4 = 21 0 Conclusión: p = (0.8, 0.7) está en el segundo elemento.
  • 67. Elementos 2D triangulares 67 /78 Respuestas 10 c) Script (automatizado): 1 %FILE: whatTriangle.m 2 %DESCRIPTION: Answer Questions 10c & 11 (slides on Triangular Elements) 3 nElem = size(elem,1); 4 for e=1:nElem %We run over all elements 5 [alphas,isInside]=baryCoord(nodes(elem(e,:),:),point); 6 if isInside 7 fprintf(’The point is in triangle %dn’,e); 8 9 10 break %We exit the FOR loop end end Ventana de comandos: 1 2 3 4 5 6 7 8 >> nodes = [0, 0; 1, 0; 1, 1; 0, 1; 0.5, 0.5]; >> elem = [1, 2, 5; 2, 3, 5; 3, 4, 5; 4, 1, 5]; >> point = [0.8,0.7]; >> whatTriangle The point is in triangle 2
  • 68. Elementos 2D triangulares 68 /78 Respuestas 11 a) 136 nodos (línea 5). b) 220 elementos (línea 8). c) p ∈ Ω189 (línea 11). d) Líneas 14–16. e) Ventana de comandos: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 >> addpath ../meshFilesAll >> eval(’meshHole’) >> nNodes = size(nodes,1) ans = 136 >> nElem = size(elem,1) ans = 220 >> point = [0.83,0.7]; >> whatTriangle The point is in triangle 189 >> nodes(elem(189,:),:) ans = 8.7447e-01 6.2188e-01 8.7850e-01 7.5802e-01 7.3942e-01 7.4997e-01 >> plotElements(nodes,elem,0) >> hold on >> plot(point(1),point(2),’o’,... ’MarkerFaceColor’,’r’,... ’MarkerSize’,10,’LineWidth’,2) >> hold off
  • 69. Elementos 2D triangulares 69 /78 Respuestas 12 a) Script: 1 nodes=[-2,0; 2 -1,0; 3 0,0; 4 1,0; 5 2,0; 6 -1,1; 7 0,1; 8 1,1]; 9 elem = [1, 2, 6; 10 2, 3, 6; 11 3, 7, 6; 12 3, 8, 7; 13 3, 4, 8; 14 4, 5, 8]; b) No son únicas. Podemos cambiar el orden de los nodos (o sea, permutar filas de nodes y entonces modificar elem para no cambiar el mallado), cambiar el orden de los elementos (o sea, permutar filas de elem) o el orden de los nodos dentro de algunos elementos (o sea, realizar permutaciones cíclicas dentro de algunas filas de nodes). c) Basta escribir plotElements(nodes,elem,1).
  • 70. Elementos 2D triangulares 70 /78 Respuestas 13 a) Script: 1 nodes=[-2,0; 2 -1,0; 3 0,0; 4 1,0; 5 2,0; 6 -1,1; 7 0,1; 8 1,1]; 9 elem = [1, 2, 6; 10 2, 7, 6; 11 2, 3, 7; 12 3, 4, 7; 13 4, 8, 7; 14 4, 5, 8]; b) No son únicas. Podemos cambiar el orden de los nodos (o sea, permutar filas de nodes y entonces modificar elem para no cambiar el mallado), cambiar el orden de los elementos (o sea, permutar filas de elem) o el orden de los nodos dentro de algunos elementos (o sea, realizar permutaciones cíclicas dentro de algunas filas de nodes). c) Basta escribir plotElements(nodes,elem,1).
  • 71. Elementos 2D triangulares 71 /78 Respuestas 14 Los nodos del cuarto elemento no están ordenados en sentido antihorario. Eso es peligroso, pues algunas funciones del repositorio oficial pueden dar resultados incorrectos en mallados con algún elemento mal ordenado. De hecho, ordenar mal los nodos de un elemento también puede tener malas consecuencias en cálculos manuales. 15 Ejecutando en la ventana de comandos el script de la siguiente página obtenemos que: 1 2 3 4 5 6 7 8 9 >> addpath ../meshFilesAll/ >> eval(’meshHole’) >> areasPerimetersTriangles Triangle 7 has maximum area Triangle 52 has minimum area Triangle 7 has maximum perimeter Triangle 44 has minimum perimeter The mean area is 0.007967 The mean perimeter is 0.415972
  • 72. Elementos 2D triangulares 72 /78 Respuestas Script: p1 = nodes(elem(e,1),:); p2 = nodes(elem(e,2),:); p3 = nodes(elem(e,3),:); %First vertex %Second vertex %Third vertex perim(e) = norm(p2-p1) + norm(p3-p2) + norm(p3-p1); %Perimeter areas(e) = det([p2-p1;p3-p1])/2; %Area 1 %FILE: areasPerimetersTriangles.m 2 %DESCRIPTION: Answer to Question 15 (see slides on Triangular Elements) 3 nElem = size(elem,1); %Number of elements in the mesh 4 areas = zeros(1,nElem); %We create a vector to storage all areas 5 perim = zeros(1,nElem); %We create a vector to storage all perimeters 6 for e=1:nElem %We run over all elements 7 8 9 10 11 12 end 13 [maxArea,eMaxArea] = max(areas); %The second output is the desired index 14 [minArea,eMinArea] = min(areas); %The second output is the desired index 15 [maxPerim,eMaxPerim] = max(perim); %The second output is the desired index 16 [minPerim,eMinPerim] = min(perim); %The second output is the desired index 17 fprintf(’Triangle %d has maximum arean’,eMaxArea); 18 fprintf(’Triangle %d has minimum arean’,eMinArea); 19 fprintf(’Triangle %d has maximum perimetern’,eMaxPerim); 20 fprintf(’Triangle %d has minimum perimetern’,eMinPerim); 21 fprintf(’The mean area is %6.4fn’,mean(areas)); 22 fprintf(’The mean perimeter is %6.4fn’,mean(perim)); Reto: Escribir una versión de este script que use los comandos polyshape, perimeter y polyarea de Matlab. Os podéis inspirar en el script areasPerimetersQuad de la siguiente sección.
  • 73. Elementos 2D triangulares 73 /78 Respuestas 16 Ejecutando en la ventana de comandos el script de la siguiente página obtenemos que: 1 >> addpath ../meshFilesAll/ 2 >> eval(’meshHole’); 3 >> u = (1:size(nodes,1))’; 4 >> point = [0.83,0.7]; 5 >> interpolTriangMesh 6 The point is in triangle 189; 7 whose nodes have indexes 109, 112, and 92. 8 The interpolated value is uP = 104.0420 Finalmente, obtenemos el dibujo con la instrucción: 1 >> plotContourSolution(nodes,elem,u,’Color plot’,’jet’)
  • 74. Elementos 2D triangulares 74 /78 Respuestas = Elements; the indexes of the three nodes of each triangle in a row = Values on the nodes = Coordinates of the point = linearly interpolated value at the point = index of the triangle containing the point if isInside %If isinside, compute the results and break the for loop elemP = e; nodesP = elem(e,:); uP = dot(alphas,u(elem(e,:))); %dot is the scalar product break end 1 %FILE: interpolTriangMesh.m 2 %DESCRIPTION: Given a triangular mesh, some values at its nodes, and a 3 %point, we find the triangle containing the point and we linearly 4 %interpolate the value at the point by using its barycentric coordinates 5 %INPUT: 6 % nodes (array nNodes x 2) = Nodes; each node in a row 7 % elem (array nElem x 3) 8 % 9 % u (array nNodes x 1) 10 % point (array 1x2) 11 %where nNodes = number of nodes and nElem = number of elements 12 %OUTPUT: 13 % uP 14 % elemP 15 % nodesP (array 1x3) = indexes of the nodes of the triangle elemP 16 nElem=size(elem,1); 17 for e=1:nElem %We run over all elements 18 [alphas, isInside] = baryCoord(nodes(elem(e,:),:), point); 19 20 21 22 23 24 25 end 26 fprintf(’The point is in triangle %d;n’,elemP); 27 fprintf(’whose nodes have indexes %d, %d, and %d.n’,... 28 nodesP(1),nodesP(2),nodesP(3)); 29 fprintf(’The interpolated value is uP = %6.4fn’,uP);
  • 75. Elementos 2D triangulares 75 /78 Respuestas
  • 76. Elementos 2D triangulares 76 /78 Respuestas 17 a) Ventana de comandos: 1 2 3 4 >> addpath ../meshFilesAll/ >> eval(’meshHole’); >> g = @(x,y) x.^2 + y.^2; %Funcion inline >> u = g(nodes(:,1),nodes(:,2)); b) Usamos el script visto en la cuestión 16: 1 2 3 4 5 6 7 8 9 >> point = [0.5,0.75]; >> interpolTriangMesh The point is in triangle 158; whose nodes have indexes 69, 62, and 54. The interpolatred value is uP = 0.8161 >> gP = g(point(1),point(2)); >> errorP = abs(gP-uP) %uP was computed in the script errorP = 3.5901e-03 c) No, ya que q / ∈Ω. d) El dibujo se obtiene con la instrucción: 1 >> plotContourSolution(nodes,elem,u,’Color plot’,’jet’)
  • 77. Elementos 2D triangulares 77 /78 Respuestas
  • 78. Elementos 2D triangulares 78 /78 Respuestas 18 a) Esas instrucciones son incorrectas, pues el array de valores f y el punto p tienen otros nombres en el script. b) Esas instrucciones son correctas, pues después de ejecutar un script se recuerdan todas las variables calculadas en él, a no ser que las borremos con el comando clear. c) En las funciones, el nombre de los argumentos es irrelevante y las variables locales internas desaparecen al salir de la función. Los scripts se comportan de forma completamente opuesta. Los buenos programadores prefieren trabajar con funciones.