in reply to Clockwise or Counter-clockwise

To have a concept of clockwise, there needs to be a circle somewhere. The circle needs a center and a radius. The center needs two points, call them X and Y. Call the radius R. So somehow you need three values, X, Y and R.

Two points could be (X1,Y1) and (X2,Y2). There are a *lot* of possible circles that can go through these two points. You need some more information.

Doing geometry with numbers is called "Computational Geometry". It is a challenging but fun kind of programming and is often the source of many bugs in ordinary applications. For example, say you decide to use a third point to help define your circle and compute a radius. If all the points lie on a straight line, the radius will be infinite. So you will need some extra code to check for this.

Since so many problems are often found in geometric code, many people strive to use only the most well-tested algorithms. Even then, lots of testing is required, and many times problems will be found later.

To evaluate clockwise and counter-clockwise, take a look at the atan2 function.

It should work perfectly the first time! - toma

Replies are listed 'Best First'.
Re: Re: Clockwise or Counter-clockwise
by BrowserUk (Patriarch) on Feb 19, 2003 at 06:27 UTC

    To have a concept of clockwise, there needs to be a circle somewhere. The circle needs a center and a radius. The center needs two points, call them X and Y. Call the radius R. So somehow you need three values, X, Y and R.

    +---+---+ +---+---+ | 1 | 2 | | 1 | 4 | +---+---+ +---+---+ | 4 | 3 | | 2 | 3 | +---+---+ +---+---+

    No circles, or radii, but most people would recognise the first as being "numbered clockwise from top left" and the second as "numbered anit-clockwise from top left".

    Likewise these two sets of points describe the same irregular polyon

    my @clockwise = ( [0,3],[3,0],[5,2],[4,3],[3,2],[2,3],[3,4],[2,5] ); my @anticlockwise = ( [2,5],[3,4],[2,3],[3,2],[4,3],[5,2],[3,0],[0,3] +);

    which given the limitations of the medium looks something like this.

    | /\ |/ / |\ \/\ | \ / | \/ -+------

    Examine what is said, not who speaks.

    The 7th Rule of perl club is -- pearl clubs are easily damaged. Use a diamond club instead.

      There's still a circle in your examples. The center is in the middle, where your squares meet. The radius is arbitrary so long as you can establish a direction around your center.

      My point is that even though the objects of interest might not comprise a circle (they could be scattered marbles, for example), a circle is still used to determine their relative positions -- therefore clockwise/counterclockwise orientations.

      This is a subjective projection of the circle. If you run the same problem while looking up from underneath your grid you will get different answers -- or looking at your grid sideways, for that matter. :)

      Update: Just to clarify a bit. What we're really talking about is angular motion around an axis. A circle is just the projection straight down this axis.

      Matt