MoI discussion forum
MoI discussion forum

Full Version: Line order and direction

Show messages:  1-18  19-22

From: Michael Gibson
16 Sep 2020   [#19] In reply to [#16]
Hi Wayne, are these arcs all in the world x/y plane (the Top view's plane)?

So the concept of being CW or CCW is with respect to a plane normal, so I think you'll need to incorporate that.

See if this makes sense:


So you have a point on the arc, and the tangent vector. Make a second vector from the point on the arc to the arc's center point.

If you now take the CrossProduct( tangent, towards_center_vector ), that will generate a normal, either the same as your plane normal for the CCW arc, or opposite it for the CW arc. When comparing normals it's not a good idea to test for total equality, due to tiny roundoffs in floating point mathematics you can easily end up with values like 0.00000000000001 instead of 0, so you want to allow some epsilon/tolerance slack in your test.

Something like:

var eps = 1.0e-10;

function IsEqual( x, y )
{
    return Math.abs( x - y ) < eps;
}

function IsEqual( vec1, vec2 )
{
    return IsEqual( vec1.x, vec2.x ) && IsEqual( vec1.y, vec2.y ) && IsEqual( vec1.z, vec2.z );
}

Or another way you can compare normalized vectors is by dotproduct between them which gives the cosine of the angle between them. So something like

function VectorsAreSameDir( vec1, vec2 )
{
return DotProduct( vec1 /*normalized*/, vec2 /*normalized*/ ) > 0.99984769515639123915 (this number is the cosine of 1 degree).
}

Let me know if that doesn't do what you need.

- Michael

Image Attachments:
wayne_arc_direction.jpg 


From: Michael Gibson
16 Sep 2020   [#20] In reply to [#16]
Hi Wayne, another way you can determine the direction just using 2D points is to make a 2D triangle and then compute the signed area of the triangle:
https://www.quora.com/What-is-the-signed-Area-of-the-triangle?share=1

It will be a positive number for CCW, and a negative number for CW.

- Michael
From: wayne hill (WAYNEHILL5202)
17 Sep 2020   [#21] In reply to [#19]
Hi Michael,

Yes, I am only using the top view plane. The methods you suggested will be looked at in closer detail.

Thank you.
Wayne
From: pressure (PEER)
12 Sep   [#22]
Here's a small update to the orderCurves plugin that works on curves smaller than 1 unit long.

Attachments:
orderCurves.zip


Show messages:  1-18  19-22