The trs_ codes are a series of routines for performing coordinate Translation, Rotation, and Scaling. There is a fourth simple operation: reflection (an image flip about the X or axis). I wrote an early document that demonstrates usage of the trs_ transformation routines. The basic input file used for most of these routines is a simple X,Y data listing with a "# data" header. Below I list the major trs_ routines and their usage messages below. I some cases I give a link to a more detailed document which usually include a demo run and the resultant output.
=================================================================== To generate data: % trs_make_xy_TestData Usage: trs_make_xy_TestData 7 0.0 5.0 0.0 12.0 s arg1 - number of points arg2 - mean of gaussian 1 arg3 - sigma of gaussian 1 arg4 - mean of gaussian 2 arg5 - sigma of gaussian 2 arg6 - point symbol for pxy_SM_plot.py file =================================================================== A mored detailed discussion of trs_make_xy_TestData =================================================================== To build a plot file (used above in trs_make_xy_TestData) % trs_build_plot_file Usage: trs_build_plot_file xy.dat r o 100 17 My_"My String" arg1 - file name of X,Y data (no header) arg2 - color symbol (r,b,g,...) arg3 - point type symbol (o,s,...) arg4 - symbol size (100) arg5 - size of point name labels arg6 - descriptive string =================================================================== =================================================================== TRS routines (all files must have "# data" headers) (These are OTW codes) % trs_rotate.sh Usage: trs_rotate.sh XY.dat 60.0 arg1 - file of input X,Y (with # data header) arg2 - rotation angle in degrees (- for CCW, + for CW) % trs_scale.sh Usage: trs_scale.sh XY.dat 1.36 arg1 - file of input X,Y (with # data header) arg2 - scale factor % trs_scaledet.sh Usage: trs_scaledet.sh file1.xy file2.xy arg1 - file1 of input X,Y (with # data header) arg2 - file2 of input X,Y (with # data header) Ratio computed is file1/file2 % trs_translate.sh Usage: trs_translate.sh XY.dat 100.0 -25.5 arg1 - file of input X,Y (with # data header) arg2 - Xo arg3 - Yo % trs_reflect.sh Usage: trs_reflect.sh XY.dat X arg1 - file of input X,Y (with # data header) arg2 - reflect axis (X,Y, or N for none) Here is a demonstration using these routines: % trs_translate.sh d.0 -1.828 -28.265 > d.1 % trs_rotate.sh d.1 30.0 > d.2 % trs_scale.sh d.2 1.33 > d.3 % trs_scaledet.sh d.3 d.1 1.33000 0.00001 5 ===================================================================In the last example above I have translated a set of X,Y data (Xo,Yo = -1.828 -28.265), then I rotated this data set by 30 degrees in the clockwise (CW) direction. The coordinates were sclaed by a factor of 1.33. Finally, I selected the third point in my final X,Y set to use the trs_scaledet.sh to derive (and verify) the scale factor I applied. These steps are all very simple, highly modular, and easy to understand.
A set of higher level scripts has been written. Each script is comprised largely of calls to the primitives listed above.
=================================================================== To apply all of the coordinate transformation steps: % trs_apply Usage: trs_apply file1.xy trs_terms arg1 - file with XY to be transformed arg2 - file with TRS terms arg3 - output header line (Y/N) =================================================================== A more detailed discussion (with examples!) of trs_apply =================================================================== An example of the "file with TRS terms": % cat TRS.terms 0.0 0.0 N 1.0 30.0 0.0 0.0 ------------------------------------------------------------------------------------ Here are the script lines in trs_apply that read these: # Read the transformation coefficients read xt2 yt2 reflect fscal theta xf1 yf1 < $ftrs printf "Terms: $xt2 $yt2 $reflect $fscal $theta $xf1 $yf1\n" > trs_apply.explain ------------------------------------------------------------------------------------ The tranformed X,Y are sent to standard out, but general redirected to some new file. =================================================================== =================================================================== Solving for the TRS coefficients (an early version) *** This DOES NOT include the rotation angle! **** % trs_solve_1 Usage: trs_solve_1 file1.xy file2.xy 2 1.35 -30.0 N arg1 - file with XY to be transformed to (Defines system) arg2 - file with XY to be transformed arg3 - Point number defining origin (1) arg4 - scale factor (can be "Q") arg5 - Rotation angle in degrees (can be "Q") arg6 - Reflection axis (X,Y, or N for none) =================================================================== NOTE: a "Q" indicates the script simply queries the user for a value.Finally, to conduct various experiements, we would like a simple way of plotting point sets. The first set would presumambly be our input set (file1.xy) and the second would be transformed (or some intermediate) set (file2.xy). For this I have a simple plot building script:
% trs_2plot Usage: trs_2plot file1.xy file2.xy "My Plot of XY" arg1 - file with XY - Set 1 arg2 - file with XY - Set 2 arg3 - plot title string (in quotes)Hence, using the (slightly modified) original file from above:
% trs_apply XY0.data TRS.terms Y > XY1.data % trs_2plot XY0.data XY1.data % trs_plot.py Style.file -30 30 -30 30 SHOWI sued the commands above to ccreate the simple demo plot below that shows our 30 degree rotation.
![]() |
We have rotated an original set (File 1 in blue) by 30 degrees about
the origin to prodcue a transformed set (File 2 in red). The commands
to do this and make the above figure were:
% trs_apply XY0.data TRS.terms Y > XY1.data % trs_2plot XY0.data XY1.data % trs_plot.py Style.file -30 30 -30 30 SHOW Note that you can always change Style.file to modify the axis labels and such. |
I have described the use of trs_solve_1 above. The trs_solve_2 code is much the same with the important difference that in addition to using the "Q" (query) input, we can also use the "S" (solve) input.
% trs_solve_2 Usage: trs_solve_2 file1.xy file2.xy 2 1.35 -30.0 N arg1 - file with XY to be transformed to (Defines system) arg2 - file with XY to be transformed arg3 - Point number defining origin (1) arg4 - scale factor (can also be "Q" or "S") arg5 - Rotation angle in degrees (can be "Q" or "S") arg6 - Reflection axis (X,Y, or N for none) NOTE: Q=query S=solve NOTE: local PointNames file must be presentFinally, I note that the trs_solve_2 routine the end-prodcut of a lot of efforts. As a result, a lot of usesful plotting approaches are available. So many, in fact, that I can never rememeber how this stuff works! In an effort to put some order to this I have prepared a general document on TRS-related plotting.