[8298] | 1 | function normal_node=expcontract(newfile,oldfile,distance)
|
---|
[2317] | 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 |
|
---|
[12691] | 10 | contour=expread(oldfile);
|
---|
[2317] | 11 | num=numel(contour.x);
|
---|
| 12 |
|
---|
| 13 | normal=zeros(num-1,2);
|
---|
[8298] | 14 | normal_node=zeros(num-1,2);
|
---|
[2317] | 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 |
|
---|
[8298] | 21 | normal_node(2:end,:)=[normal(1:end-1,:)+normal(2:end,:)];
|
---|
| 22 | normal_node(1,:)=normal(1,:)+normal(end,:);
|
---|
[2317] | 23 |
|
---|
[8298] | 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;
|
---|
[2317] | 27 |
|
---|
[8298] | 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);
|
---|
[2317] | 30 |
|
---|
| 31 | contour.x(end)=contour.x(1);
|
---|
| 32 | contour.y(end)=contour.y(1);
|
---|
| 33 |
|
---|
| 34 | expwrite(contour,newfile);
|
---|