"Chenge Qu" wrote in message <firstname.lastname@example.org>... > "Roger Stafford" wrote in message <email@example.com>... > > "Chenge Qu" wrote in message <firstname.lastname@example.org>... > > > I'd like to extract a grid from the (approximate) location of a few intersections (say, ~5 intersections for a 10x10 grid). The grid spacing is known, but the grid itself may be skewed, rotated, or both relative to the intersection coordinates I have. In other words, I want to find how the grid is skewed/rotated relative to my coordinates. > > - - - - - - - - - - > > If I understand you correctly, you have a grid of points that has undergone an affine transformation from some kind of standard grid with orthogonal lines. If you can establish a correspondence between three nonlinear new intersections and three of the original grid, that is sufficient to uniquely determine the transformation. > > > > Just write the equations: > > > > X = a*x+b*y+c > > Y = d*x+e*y+f > > > > The coordinates of the new and old intersections give you six linear equations in the six unknown coefficients which is sufficient to solve them unless they are for colinear points. Use matlab's backslash operator to solve them. > > > > Roger Stafford > > Thanks for the reply! The problem is that I don't have any coordinates from the original grid. All I know is that it's a standard grid with orthogonal lines, like you said, and also the grid spacing. > > Sorry for the confusion. - - - - - - - - - You have said that you have a "10x10 grid". What exactly do you mean by that? Does this mean you have two sets of uniformly-spaced parallel lines defined and are able to determine any intersection of one in one set with any one in the other set? Presumably this means if you were to find an intersection between two of these lines you would also have information about which pair of lines were used.
If we also assume that you know which of the two sets of lines was originally oriented in the x-direction with the other set being in the y-direction, and if you know the grid spacing in the old set, then you can hypothesize an original grid as beginning at (0,0) with the first pair of lines from the two sets and with the known grid spacing after that. This suffices to establish all the coordinates of intersections in this artificial old grid that correspond to three (non-colinear) intersections in the new grid and to thereby determine the six coefficients I previously mentioned. Of these it is only 'c' and 'f' that are dependent on having commenced at (0,0) and are therefore also artificial. The remaining four coefficients, 'a', 'b', 'd', 'e', which are independent of this arbitrary starting point are sufficient to determine what you have called the rotation/skewness, though they also express a scale factor change as well.