Esempio n. 1
0
        private void SetupTransformFinitePenaltyRanges(
            GeneralizedDistanceTransform2D transform, ShapeEdgePairParams pairParams, ILengthAngleConstraints lengthAngleConstraints)
        {
            Range lengthRange = lengthAngleConstraints.LengthBoundary;
            Range angleRange  = lengthAngleConstraints.AngleBoundary;

            transform.AddFinitePenaltyRangeX(
                new Range(lengthRange.Left * pairParams.MeanLengthRatio, lengthRange.Right * pairParams.MeanLengthRatio));

            if (!angleRange.Outside)
            {
                transform.AddFinitePenaltyRangeY(new Range(angleRange.Left - pairParams.MeanAngle, angleRange.Right - pairParams.MeanAngle));
            }
            else
            {
                transform.AddFinitePenaltyRangeY(new Range(-Math.PI - pairParams.MeanAngle, angleRange.Left - pairParams.MeanAngle));
                transform.AddFinitePenaltyRangeY(new Range(angleRange.Right - pairParams.MeanAngle, Math.PI - pairParams.MeanAngle));
            }
        }
        private void SetupTransformFinitePenaltyRanges(
            GeneralizedDistanceTransform2D transform, ShapeEdgePairParams pairParams, ILengthAngleConstraints lengthAngleConstraints)
        {
            Range lengthRange = lengthAngleConstraints.LengthBoundary;
            Range angleRange = lengthAngleConstraints.AngleBoundary;
            
            transform.AddFinitePenaltyRangeX(
                new Range(lengthRange.Left * pairParams.MeanLengthRatio, lengthRange.Right * pairParams.MeanLengthRatio));

            if (!angleRange.Outside)
                transform.AddFinitePenaltyRangeY(new Range(angleRange.Left - pairParams.MeanAngle, angleRange.Right - pairParams.MeanAngle));
            else
            {
                transform.AddFinitePenaltyRangeY(new Range(-Math.PI - pairParams.MeanAngle, angleRange.Left - pairParams.MeanAngle));
                transform.AddFinitePenaltyRangeY(new Range(angleRange.Right - pairParams.MeanAngle, Math.PI - pairParams.MeanAngle));
            }
        }
Esempio n. 3
0
        private void SetupTransformInterestRanges(GeneralizedDistanceTransform2D transform, ILengthAngleConstraints lengthAngleConstraints)
        {
            Range lengthRange = lengthAngleConstraints.LengthBoundary;
            Range angleRange  = lengthAngleConstraints.AngleBoundary;

            transform.AddInterestRangeX(lengthRange);

            if (!angleRange.Outside)
            {
                transform.AddInterestRangeY(angleRange);

                if (angleRange.Right > 0)
                {
                    if (angleRange.Left > 0)
                    {
                        transform.AddInterestRangeY(new Range(angleRange.Left - Math.PI * 2, angleRange.Right - Math.PI * 2));
                    }
                    else
                    {
                        transform.AddInterestRangeY(new Range(-Math.PI * 2, angleRange.Right - Math.PI * 2));
                        transform.AddInterestRangeY(new Range(angleRange.Left + Math.PI * 2, Math.PI * 2));
                    }
                }
                else
                {
                    transform.AddInterestRangeY(new Range(angleRange.Left + Math.PI * 2, angleRange.Right + Math.PI * 2));
                }
            }
            else
            {
                transform.AddInterestRangeY(new Range(-Math.PI, angleRange.Left));
                transform.AddInterestRangeY(new Range(angleRange.Right, Math.PI));

                if (angleRange.Right > 0)
                {
                    transform.AddInterestRangeY(new Range(angleRange.Right - Math.PI * 2, -Math.PI));
                }
                else
                {
                    transform.AddInterestRangeY(new Range(-Math.PI * 2, -Math.PI));
                    transform.AddInterestRangeY(new Range(angleRange.Right + Math.PI * 2, Math.PI * 2));
                }

                if (angleRange.Left < 0)
                {
                    transform.AddInterestRangeY(new Range(Math.PI, angleRange.Left + Math.PI * 2));
                }
                else
                {
                    transform.AddInterestRangeY(new Range(Math.PI, Math.PI * 2));
                    transform.AddInterestRangeY(new Range(-Math.PI * 2, angleRange.Left - Math.PI * 2));
                }
            }

            // Add all the representations of zero angle
            if (angleRange.IntersectsWith(new Range(-transform.GridStepSizeY * 0.5, transform.GridStepSizeY * 0.5)))
            {
                if (!transform.IsCoordYOfInterest(-Math.PI * 2))
                {
                    transform.AddInterestRangeY(new Range(-Math.PI * 2, -Math.PI * 2));
                }
                if (!transform.IsCoordYOfInterest(0))
                {
                    transform.AddInterestRangeY(new Range(0, 0));
                }
                if (!transform.IsCoordYOfInterest(Math.PI * 2))
                {
                    transform.AddInterestRangeY(new Range(Math.PI * 2, Math.PI * 2));
                }
            }
        }
        private void SetupTransformInterestRanges(GeneralizedDistanceTransform2D transform, ILengthAngleConstraints lengthAngleConstraints)
        {
            Range lengthRange = lengthAngleConstraints.LengthBoundary;
            Range angleRange = lengthAngleConstraints.AngleBoundary;
            
            transform.AddInterestRangeX(lengthRange);

            if (!angleRange.Outside)
            {
                transform.AddInterestRangeY(angleRange);

                if (angleRange.Right > 0)
                {
                    if (angleRange.Left > 0)
                        transform.AddInterestRangeY(new Range(angleRange.Left - Math.PI * 2, angleRange.Right - Math.PI * 2));
                    else
                    {
                        transform.AddInterestRangeY(new Range(-Math.PI * 2, angleRange.Right - Math.PI * 2));
                        transform.AddInterestRangeY(new Range(angleRange.Left + Math.PI * 2, Math.PI * 2));
                    }
                }
                else
                    transform.AddInterestRangeY(new Range(angleRange.Left + Math.PI * 2, angleRange.Right + Math.PI * 2));
            }
            else
            {
                transform.AddInterestRangeY(new Range(-Math.PI, angleRange.Left));
                transform.AddInterestRangeY(new Range(angleRange.Right, Math.PI));

                if (angleRange.Right > 0)
                    transform.AddInterestRangeY(new Range(angleRange.Right - Math.PI * 2, -Math.PI));
                else
                {
                    transform.AddInterestRangeY(new Range(-Math.PI * 2, -Math.PI));
                    transform.AddInterestRangeY(new Range(angleRange.Right + Math.PI * 2, Math.PI * 2));
                }

                if (angleRange.Left < 0)
                    transform.AddInterestRangeY(new Range(Math.PI, angleRange.Left + Math.PI * 2));
                else
                {
                    transform.AddInterestRangeY(new Range(Math.PI, Math.PI * 2));
                    transform.AddInterestRangeY(new Range(-Math.PI * 2, angleRange.Left - Math.PI * 2));
                }
            }

            // Add all the representations of zero angle
            if (angleRange.IntersectsWith(new Range(-transform.GridStepSizeY * 0.5, transform.GridStepSizeY * 0.5)))
            {
                if (!transform.IsCoordYOfInterest(-Math.PI * 2))
                    transform.AddInterestRangeY(new Range(-Math.PI * 2, -Math.PI * 2));
                if (!transform.IsCoordYOfInterest(0))
                    transform.AddInterestRangeY(new Range(0, 0));
                if (!transform.IsCoordYOfInterest(Math.PI * 2))
                    transform.AddInterestRangeY(new Range(Math.PI * 2, Math.PI * 2));    
            }
        }