1 | function normal_node=expcontract(newfile,oldfile,distance)
|
---|
2 | %EXPCONTRACT - contract or expand a profile, according to the normal.
|
---|
3 | %
|
---|
4 | % Usage:
|
---|
5 | % expcontract(newfile,oldfile,distance)
|
---|
6 | %
|
---|
7 | % See also EXPMASTER, EXPDOC
|
---|
8 |
|
---|
9 |
|
---|
10 | contour=expread(oldfile);
|
---|
11 | num=numel(contour.x);
|
---|
12 |
|
---|
13 | normal=zeros(num-1,2);
|
---|
14 | normal_node=zeros(num-1,2);
|
---|
15 |
|
---|
16 | for i=1:num-1,
|
---|
17 | normal(i,:)=[ contour.y(i)-contour.y(i+1) contour.x(i+1)-contour.x(i)];
|
---|
18 | normal(i,:)=normal(i,:)/sqrt(normal(i,1)^2+normal(i,2)^2);
|
---|
19 | end
|
---|
20 |
|
---|
21 | normal_node(2:end,:)=[normal(1:end-1,:)+normal(2:end,:)];
|
---|
22 | normal_node(1,:)=normal(1,:)+normal(end,:);
|
---|
23 |
|
---|
24 | normal_node_norm=sqrt(normal_node(:,1).^2+normal_node(:,2).^2);
|
---|
25 | normal_node(:,1)=normal_node(:,1)./normal_node_norm;
|
---|
26 | normal_node(:,2)=normal_node(:,2)./normal_node_norm;
|
---|
27 |
|
---|
28 | contour.x(1:end-1)=contour.x(1:end-1)+distance*normal_node(:,1);
|
---|
29 | contour.y(1:end-1)=contour.y(1:end-1)+distance*normal_node(:,2);
|
---|
30 |
|
---|
31 | contour.x(end)=contour.x(1);
|
---|
32 | contour.y(end)=contour.y(1);
|
---|
33 |
|
---|
34 | expwrite(contour,newfile);
|
---|