Mercurial > hg > trimatlab
annotate mt_calibrate.m @ 0:be936975f254
Initial check in.
author | samer |
---|---|
date | Wed, 01 Feb 2012 14:06:37 +0000 |
parents | |
children | 39d4f9e57b26 |
rev | line source |
---|---|
samer@0 | 1 % mt_calibrate - Set spatial calibration of melody triangle system. |
samer@0 | 2 % |
samer@0 | 3 % mt_calibrate :: |
samer@0 | 4 % mt_system ~'system to calibrate', |
samer@0 | 5 % I:[[1,E]->[3]] ~'list triangle corners being updated', |
samer@0 | 6 % P:[[3,E]] ~'X-Y coordinates of the E corners being updated' |
samer@0 | 7 % -> mt_system ~'calibrated system'. |
samer@0 | 8 |
samer@0 | 9 function Sys=mt_calibrate(Sys,I,PI) |
samer@0 | 10 |
samer@0 | 11 if nargin>2, Sys.refpoints(:,I) = PI; end |
samer@0 | 12 P = Sys.refpoints; |
samer@0 | 13 p0 = P(:,1); |
samer@0 | 14 Sys.map = info_map_fn(p0,inv(P(:,2:3)-repmat(p0,1,2))); |
samer@0 | 15 end |
samer@0 | 16 |
samer@0 | 17 function f=info_map_fn(p0,M) |
samer@0 | 18 f=@(p)clip_tri(M*(p-p0)); |
samer@0 | 19 end |
samer@0 | 20 |
samer@0 | 21 function x=clip_tri(x) |
samer@0 | 22 if x(2)<0 |
samer@0 | 23 x(2)=0; |
samer@0 | 24 if x(1)<0, x(1)=0; |
samer@0 | 25 elseif x(1)>1, x(1)=1; |
samer@0 | 26 end |
samer@0 | 27 elseif x(1)<0 |
samer@0 | 28 x(1)=0; |
samer@0 | 29 if x(2)<0, x(2)=1; |
samer@0 | 30 elseif x(2)>1, x(2)=1; |
samer@0 | 31 end |
samer@0 | 32 else |
samer@0 | 33 d = [1,1]*x - 1; |
samer@0 | 34 if d>0 |
samer@0 | 35 x = x - d/2; |
samer@0 | 36 if x(1)<0, x=[0;1]; |
samer@0 | 37 elseif x(2)<0, x=[1;0]; |
samer@0 | 38 end |
samer@0 | 39 end |
samer@0 | 40 end |
samer@0 | 41 end |
samer@0 | 42 |