function [D,C,C2A,T,Pinicial,l,ldi,angc2,angtri2,angpent] = GeracaoPlanificacao(r,x,y,z)
%Função para gerar a planificação tendo em conta o raio r e as suas
%coordenadas no espaço 3D. Calcula também outros parâmetros necessários
%para executar o levantamento da planificação 

%% Inicialização de algumas variáveis

D=zeros(4,10);      %matriz com os pontos do decagono
C=zeros(4,20);      %matriz com os pontos dos quadrados no primeiro andar
C2A=zeros(4,10);    %matriz com os pontos dos quadrados no segundo andar
T=zeros(4,5);       %matriz com os pontos dos triangulos (segundo andar) 
Pinicial=zeros(4,3);%matriz com os pontos do pentagono
d2rad=pi/180;       %conversao de graus para radianos


%% Geração dos pontos do decágono
n=1;
for angd=0:0.2*pi:(324*pi)/180
    D(:,n)=[r*cos(angd)+x r*sin(angd)+y z 1];
    n=n+1;
end


%% Cálculo de variáveis necessárias para a criação das outras faces

%lado do decágono
l=D(1,3)-D(1,4);

%raio dos pontos mais afastados dos quadrados do 1º andar 
rc=sqrt((l*sin(18*d2rad))^2 +(r+l*cos(18*d2rad))^2);   

%raio dos pontos mais afastados dos quadrados do 2º andar
rc2=sqrt((2*l*sin(18*d2rad))^2 +(r+2*l*cos(18*d2rad))^2);   

%apotema pentagono
aptpent=(l/2)/(tan((36/180)*pi));

%altura triangulo
htri=sqrt((l)^2 -(l/2)^2); 

%lado decagono interior (centro até ponto médio de uma aresta)
ldi=sqrt((r)^2 -(l/2)^2);  

%raio dos pontos mais afastados dos triangulos do 2º andar
rctri=ldi+l+htri;

%raio do pentágono
rpent=sqrt((aptpent)^2 +(l/2)^2);

%angulo que os quadrados do 2º andar precisam de rodar relativamente às faces laterais
angc2=(pi/2)-acos((ldi-aptpent)/l);

%angulo que os triangulos do 2º andar precisam de rodar relativamente às faces laterais
angtri2=(pi/2)-acos((ldi-rpent)/htri);

%angulo que o pentágono precisa de rodar relativamente às faces laterais do 2º andar
angpent=pi-((pi/2)+(asin((ldi-aptpent)/l)));

%lado pentágono
rpent=(l/2)/(sin(36*d2rad)); 

%altura pentágono
hpent=(l/2)/(tan(36*d2rad));    


%% Geração dos pontos dos quadrados do 1º andar

%angulo necessário rodar para criar os pontos dos quadrados do 1º andar
angc=asin((sin(18*d2rad)*l)/rc);

%angulo necessário rodar para criar os pontos dos quadrados do 2º andar
angcb=asin((sin(18*d2rad)*l*2)/rc2);

%angulos necessários rodar para criar os pontos dos triangulos do 2º andar
angt=[54 126 198 270 342];

%angulo necessário rodar para criar os pontos do pentágono
angp=[-72 0 72];

angc1g=0;
angc2g=0;
for i=1:20
    
    if i==1 || i==3 || i==5 || i==7 || i==9 ...
            || i==11 || i==13 || i==15 || i==17 || i==19
        
        C(:,i)=[rc*cos(angc+angc1g)+x rc*sin(angc+angc1g)+y z 1];
        angc1g=angc1g+(36*d2rad);
    else
        C(:,i)=[rc*cos(angc1g-angc)+x rc*sin(angc1g-angc)+y z 1];
    end
    
    if i==1 || i==3 || i==5 || i==7 || i==9
        
        C2A(:,i)=[rc2*cos(angcb+angc2g)+x rc2*sin(angcb+angc2g)+y z 1];
        angc2g=angc2g+(2*36*d2rad);
    elseif i==2 || i==4 || i==6 || i==8 || i==10
        C2A(:,i)=[rc2*cos(angc2g-angcb-36*d2rad)+x rc2*sin(angc2g-angcb-36*d2rad)+y z 1];
    end
    
    if i<6
        T(:,i)=[rctri*cos(angt(i)*d2rad)+x rctri*sin(angt(i)*d2rad)+y z 1];
    end
    
    if i<4
    Pinicial(:,i)=[rpent*cos(angp(i)*d2rad)+ldi+2*l+hpent rpent*sin(angp(i)*d2rad) 0 1]*rotz(-18*d2rad);
    Pinicial(1,i)=Pinicial(1,i)+x;Pinicial(2,i)=Pinicial(2,i)+y;Pinicial(3,i)=Pinicial(3,i)+z;
    end
end


end

