Manual fšr program fšr snirkliga symboler

 

Bengt Lindberg

NA,Math, KTH,

Tel: 7144, rum 213, epost: bengtl@nada.kth.se

 

 

Bifogade program anvŠnds till att rita snygga bokstŠver, siffror eller andra symboler.

Bšrja med att skissa din symbol pŒ ett rutat papper. Se figuren nedan fšr min skiss av bokstaven T.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MŠrk ut ett lŠmpligt antal punkter pŒ symbolen och ange x och y-koordinater fšr dessa punkter. VŠlj sjŠlv koordinatsystem sŒ du fŒr enkla siffror. JŠmfšr ovan! Om symbolen bestŒr av flera delkurvor sŒ lagras koordinaterna i flera matriser (lika mŒnga som antalet delkurvor). Se exemplet med tvŒ delkurvor. Fšr varje segment av delkurvorna anges i nya matriser styrpunkter fšr respektive delkurvas segment. Delkurvorna skall representeras av kvadratiska funktioner sŒ de bšr vara snŠlla. Se exemplet! Styrpunkternas lŠge kan varieras och ge olika utseende pŒ figurerna. Riktningen pŒ en linje frŒn ett segments Šndpunkt till dess styrpunkt anger segmentets lutning i Šndpunkten. Om man vill ha en figur med kontinuerlig derivata sŒ anvŠnds den egenskapen! Detta har gjorts i vŒrt exempel.

Fšr att rita en egen symbol sŒ behšver ni  Šndra matriserna P1, P2 och B1, B2 om

er symbol bestŒr av tvŒ delkurvor med vardera tvŒ segment. Med en delkurva kan ni plocka bort stora delar av programmet, och fšr tre eller flera delkurvor mŒste ni utška programmet med likartade delar.

 

Programmet anvŠnder kvadratiska Bezierkurvor

 

     x(t)=(1-t)^2*x1+2*t*(1-t)*bx+t^2*x2

     y(t)=(1-t)^2*y1+2*t*(1-t)*by+t^2*y2

 

med 0<=t<=1 fšr att rita ett snyggt kurvstycke genom punkterna

 (x1,y1) och (x2,y2). Punkten (bx,by) kallas fšr styrpunkt

 och anvŠnds till att styra kurvans utseende. Kurvstycket kallar vi

 segment. SammanhŠngande segment kallar vi en delkurva.

 

 

MATLABPROGRAM

 

%Designprogram fšr snirkliga symboler: bokstŠver, siffror, hjŠrtan mm

% Programmet anvŠnder kvadratiska Bezierkurvor

 

%x(t)=(1-t)^2*x1+2*t*(1-t)*bx+t^2*x2

%y(t)=(1-t)^2*y1+2*t*(1-t)*by+t^2*y2

 

%med 0<=t<=1 fšr att rita en snyggt kurvstycke genom punkterna

% (x1,y1) och (x2,y2). Punkten (bx,by) kallas fšr styrpunkt

% och anvŠnds till att styra kurvans utseende. Kurvstycket kallar vi

% segment. SammanhŠngande segment kallar vi en delkurva.

 

clear, clf

 

%Punkter fšrsta delkurvan

%           fšrsta raden Šr x-koordinater

%           andra raden y-koordinaterna

P1=[-2 0 3

    1 0 9 ];

 

%Styrpunkterna fšr fšrsta delkurvan

%              fšrsta raden Šr x-koordinater

%              andra raden y-koordinaterna

B1=[-4 3

    -4 3];

n1=length(B1(1,:)); %n1 ger antalet segment i delkurva 1

 

 

%Punkter andra delkurvan

%           fšrsta raden Šr x-koordinater

%           andra raden y-koordinaterna

P2=[0 3 7

    7 9 10];

 

%Styrpunkterna fšr andra delkurvan

%              fšrsta raden Šr x-koordinater

%              andra raden y-koordinaterna

 

B2=[ 0 9

     9 9];

n2=length(B2(1,:)); %n1 ger antalet segment i delkurva 2

 

%Rita ut punkterna, * fšr Interpolationspunkterna

%                   o fšr styrpunkter

P=[ P1 P2]; B=[ B1 B2];

plot(P(1,:),P(2,:),'*',B(1,:),B(2,:),'o'), hold on

 

%-------------------------------------------------------------

 

%Tabellera basfunktionerna

 

t=(0:0.05:1)';

F=[(1-t).^2  2*t.*(1-t)  t.^2];

 

%-------------------------------------------------------------

 

%BerŠkna den fšrsta delkurvan. Den ges av P1 och B1

 

%BerŠkna segmentet mellan de tvŒ fšrsta punkterna i P1

 

p1=P(:,1)'; p2=P1(:,2)'; b=B1(:,1)';

r=F*[p1; b; p2];

xdel1=r(:,1); ydel1=r(:,2);

 

%BerŠkna segmentet mellan punkt 2 och 3 i P1

 

p1=P1(:,2)'; p2=P1(:,3)'; b=B1(:,2)';

r=F*[p1; b; p2];

xdel1=[xdel1; r(:,1)];  ydel1=[ydel1; r(:,2)];

 

%om delkurva 1 har fler segment utfšrs ytterligare berŠkningar enl ovan

% kan anvŠndas till att snygga till programmet

 

%Rita fšrsta segmentet

%plot(xdel1,ydel1)

%hold on

 

 

%------------------------------------------------------------

 

%BerŠkna den andra delkurvan. Den ges av P2 och B2

 

%BerŠkna segmentet mellan de tvŒ fšrsta punkterna i P2

p1=P2(:,1)'; p2=P2(:,2)'; b=B2(:,1)';

r=F*[p1; b; p2];

xdel2=r(:,1); ydel2=r(:,2);

 

%BerŠkna segmentet mellan punkt 2 och 3 i P2

 

p1=P2(:,2)'; p2=P2(:,3)'; b=B2(:,2)';

r=F*[p1; b; p2];

xdel2=[xdel2; r(:,1)];  ydel2=[ydel2; r(:,2)];

 

%om delkurva 2 har fler segment utfšrs ytterligare berŠkningar enl ovan

% kan anvŠndas till att snygga till programmet

 

%rita andra segmentet

%plot(xdel2,ydel2)

 

%-----------------------------------------------------------

 

%Symbolens tvŒ delkurvor sparas i kolum 1 och 2 i

%matriserna X och Y. kan vi enkelt arbeta vidare

%med aktuell symbol

 

X=[xdel1 xdel2];  Y=[ydel1 ydel2];

 

plot(X(:,1),Y(:,1),X(:,2),Y(:,2)), hold on

 

%-----------------------------------------------------------

dx=0.01; dy=0.03;

%ritar om figuren  100 gŒnger med liten fšrskjutning

%          i sŒvŠl x-led som y-led. Detta ritar symbolen

%          i fetstil.

for i=1:100

     plot(X(:,1)+i*dx,Y(:,1)+i*dy,X(:,2)+i*dx,Y(:,2)+i*dy)

end

 

 

%ritar om en krympt symbol fšrflyttad 5 enheter i x-led

for i=0:100

     plot(0.1*(X(:,1)+i*dx)+5,0.5*(Y(:,1)+i*dy),0.1*(X(:,2)+i*dx)+5,0.5*(Y(:,2)+i*dy))

end