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 pŒ 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 pŒ 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. DŒ 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