%% Oberflaechenprogrammierung: Volkram Weber, volkramweber.de
% Letzte Änderung: Oktober 2021 von Wolfgang Weber (Angabe der Winkel ...
% in rad
function Single_Interpolation()
    %Fenster anlegen
    f = figure( 'Visible',          'off',...
                'Position',         [360 500 800 485]);

    % Titel setzten
    set(f,'Name','Single_Interpolation');

    % Fenster-Nummer ausblenden
    set(f,'NumberTitle','off');

    % GrÃ¶ÃŸe Ã¤ndern durch den User verbieten
    set(f,'Resize','off');

    % Fenster-Stil auf 'Modal' setzten, damit Menu und Toolbar nicht
    % angezeigt werden
    set(f,'WindowStyle','modal');

    % Fenster-Hintergrundfarbe festlegen
    set(f,'Color',[0.9 0.9 0.9]);

    % Fenster in die Mitte des Bildschirms schieben
    movegui(f,'center');

            %Eingabe-Panel anlegen
            panel_eingabe =     uipanel('Parent',f,...
                                            'Units','pixels',...
                                            'BackgroundColor',[0.8 0.8 0.8],...
                                            'Position',[30 30 740 400]);

            %Ausgabe-Panel anlegen
            panel_ausgabe =     uipanel('Parent',f,...
                                            'Units','pixels',...
                                            'BackgroundColor',[0.8 0.8 0.8],...
                                            'Position',[30 30 740 400],...
                                            'Visible','off');

            %Menu-Buttongroup anlegen
            buttongroup_menu =  uibuttongroup('Parent',f,...
                                                'Units','pixels',...
                                                'BorderWidth',0,...
                                                'BackgroundColor',[0.8 0.8 0.8],...
                                                'SelectionChangeFcn',@set_panel,...
                                                'Position',[35 425 1 20]);
                %Menu-Buttons anlegen
                button_eingabe =    uicontrol(buttongroup_menu,...
                                                'Style','togglebutton',...
                                                'String','Eingabe',...
                                                'Value',1,...
                                                'Position',[0 0 100 20]);   
                button_ausgabe =    uicontrol(buttongroup_menu,...
                                                'Style','togglebutton',...
                                                'String','Ausgabe',...
                                                'Value',0,...
                                                'Visible','off',...
                                                'Position',[105 0 100 20]); 

        %Eingabe-Panel beschreiben
        uicontrol(panel_eingabe,...
                    'Style','text',...
                    'String','Interpolationsabstand (Millisekunden)',...
                    'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                    'HorizontalAlignment','left',...
                    'Position',[10 360 250 16]);
        uicontrol(panel_eingabe,...
                    'Style','text',...
                    'String','T_Ipo =',...
                    'FontAngle','italic',...
                    'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                    'HorizontalAlignment','left',...
                    'Position',[30 340 50 16]);
        in_tipo =   uicontrol(panel_eingabe,...
                                'Style','edit',...
                                'Position',[95 340 70 16]);
        uicontrol(panel_eingabe,...
                    'Style','text',...
                    'String','Interpolationsart',...
                    'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                    'HorizontalAlignment','left',...
                    'Position',[10 320 200 16]);                    
        buttongroup_bahntyp =   uibuttongroup('Parent',panel_eingabe,...
                                                'Units','pixels',...
                                                'BorderWidth',0,...
                                                'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                                                'Position',[30,300,200,16]);
            button_rampe =    uicontrol(buttongroup_bahntyp,...
                                        'Style','togglebutton',...
                                        'String','Rampenbahn',...
                                        'Value',1,...
                                        'Position',[0,0,100,16]);

            button_sinoid = uicontrol(buttongroup_bahntyp,...
                                        'Style','togglebutton',...
                                        'String','Sinoidenbahn',...
                                        'Value',0,...
                                        'Position',[100,0,100,16]);

        uicontrol(panel_eingabe,...
                    'Style','text',...
                    'String','Nachlaufzeit der theoretischen Bahnlaufzeit te (Prozent)',...
                    'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                    'HorizontalAlignment','left',...
                    'Position',[10 240 400 16]);
        uicontrol(panel_eingabe,...
                    'Style','text',...
                    'String','t_nach = ',...
                    'FontAngle','italic',...
                    'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                    'HorizontalAlignment','left',...
                    'Position',[30 220 80 16]);
        in_te =     uicontrol(panel_eingabe,...
                                'Style','edit',...
                                'Position',[95 220 70 16]);
        
        uicontrol(panel_eingabe,...
                    'Style','text',...
                    'String','Gelenktyp',...
                    'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                    'HorizontalAlignment','left',...
                    'Position',[380 360 200 16]);  
        buttongroup_gelenktyp =   uibuttongroup('Parent',panel_eingabe,...
                                                'Units','pixels',...
                                                'BorderWidth',0,...
                                                'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                                                'SelectionChangeFcn',@set_bp,...
                                                'Position',[400,340,200,16]);
            button_trans =    uicontrol(buttongroup_gelenktyp,...
                                        'Style','togglebutton',...
                                        'String','Translationsachse',...
                                        'Value',1,...
                                        'Position',[0,0,140,16]);

            button_rota = uicontrol(buttongroup_gelenktyp,...
                                        'Style','togglebutton',...
                                        'String','Rotationsachse',...
                                        'Value',0,...
                                        'Position',[140,0,140,16]);
        panel_eingabe_trans =     uipanel('Parent',panel_eingabe,...
                                        'Units','pixels',...
                                        'BorderWidth',0,...
                                        'Visible','on',...
                                        'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                                        'Position',[370 40 360 280]);
            uicontrol(panel_eingabe_trans,...
                        'Style','text',...
                        'String','Koordinatenwert bei Beginn der Bewegung (m)',...
                        'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                        'HorizontalAlignment','left',...
                        'Position',[10 280 300 16]);
            uicontrol(panel_eingabe_trans,...
                        'Style','text',...
                        'String','x_St = ',...
                        'FontAngle','italic',...
                        'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                        'HorizontalAlignment','left',...
                        'Position',[30 260 60 16]);
            in_trans_xst =    uicontrol(panel_eingabe_trans,...
                                        'Style','edit',...
                                        'Position',[85 260 70 16]);
            uicontrol(panel_eingabe_trans,...
                        'Style','text',...
                        'String','Koordinatenwert bei Ende der Bewegung (m)',...
                        'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                        'HorizontalAlignment','left',...
                        'Position',[10 240 350 16]);
            uicontrol(panel_eingabe_trans,...
                        'Style','text',...
                        'String','x_z = ',...
                        'FontAngle','italic',...
                        'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                        'HorizontalAlignment','left',...
                        'Position',[30 220 60 16]);
            in_trans_xz =    uicontrol(panel_eingabe_trans,...
                                        'Style','edit',...
                                        'Position',[85 220 70 16]);
            uicontrol(panel_eingabe_trans,...
                        'Style','text',...
                        'String','Geschwindigkeit (m/sec)',...
                        'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                        'HorizontalAlignment','left',...
                        'Position',[10 200 350 16]);
            uicontrol(panel_eingabe_trans,...
                        'Style','text',...
                        'String','vm = ',...
                        'FontAngle','italic',...
                        'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                        'HorizontalAlignment','left',...
                        'Position',[30 180 60 16]);
            in_trans_vm =    uicontrol(panel_eingabe_trans,...
                                        'Style','edit',...
                                        'Position',[85 180 70 16]);
            uicontrol(panel_eingabe_trans,...
                        'Style','text',...
                        'String','Beschleunigung (m/sec**2)',...
                        'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                        'HorizontalAlignment','left',...
                        'Position',[10 160 350 16]);
            uicontrol(panel_eingabe_trans,...
                        'Style','text',...
                        'String','bm = ',...
                        'FontAngle','italic',...
                        'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                        'HorizontalAlignment','left',...
                        'Position',[30 140 60 16]);
            in_trans_bm =    uicontrol(panel_eingabe_trans,...
                                        'Style','edit',...
                                        'Position',[85 140 70 16]);
                                    
        panel_eingabe_rota =     uipanel('Parent',panel_eingabe,...
                                        'Units','pixels',...
                                        'BorderWidth',0,...
                                        'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                                        'Visible','off',...
                                        'Position',[370 40 360 280]);
            uicontrol(panel_eingabe_rota,...
                        'Style','text',...
                        'String','Startwinkel bei Beginn der Bewegung (Grad)',...
                        'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                        'HorizontalAlignment','left',...
                        'Position',[10 280 300 16]);
            uicontrol(panel_eingabe_rota,...
                        'Style','text',...
                        'String','phi_st = ',...
                        'FontAngle','italic',...
                        'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                        'HorizontalAlignment','left',...
                        'Position',[30 260 60 16]);
            in_rota_phist =    uicontrol(panel_eingabe_rota,...
                                        'Style','edit',...
                                        'Position',[85 260 70 16]);
            uicontrol(panel_eingabe_rota,...
                        'Style','text',...
                        'String','Zielwinkel bei Ende der Bewegung (Grad)',...
                        'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                        'HorizontalAlignment','left',...
                        'Position',[10 240 350 16]);
            uicontrol(panel_eingabe_rota,...
                        'Style','text',...
                        'String','phi_z = ',...
                        'FontAngle','italic',...
                        'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                        'HorizontalAlignment','left',...
                        'Position',[30 220 60 16]);
            in_rota_phiz =    uicontrol(panel_eingabe_rota,...
                                        'Style','edit',...
                                        'Position',[85 220 70 16]);
            uicontrol(panel_eingabe_rota,...
                        'Style','text',...
                        'String','Winkelgeschwindigkeit (Grad/sec)',...
                        'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                        'HorizontalAlignment','left',...
                        'Position',[10 200 350 16]);
            uicontrol(panel_eingabe_rota,...
                        'Style','text',...
                        'String','vm = ',...
                        'FontAngle','italic',...
                        'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                        'HorizontalAlignment','left',...
                        'Position',[30 180 60 16]);
            in_rota_vm =    uicontrol(panel_eingabe_rota,...
                                        'Style','edit',...
                                        'Position',[85 180 70 16]);
            uicontrol(panel_eingabe_rota,...
                        'Style','text',...
                        'String','Winkelbeschleunigung (Grad/sec**2)',...
                        'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                        'HorizontalAlignment','left',...
                        'Position',[10 160 350 16]);
            uicontrol(panel_eingabe_rota,...
                        'Style','text',...
                        'String','bm = ',...
                        'FontAngle','italic',...
                        'BackgroundColor',get(panel_eingabe,'BackgroundColor'),...
                        'HorizontalAlignment','left',...
                        'Position',[30 140 60 16]);
            in_rota_bm =    uicontrol(panel_eingabe_rota,...
                                        'Style','edit',...
                                        'Position',[85 140 70 16]);
                                    
        uicontrol(panel_eingabe,...
                    'Style','pushbutton',...
                    'String','Berechnen',...
                    'Callback',@berechnen,...
                    'Position',[630 10 100 30]);
                
    %Ausgabe-Panel beschreiben
    ax1 = axes('Parent',panel_ausgabe,...
                'Units','pixels',...
                'Visible','on',...
                'Position',[50 40 400 300]);
    ax2 = axes('Parent',panel_ausgabe,...
                'Units','pixels',...
                'Visible','off',...
                'Position',[50 40 400 300]);
    ax3 = axes('Parent',panel_ausgabe,...
                'Units','pixels',...
                'Visible','off',...
                'Position',[50 40 400 300]);
            
    uicontrol('Parent',panel_ausgabe,...
                'Units','pixels',...
                'Style','pushbutton',...
                'String','neues Fenster...',...
                'Callback',@open_ax,...
                'Position',[320,340,120,15]);
    
    buttongroup_axes = uibuttongroup('Parent',panel_ausgabe,...
                                            'Units','pixels',...
                                            'BorderWidth',0,...
                                            'BackgroundColor',[0.8 0.8 0.8],...
                                            'SelectionChangeFcn',@set_ax,...
                                            'Position',[480 40 200 300]);
            %Menu-Buttons anlegen
            button_ax1 =    uicontrol(buttongroup_axes,...
                                            'Style','togglebutton',...
                                            'String','ax1',...
                                            'Tag','ax1',...
                                            'Value',1,...
                                            'FontSize',8,...
                                            'HorizontalAlignment','left',...
                                            'Position',[0 260 200 40]);   
            button_ax2 =    uicontrol(buttongroup_axes,...
                                            'Style','togglebutton',...
                                            'String','ax2',...
                                            'Tag','ax2',...
                                            'Value',0,...
                                            'FontSize',8,...
                                            'HorizontalAlignment','left',...
                                            'Position',[0 200 200 40]);
            button_ax3 =    uicontrol(buttongroup_axes,...
                                            'Style','togglebutton',...
                                            'String','ax3',...
                                            'Tag','ax3',...
                                            'Value',0,...
                                            'FontSize',8,...
                                            'HorizontalAlignment','left',...
                                            'Position',[0 140 200 40]);



    % Fenster sichtbar machen
    set(f,'Visible','on');

    
    
  
    
    
    
    
    %Funktion, welche zwischen Eingabe und Ausgabe wechselt
    function set_panel(source,eventData)
        n = get(eventData.NewValue,'String');
        if strcmp(n, 'Eingabe')==1
            set(panel_eingabe,'Visible','on');
            set(panel_ausgabe,'Visible','off');
        end
        if strcmp(n, 'Ausgabe')==1
            set(panel_eingabe,'Visible','off');
            set(panel_ausgabe,'Visible','on');
        end
    end

    %Funktion, welche zwischen Translations- und Rotationsachse wechselt
    function set_bp(source,eventData)
        n = get(eventData.NewValue,'String');
        if strcmp(n, 'Translationsachse')==1
            set(panel_eingabe_trans,'Visible','on');
            set(panel_eingabe_rota,'Visible','off');
        end
        if strcmp(n, 'Rotationsachse')==1
            set(panel_eingabe_trans,'Visible','off');
            set(panel_eingabe_rota,'Visible','on');
        end
    end
    
     %Funktion, welche zwischen den Axes wechselt
    function set_ax(source,eventData)
        n = get(eventData.NewValue,'Tag');
        switch n
            case 'ax1'
                set(ax1,'Visible','on');
                set(allchild(ax1),'visible','on');
                set(ax2,'Visible','off');
                set(allchild(ax2),'visible','off');
                set(ax3,'Visible','off');
                set(allchild(ax3),'visible','off');
            case 'ax2'
                set(ax1,'Visible','off');
                set(allchild(ax1),'visible','off');
                set(ax2,'Visible','on');
                set(allchild(ax2),'visible','on');
                set(ax3,'Visible','off');
                set(allchild(ax3),'visible','off');
            case 'ax3'
                set(ax1,'Visible','off');
                set(allchild(ax1),'visible','off');
                set(ax2,'Visible','off');
                set(allchild(ax2),'visible','off');
                set(ax3,'Visible','on');
                set(allchild(ax3),'visible','on');
        end
        grid(ax1,'on');
        grid(ax2,'on');
        grid(ax3,'on');
    end
    
    %Funktion, welche eine bestimme Achsee in einem neuen Fenster darstellt
    function open_ax(source,eventData)
        if(strcmp(get(ax1,'Visible'), 'on')==1)
            fax1 = figure;
            copyobj(ax1,fax1);
            grid on;
            set(fax1,'Name',get(ax1,'Tag'));
            set(fax1,'NumberTitle','off');
        end
        if(strcmp(get(ax2,'Visible'), 'on')==1)
            fax2 = figure;
            copyobj(ax2,fax2);
            grid on;
            set(fax2,'Name',get(ax2,'Tag'));
            set(fax2,'NumberTitle','off');
        end
        if(strcmp(get(ax3,'Visible'), 'on')==1)
            fax3 = figure;
            copyobj(ax3,fax3);
            grid on;
            set(fax3,'Name',get(ax3,'Tag'));
            set(fax3,'NumberTitle','off');
        end
    end

    %Funktion, welche die Ausgabe erzeugt
    function berechnen(source,eventData)
        
        
        %MÃ¶gliche Zeichnungen lÃ¶schen
        delete(allchild(ax1));
        delete(allchild(ax2));
        delete(allchild(ax3));
        
        grid(ax1,'on');
        grid(ax2,'on');
        grid(ax3,'on');
        
        
        Nachlauf = str2num(get(in_te,'String'));
        T_IPO_Milli=str2num(get(in_tipo,'String'));
        T_IPO=T_IPO_Milli/1000;
        
        if get(button_rampe,'Value')==1
            ipoart = 0;
        else 
            ipoart = 1;
        end
        
        if get(button_trans,'Value')==1
            q_art = 0;
        else
            q_art = 1;
        end
        
        
        %PrÃ¼fen, ob alle Werte im Wertebereich liegen und gegebenenfalls
        %die Ausgabe stoppen
        if T_IPO_Milli<=0
            msgbox('Der Interpolationsabstand muss positiv sein.');
            return;
        end
        if Nachlauf <0 
            msgbox('Die Nachlaufzeit in Prozent muss zwischen 0 und 100 liegen.');
            return;
        end
        if Nachlauf >100
            msgbox('Die Nachlaufzeit in Prozent muss zwischen 0 und 100 liegen.');
            return;
        end
        
        if ipoart==0
  
            if q_art == 0
              q_st=str2num(get(in_trans_xst,'String'));
              q_z=str2num(get(in_trans_xz,'String'));
              vm=str2num(get(in_trans_vm,'String'));
              bm=str2num(get(in_trans_bm,'String'));
              Vorzeichen=sign(q_z-q_st);
              if(vm<=0) msgbox('Der Wert von vm muss groesser 0 sein.'); return; end
              if(bm<=0) msgbox('Der Wert von bm muss groesser 0 sein.'); return; end
              se=abs(q_z - q_st);
                 if vm > sqrt(se*bm)
                    vm=sqrt(se*bm);
                    msgbox(['Die geforderte Geschwindigkeit ist nicht erreichbar. Korrigierter Wert in m/sec: ',num2str(vm)]);
                 end

           elseif q_art==1
              q_st_grad=str2num(get(in_rota_phist,'String'));
              q_st=q_st_grad*pi/180;
              q_st_z=str2num(get(in_rota_phiz,'String'));
              q_z=q_st_z*pi/180;
              se=abs(q_z - q_st);
              Vorzeichen=sign(q_z-q_st);
              vm_grad=str2num(get(in_rota_vm,'String'));
              vm=vm_grad*pi/180;
              bm_grad=str2num(get(in_rota_bm,'String'));
              bm=bm_grad*pi/180;
              if(vm<=0) msgbox('Der Wert von vm muss groesser 0 sein.'); return; end
              if(bm<=0) msgbox('Der Wert von bm muss groesser 0 sein.'); return; end
                  if vm > sqrt(se*bm)
                     vm=sqrt(se*bm);
                    vm_grad=vm*180/pi;
                    msgbox(['Die geforderte Geschwindigkeit ist nicht erreichbar. Korrigierter Wert in Grad/sec: ',num2str(vm_grad)]);
                  end
           end

            tb=vm/bm;
            tv=se/vm;
            te=tv+tb;
            te_bahn=te+te*Nachlauf/100;


            kend  = round(te_bahn/T_IPO);  	% Anzahl der Spalten der Gelenkwinkelmatrix und des Zeitvektors


            s=[]; s_p=[]; s_pp=[];   % Vorbesetzungen
            q=[]; q_p=[]; q_pp=[];
            s(1)=0; s_p(1)=0; s_pp(1)=bm;
            Zeitvektor=[0];

            for j=1:1:kend,

                 t = j *T_IPO;
                 Zeitvektor=[Zeitvektor, t];

                 if t <= tb & t >=0
                      s(j+1) = (.5*bm)*t^2;
                      s_p(j+1) = bm*t;
                      s_pp(j+1) = bm;

                 elseif t > tb & t <= tv 
                      s(j+1) = vm *t - (vm^2)/(2 *bm);
                      s_p(j+1) = vm;
                      s_pp(j+1) = 0;

                 elseif t > tv & t <= te 
                      s(j+1) = se - (.5*bm).*((te-t).^2);
                      s_p(j+1) = bm*(te-t);
                      s_pp(j+1) = -bm;

                 elseif t > te 
                      s(j+1) = se;
                      s_p(j+1) = 0;
                      s_pp(j+1) = 0;
                 end
            end;



        ' Winkel bzw. Weg , Geschwindigkeit und Beschleunigung in SI-Einheiten'
            q  = s*Vorzeichen+q_st
          q_p = s_p*Vorzeichen;
          q_pp=s_pp*Vorzeichen;
          % Berechnung der absoluten Koordinaten und Plots
        
          
          if q_art==1
                q_grad=(s*Vorzeichen+q_st)*180/pi;
            q_p_grad = s_p*Vorzeichen*180/pi;
            q_pp_grad=s_pp*Vorzeichen*180/pi;
          end

             if q_art==0
                 ' Weg , Geschwindigkeit und Beschleunigung in m, m/sec, m/sec^2'
          q_rad=q*pi/180
          q_p_rad=q_p*pi/180
          q_pp_rad=q_pp*pi/180
                 set(button_ax1,'String','<html>Rampenbahn: Koordinatenverlauf<br>einer Translationsbewegung');
                plot(Zeitvektor,q,'Parent',ax1);
                %title('Rampenbahn: Koordinatenverlauf einer Translationsbewegung','Parent',ax1);
                set(ax1,'Tag','Rampenbahn: Koordinatenverlauf einer Translationsbewegung');
                xlabel('Zeit/sec','Parent',ax1);
                ylabel(' Weg in m','Parent',ax1);
             %grid on;
             %figure;
                set(button_ax2,'String','<html>Rampenbahn: Geschwindigkeitsverlauf<br>einer Translationsbewegung');
             plot(Zeitvektor,q_p,'Parent',ax2);
             %title('Rampenbahn: Geschwindigkeitsverlauf einer Translationsbewegung','Parent',ax2);
                set(ax2,'Tag','Rampenbahn: Geschwindigkeitsverlauf einer Translationsbewegung');
                xlabel('Zeit/sec','Parent',ax2);
                ylabel(' Geschwindigkeit in m/sec','Parent',ax2);
                %grid on;
                set(button_ax3,'Visible','off');
                
                set(button_ax3,'String','<html>Rampenbahn: Winkelbeschleunigung<br>einer Translationsbewegung');
                plot(Zeitvektor,q_pp,'Parent',ax3);
                %title('Sinoidenbahn: Winkelbeschleunigung einer Translationsbewegung','Parent',ax3)
                set(ax3,'Tag','Rampenbahn: Winkelbeschleunigung einer Translationsbewegung');
                xlabel('Zeit/sec','Parent',ax3);
                ylabel(' Beschleunigung in m/sec**2','Parent',ax3);
                %grid on;
                set(button_ax3,'Visible','on');
             else
                set(button_ax1,'String','<html>Rampenbahn: Koordinatenverlauf<br>einer Rotationsbewegung');
                plot(Zeitvektor,q_grad,'Parent',ax1);
                %title('Rampenbahn: Koordinatenverlauf einer Rotationsbewegung','Parent',ax1);
                set(ax1,'Tag','Rampenbahn: Koordinatenverlauf einer Rotationsbewegung');
                xlabel('Zeit/sec','Parent',ax1);
                ylabel(' Winkel in Grad','Parent',ax1);
             %grid on;
             %figure;
                set(button_ax2,'String','<html>Rampenbahn: Winkelgeschwindigkeit<br>einer Rotationsbewegung');
                plot(Zeitvektor,q_p_grad,'Parent',ax2);
                %title('Rampenbahn: Winkelgeschwindigkeit einer Rotationsbewegung','Parent',ax2);
                set(ax2,'Tag','Rampenbahn: Winkelgeschwindigkeit einer Rotationsbewegung');
                xlabel('Zeit/sec','Parent',ax2);
                ylabel(' Winkelgeschwindigkeit in Grad/sec','Parent',ax2);
                %grid on;	
                set(button_ax3,'String','<html>Rampenbahn: Winkelbeschleunigung<br>einer Rotationsbewegung');
                
                plot(Zeitvektor,q_pp_grad,'Parent',ax3);
                %title('Sinoidenbahn: Winkelbeschleunigung einer Translationsbewegung','Parent',ax3)
                set(ax3,'Tag','Rampenbahn: Winkelbeschleunigung einer Rotationsbewegung');
                xlabel('Zeit/sec','Parent',ax3);
                ylabel(' Beschleunigung in Grad/sec**2','Parent',ax3);
                %grid on;
                set(button_ax3,'Visible','on');
                %set(button_ax3,'Visible','off');

             end
        end

        if ipoart==1
        if q_art == 0
              q_st=str2num(get(in_trans_xst,'String'));
              q_z=str2num(get(in_trans_xz,'String'));
              vm=str2num(get(in_trans_vm,'String'));
              bm=str2num(get(in_trans_bm,'String'));
              Vorzeichen=sign(q_z-q_st);
              if(vm<=0) msgbox('Der Wert von vm muss groesser 0 sein.'); return; end
              if(bm<=0) msgbox('Der Wert von bm muss groesser 0 sein.'); return; end
              se=abs(q_z - q_st);
                 if vm > sqrt(se*bm/2)
                    vm=sqrt(se*bm/2);
                    msgbox(['Die geforderte Geschwindigkeit ist nicht erreichbar. Korrigierter Wert in m/sec: ',num2str(vm)]);
                 end

           elseif q_art==1
              q_st_grad=str2num(get(in_rota_phist,'String'));
              q_st=q_st_grad*pi/180;
              q_st_z=str2num(get(in_rota_phiz,'String'));
              q_z=q_st_z*pi/180;
              se=abs(q_z - q_st);
              Vorzeichen=sign(q_z-q_st);
              vm_grad=str2num(get(in_rota_vm,'String'));
              vm=vm_grad*pi/180;
              bm_grad=str2num(get(in_rota_bm,'String'));
              bm=bm_grad*pi/180;
              if(vm<=0) msgbox('Der Wert von vm muss groesser 0 sein.'); return; end
              if(bm<=0) msgbox('Der Wert von bm muss groesser 0 sein.'); return; end
                  if vm > sqrt(se*bm/2)
                     vm=sqrt(se*bm/2);
                    vm_grad=vm*180/pi;
                    msgbox(['Die geforderte Geschwindigkeit ist nicht erreichbar. Korrigierter Wert in m/sec: ',num2str(vm_grad)]);
                  end
           end


        tb=2*vm/bm;
        tv=se/vm;
        te=tv+tb;


        tast  = round(te/T_IPO)  	% Anzahl der Spalten der Gelenkwinkelmatrix und des Zeitvektors


        s=[]; s_p=[]; s_pp=[];   % Vorbesetzungen
        q=[]; q_p=[]; q_pp=[];
        s(1)=0; s_p(1)=0; s_pp(1)=0;
        Zeitvektor=[0];

        for j=1:1:tast,

          t = j *T_IPO;
          Zeitvektor=[Zeitvektor, t];
          if t <= tb & t >=0

            s(j+1) = bm*(0.25*t^2+(tb^2/(8*pi^2))*(cos(2*pi*t/tb)-1));
            s_p(j+1) = 0.5*bm*(t - (tb/(2*pi))*(sin(2*pi*t/tb)));
            s_pp(j+1) = bm*(sin(pi*t/tb)^2);


         elseif t > tb & t <= tv 

            s(j+1) = vm *(t - tb/2);
            s_p(j+1) = vm;
            s_pp(j+1) = 0;

         elseif t > tv & t <= te 

            %s(j+1) = (bm/2) * (te*(t+tb)-0.5*(t^2+te^2+2*tb^2)+(tb^2/(4*pi^2))*(1-cos(2*pi*(t-tv)/tb)));
            s(j+1) = se-bm*(0.25*(te-t)^2+(tb^2/(8*pi^2))*(cos(2*pi*(te-t)/tb)-1));
            %(te*(t+tb)-0.5*(t^2+te^2+2*tb^2)+(tb^2/(4*pi^2))*(1-cos(2*pi*(t-tv)/tb)));
            %s_p(j+1) = vm -0.5*bm*( t-tv-(tb/(2*pi)) *sin(2*pi*(t-tv)/tb) );
            s_p(j+1) = 0.5*bm*( (te-t)-(tb/(2*pi)) *sin(2*pi*(te-t)/tb) );
            s_pp(j+1) = -bm*(sin((pi/tb)*(t-tv))^2);

         elseif t > te 

            s(j+1) = se;
            s_p(j+1) = 0;
            s_pp(j+1) = 0;
         end



        end;

        % Berechnung der absoluten Koordinaten und Plots
          q  = s*Vorzeichen+q_st
          q_p = s_p*Vorzeichen
          q_pp=s_pp*Vorzeichen
         
          if q_art==1
            q_grad=(s*Vorzeichen+q_st)*180/pi;
            q_p_grad = s_p*Vorzeichen*180/pi;
            q_pp_grad=s_pp*Vorzeichen*180/pi;
            end

             if q_art==0
                 set(button_ax1,'String','<html>Sinoidenbahn: Koordinatenverlauf<br>einer Translationsbewegung');
                plot(Zeitvektor,q,'Parent',ax1);
                %title('Sinoidenbahn: Koordinatenverlauf<br>einer Translationsbewegung')
                set(ax1,'Tag','Sinoidenbahn: Koordinatenverlauf<br>einer Translationsbewegung');
                xlabel('Zeit/sec','Parent',ax1);
                ylabel(' Weg in m','Parent',ax1);
             %grid on;
             %figure;
             set(button_ax2,'String','<html>Sinoidenbahn: Geschwindigkeitsverlauf<br>einer Translationsbewegung');
             plot(Zeitvektor,q_p,'Parent',ax2);
             %title('Sinoidenbahn: Geschwindigkeitsverlauf<br>einer Translationsbewegung')
             set(ax2,'Tag','Sinoidenbahn: Geschwindigkeitsverlauf<br>einer Translationsbewegung');
                xlabel('Zeit/sec','Parent',ax2);
                ylabel(' Geschwindigkeit in m/sec','Parent',ax2);
                
                %grid on;
             %figure;
                set(button_ax3,'String','<html>Sinoidenbahn: Beschleunigung<br>einer Translationsbewegung');
                plot(Zeitvektor,q_pp,'Parent',ax3);
                %title('Sinoidenbahn:Beschleunigung einer Translationsbewegung','Parent',ax3)
                set(ax3,'Tag','Sinoidenbahn: Beschleunigung einer Translationsbewegung');
                xlabel('Zeit/sec','Parent',ax3);
                ylabel(' Beschleunigung in m/sec**2','Parent',ax3);
                %grid on;
                set(button_ax3,'Visible','on');

             else
                    set(button_ax1,'String','<html>Sinoidenbahn: Koordinatenverlauf<br>einer Rotationsbewegung');
                plot(Zeitvektor,q_grad,'Parent',ax1);
                %title('Sinoidenbahn: Koordinatenverlauf<br>einer Rotationsbewegung')
                set(ax1,'Tag','Sinoidenbahn: Koordinatenverlauf<br>einer Rotationsbewegung');
                xlabel('Zeit/sec','Parent',ax1);
                ylabel(' Winkel in Grad','Parent',ax1);
             %grid on;
             %figure;
                set(button_ax2,'String','<html>Sinoidenbahn: Winkelgeschwindigkeit<br>einer Rotationsbewegung');
                plot(Zeitvektor,q_p_grad,'Parent',ax2);
                %title('<html>Sinoidenbahn: Winkelgeschwindigkeit<br>einer Rotationsbewegung')
                set(ax2,'Tag','Sinoidenbahn: Winkelgeschwindigkeit einer Rotationsbewegung');
                xlabel('Zeit/sec','Parent',ax2);
                ylabel(' Winkelgeschwindigkeit in Grad/sec','Parent',ax2);
                %grid on;
              %figure;
                set(button_ax3,'String','<html>Sinoidenbahn: Winkelbeschleunigung<br>einer Rotationsbewegung');
                plot(Zeitvektor,q_pp_grad,'Parent',ax3);
                %title('<html>Sinoidenbahn: Winkelbeschleunigung<br>einer Rotationsbewegung')
                set(ax3,'Tag','Sinoidenbahn: Winkelbeschleunigung einer Rotationsbewegung');
                xlabel('Zeit/sec','Parent',ax3);
                ylabel(' Winkelbeschleunigung in Grad/sec**2','Parent',ax3);
                %grid on;
                set(button_ax3,'Visible','on');
             end
        end
        
        %Eingabe-Panel ausblenden
        set(panel_eingabe,'Visible','off');
        %Ausgabe-Panel und -Button sichtbar machen
        set(panel_ausgabe,'Visible','on');
        set(button_ausgabe,'Visible','on');
        set(button_ausgabe,'Value',1);
        
        set(button_ax1,'Value',1);
        set(ax1,'Visible','on');
        set(allchild(ax1),'visible','on');
        set(ax2,'Visible','off');
        set(allchild(ax2),'visible','off');
        set(ax3,'Visible','off');
        set(allchild(ax3),'visible','off');

        grid(ax1,'on');
        grid(ax2,'on');
        grid(ax3,'on');
    end
end

