On Nov 16, 2006, at 1:36 PM, CYB wrote: Hi everyone, I have a variable number of objects in a page – for example 4 rectangles- and I need to know which one is the left-top most, (I’m scripting InDesign CS2) so I get the geometric bounds of all this objects and I get a list of lists My typical list looks like {{5.0, 120.0, 40.0, 169.0}, {10.0, 10.0, 50.0, 59.0}, {70.0, 20.0, 110.0, 69.0}, {70.0, 80.0, 110.0, 128.0}} So basically I need to compare the first 2 items (y, x) of every list in that main list, in this example the order (Left/Right, clock wise) is 1.- second list, 2.- first list, 3.- third list, 4.- fourth list I think, at the first moment that it’s pretty simple, but for my disgrace I found that after many hours of try to write an algorithm to to this, I have nothing, :-(( Anyone have something in this way or can someone point me in the right direction? Your help will be appreciated.
The classic solution to this is to calculate the root mean squares of the co-ordinates and sort those. For example:
given {5.0, 120}, {10.0, 10.0}, {70.0, 20.0} and {70.0, 80.0}
you get (5^2 + 120^2)/2, (10^2 + 10^2)/2, (70^2 + 20^2)/2 and (70^2 + 80^2)/2
which translates to: 7212, 100, 2650, and 5650
From here it's easy to see which one is mathematically closest to top left, and which one is furthest.
The biggest issue you'll have is objects that have the same RMS value. For example (working on points for now), is {100, 10} closer to the "top left" than {10,100}. Both are equidistant from the corner, but one is more "left" and the other is more "top". Once you have the RMS values you can look back at the originals to choose whether the lower x or y coordinate has priority.
Working out the clockwise orientation from that is a little trickier. Off hand it probably requires polar coordinates and I can't get my mind around those until I have more coffee.
Andrew :)
|