triangular elements

Contents

clear
x = [ 0.1 0.9 0.5];
y = [ 0.1 0.1 0.9];
tri = [ 1 2 3 ];

trimesh(tri,x,y);
axis([0 1 0 1]);

area via determinant

area

w = max(x)-min(x);
h = max(y)-min(y);
area = 0.5*w*h

% determinant is positive for vertices ordered by right-hand rule
T = 0.5*det([ones(3,1) x' y'])
area =

    0.3200


T =

    0.3200

linear basis values for point inside triangle

p = [0.5 0.5];
L(1) = 0.5*det([ones(3,1) [p(1) x(2) x(3)]' [p(2) y(2) y(3)]' ])/T;
L(2) = 0.5*det([ones(3,1) [x(1) p(1) x(3)]' [y(1) p(2) y(3)]' ])/T;
L(3) = 0.5*det([ones(3,1) [x(1) x(2) p(1)]' [y(1) y(2) p(2)]' ])/T;
disp('L');
disp(L)
disp('sum(L)')
L
    0.2500    0.2500    0.5000

sum(L)

area via cross product

M = [x' y' zeros(3,1)];
C = 0.5*cross(M(2,:)-M(1,:),M(3,:)-M(1,:))
A = norm(C)
C =

         0         0    0.3200


A =

    0.3200

show inside of triangle

[xg yg] = meshgrid(linspace(0,1,128));
yg = flipud(yg);
z = polygon(xg,yg,[x' y']);
imshow(z);
L1 = 0.5*(x(2)*y(3)-x(3)*y(2)-xg*(y(3)-y(2))+yg*(x(3)-x(2)))/T;
imshow(L1.*z);
L2 = 0.5*(x(3)*y(1)-x(1)*y(3)+xg*(y(3)-y(1))-yg*(x(3)-x(1)))/T;
imshow(L2.*z);
L3 = 0.5*(x(1)*y(2)-x(2)*y(1)-xg*(y(2)-y(1))+yg*(x(2)-x(1)))/T;
imshow(L3.*z);
rgb = cat(3,L1.*z,L2.*z,L3.*z);
imshow(rgb);
imshow(L1<0);
imshow(L1>1);
contour(xg,yg,L1);
imshow(~(L1<0 | L2<0 | L3<0));
rgb2 = cat(3,double(L1>0),double(L2>0),double(L3>0));
imshow(rgb2)
xv = L1*x(1)+L2*x(2)+L3*x(3);
imshow(xv)
yv = L1*y(1)+L2*y(2)+L3*y(3);
imshow(yv);
st = sum(sum(z));
tot1 = sum(sum(xv.*z))/st

tot2 = (2/6)*(x(1)+x(2)+x(3))
tot1 =

    0.5000


tot2 =

    0.5000

L1sq = sum(sum(L1.^2 .*z))/st

a=2;
tot = 2*factorial(a)/factorial(a+2)
L1sq =

    0.1673


tot =

    0.1667

L1cub = sum(sum(L1.^3.*z))/st

a=3;
tot = 2*factorial(a)/factorial(a+2)
L1cub =

    0.1007


tot =

    0.1000