AForge.Math.Geometry.GeometryTools.GetAngleBetweenLines C# (CSharp) Method

GetAngleBetweenLines() public static method

Calculate minimum angle between two lines measured in [0, 90] degrees range.

It is preferred to use Line.GetAngleBetweenLines if it is required to calculate angle multiple times for one of the lines.

and are the same, /// -OR- and are the same.
public static GetAngleBetweenLines ( IntPoint a1, IntPoint a2, IntPoint b1, IntPoint b2 ) : double
a1 IntPoint A point on the first line.
a2 IntPoint Another point on the first line.
b1 IntPoint A point on the second line.
b2 IntPoint Another point on the second line.
return double
        public static double GetAngleBetweenLines( IntPoint a1, IntPoint a2, IntPoint b1, IntPoint b2 )
        {
            Line line1 = Line.FromPoints( a1, a2 );
            return line1.GetAngleBetweenLines( Line.FromPoints( b1, b2 ) );
        }

Usage Example

Example #1
0
        public PolygonSubType CheckPolygonSubType(List <IntPoint> corners)
        {
            PolygonSubType polygonSubType = PolygonSubType.Unknown;

            PointsCloud.GetBoundingRectangle(corners, out IntPoint minXY, out IntPoint maxXY);
            IntPoint intPoint = maxXY - minXY;
            float    num      = lengthError * (float)(intPoint.X + intPoint.Y) / 2f;

            if (corners.Count == 3)
            {
                float angleBetweenVectors  = GeometryTools.GetAngleBetweenVectors(corners[0], corners[1], corners[2]);
                float angleBetweenVectors2 = GeometryTools.GetAngleBetweenVectors(corners[1], corners[2], corners[0]);
                float angleBetweenVectors3 = GeometryTools.GetAngleBetweenVectors(corners[2], corners[0], corners[1]);
                if (System.Math.Abs(angleBetweenVectors - 60f) <= angleError && System.Math.Abs(angleBetweenVectors2 - 60f) <= angleError && System.Math.Abs(angleBetweenVectors3 - 60f) <= angleError)
                {
                    polygonSubType = PolygonSubType.EquilateralTriangle;
                }
                else
                {
                    if (System.Math.Abs(angleBetweenVectors - angleBetweenVectors2) <= angleError || System.Math.Abs(angleBetweenVectors2 - angleBetweenVectors3) <= angleError || System.Math.Abs(angleBetweenVectors3 - angleBetweenVectors) <= angleError)
                    {
                        polygonSubType = PolygonSubType.IsoscelesTriangle;
                    }
                    if (System.Math.Abs(angleBetweenVectors - 90f) <= angleError || System.Math.Abs(angleBetweenVectors2 - 90f) <= angleError || System.Math.Abs(angleBetweenVectors3 - 90f) <= angleError)
                    {
                        polygonSubType = ((polygonSubType == PolygonSubType.IsoscelesTriangle) ? PolygonSubType.RectangledIsoscelesTriangle : PolygonSubType.RectangledTriangle);
                    }
                }
            }
            else if (corners.Count == 4)
            {
                float angleBetweenLines  = GeometryTools.GetAngleBetweenLines(corners[0], corners[1], corners[2], corners[3]);
                float angleBetweenLines2 = GeometryTools.GetAngleBetweenLines(corners[1], corners[2], corners[3], corners[0]);
                if (angleBetweenLines <= angleError)
                {
                    polygonSubType = PolygonSubType.Trapezoid;
                    if (angleBetweenLines2 <= angleError)
                    {
                        polygonSubType = PolygonSubType.Parallelogram;
                        if (System.Math.Abs(GeometryTools.GetAngleBetweenVectors(corners[1], corners[0], corners[2]) - 90f) <= angleError)
                        {
                            polygonSubType = PolygonSubType.Rectangle;
                        }
                        float num2 = corners[0].DistanceTo(corners[1]);
                        float num3 = corners[0].DistanceTo(corners[3]);
                        if (System.Math.Abs(num2 - num3) <= num)
                        {
                            polygonSubType = ((polygonSubType == PolygonSubType.Parallelogram) ? PolygonSubType.Rhombus : PolygonSubType.Square);
                        }
                    }
                }
                else if (angleBetweenLines2 <= angleError)
                {
                    polygonSubType = PolygonSubType.Trapezoid;
                }
            }
            return(polygonSubType);
        }
All Usage Examples Of AForge.Math.Geometry.GeometryTools::GetAngleBetweenLines