%(1) Die vorgegebenen Kontrollpunkte werden gezeichnet,
%(2) numeriert,
%(3) verbunden (Kontrollpolygon),
%(4) die Bezier-Kurve wird gezeichnet, (spezielle Prozedur bezier.m wird verwendet)
%(5) nach dem de Casteljau-Algorithmus werden einige Kurvenpunkte gezeichnet.
%Programm: G. Opfer, Juli 1999

Kontrollpunkte=[cos(0),sin(0);cos(pi/4),sin(pi/4);cos(pi/2),sin(pi/2);...
               cos(pi),sin(pi)];
%(1) -------------------------------------------------------------------------
zz=Kontrollpunkte(:,1)'+i*Kontrollpunkte(:,2)';
plot(zz,'ro'); hold on     %gibt Kontrollpunkte in rot
%(2) -------------------------------------------------------------------------
for j=1:length(zz) %ergibt Numerierung in schwarz
  text(real(zz(j))+0.03,imag(zz(j)),[int2str(j-1)]);
end; %for j
%(3) -------------------------------------------------------------------------
plot(zz,'r');     %gibt Kontrollpolygon auch in rot
axis equal
grid on
%(4) -------------------------------------------------------------------------
t=linspace(0,1);
[Kurve]=bezier(Kontrollpunkte,t);
plot(Kurve(1,:),Kurve(2,:),'k'); %in schwarz
%(5) -------------------------------------------------------------------------
%T=[0.2 1/3 0.5 0.75 0.9];  %de Casteljau-Punkte (zum Zeichnen zu viele)
T=[0.2 0.5 0.9];            %de Casteljau-Punkte
[m,n]=size(Kontrollpunkte); %n=2 wird nicht gebraucht 
%m = Anzahl der Kontrollpunkte
k=0;
for t = T
  mm=m;
  controlpoints=Kontrollpunkte;
  k=k+1;
  while mm>1
    controlpoints(1:mm-1,:)=...
                         (1-t)*controlpoints(1:mm-1,:)+t*controlpoints(2:mm,:);
    controlpoints(mm,:)=[]; %am Schlu\ss\ enth\"alt die Matrix nur eine Zeile
    z=controlpoints(:,1)'+i*controlpoints(:,2)';
    Farbe='grbyk'; %f\"ur jedes t eine Farbe: rot, gr\"un, blau, gelb, schwarz
    Farbe2=['go';'ro';'bo';'yo';'ko']; %farbiger kleiner Kreis
    if mm>2 
      plot(z,Farbe(k));
      else
      plot(z,Farbe2(k,:)); %der eigentliche Kurvenpunkt
    end; %if
    mm=mm-1;
  end; %while
end; %for t
hold off
%print -dpsc deC.ps
