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)); } }
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)); } }