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

GetAngleBetweenVectors() public static method

Calculate angle between to vectors measured in [0, 180] degrees range.
public static GetAngleBetweenVectors ( IntPoint startPoint, IntPoint vector1end, IntPoint vector2end ) : double
startPoint IntPoint Starting point of both vectors.
vector1end IntPoint Ending point of the first vector.
vector2end IntPoint Ending point of the second vector.
return double
        public static double GetAngleBetweenVectors( IntPoint startPoint, IntPoint vector1end, IntPoint vector2end )
        {
            int x1 = vector1end.X - startPoint.X;
            int y1 = vector1end.Y - startPoint.Y;

            int x2 = vector2end.X - startPoint.X;
            int y2 = vector2end.Y - startPoint.Y;

            return Math.Acos( ( x1 * x2 + y1 * y2 ) / ( Math.Sqrt( x1 * x1 + y1 * y1 ) * Math.Sqrt( x2 * x2 + y2 * y2 ) ) ) * 180.0 / Math.PI;
        }

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::GetAngleBetweenVectors