%  ::::::::::::::: Comp.: Area + Umfang + Winkel  des  Pavillon ::::::::::::::::
% :::::::::::::: Muster = Tetraeder oder Pyramide ::::::::::::::::::::::
% :::::::  Koord.-Ursprung in Decken-Höhe :::::::::

clear all; close all;  clf;
set(gcf,'color', [0.54 0.54 0.44]);
fprintf(1, '\n')   
disp(['°°°°°°°°°°°°° S T A R T °°°°°°°°°°°° ' ,date, ' °°°°°°°°°°°°°°'])
format compact

% ::::::::::::Ecken in Decken-Höhe ::::::::::::::
A = [16  -13 4];      B = [ 8 11 4];     C = [  0  -5  2];   
D = [ 6 -3 12];                                    % > Pavillon-Spitze
% ::::::::::::::Ecken in Boden - Höhe  ::::::::::::::::::.
M = [1,1,0];                                      % Multiplikator für z=0
E = A.*M;
F = B.*M;
G = C.*M;
% ::::::::::::::::::::: Plot : Pavillons - Unterbau = Decke + Boden ::::::
R = [A;E;G;C;A; B; C; G; F; B];
% R = [A;B;C;A;  E;F;G;E];            % > alternativ
hold on
hu = plot3(R(:,1), R(:,2),R(:,3), 'b-');
R = [E;F];
ho = plot3(R(:,1), R(:,2),R(:,3), 'b-');
% ::::::::::::::::::::: Plot : Pavillons - Dach-Spitze ::::::
R = [B;D;C;D;A];
hd = plot3(R(:,1), R(:,2),R(:,3), 'r-');
set([hu ; ho ; hd], 'clipping','off', 'Linewidth', 2);
pause(1)
view(84,20)     
% ::::::::::::::::::::: Decke - Coloring ::::::::::::::::
patch(A,B,C,'y','FaceAlpha',0.8);    % >> fill3(A,B,C, 'y')  << alternativ
pause(1)
% :::::::::::::::::::: Boden - Ebene ::::::::::::
x = 0 : 2: A(1);
y = A(2):2 : B(2);
[xx, yy] = meshgrid(x, y) ;
H = 0;                                                  %  Einstellung :  Höhen-Achse
z = H*ones(size(xx,1), size(yy,2)) ;
% ::::::::::::::::::: 2nd  Basemesh :::::::::::::::::::::::::::::::.
base = mesh(xx, yy, z ) ;     
set(base, 'edgecolor', 'k', 'facecolor', 'none');
axis equal off
rotate3d

% :::::::::::::::::: Seiten - Vektoren ::::::::
a = C-B; 
b = A-C; 
c = B-A;
% :::::::::::: Umfang :  Dachrinne :::::::::::::::
U = norm(a)+norm(b)+norm(c)
% :::::::::::::::: Pavillon - Dach - Fläche ::::::::::::::
Area3Eck = 1/2*sqrt(dot(a,a)*dot(b,b) - dot(a,b)^2);
ArDach = 3*Area3Eck

% :::::::::::. Winkel zur Horizontalebene ::::::::::::::
% Dachkanten
da = D-A;
db = D-B; 
dc = D-C;

% sin(Winkel zur Horizontalebene) = z-Komponente/Länge
wA = 180/pi*asin(da(3)/norm(da))
wB = 180/pi*asin(db(3)/norm(db))
wC = 180/pi*asin(dc(3)/norm(dc))

% Winkel zur Horizontalebene = 90 Grad - Winkel zur Senkrechten
s = [0,0,1]; % Senkrechte auf Horizontalebene
wA = 90-180/pi*acos(dot(da,s)/norm(da))
wB = 90-180/pi*acos(dot(db,s)/norm(db))
wC = 90-180/pi*acos(dot(dc,s)/norm(dc))

return
% Projektionen auf Horizontalebene
pda = da.*M;
pdb = db.*M;
pdc = dc.*M;
% Winkel zur Horizontalebene = Winkel zur Projektion
wA = 180/pi*acos(dot(da,pda)/norm(da)/norm(pda))
wB = 180/pi*acos(dot(db,pdb)/norm(db)/norm(pdb))
wC = 180/pi*acos(dot(dc,pdc)/norm(dc)/norm(pdc))

