ArcGIS Pro 3.0 API Reference Guide
ArcGIS.Core.Geometry Namespace / PolylineBuilderEx Class / QueryClothoidParameters Method
The query point. The curve paramters are reported for the point on the polyline that is closest to the query point.
The start point of the polyline.
The tangent direction of the spiral, north azimuth, at the first point of the spiral. The unit of the azimuth is radians.
The radius at the start of the spiral. The radius must be greater than zero. Double.Infinity is a valid value for the radius.
The radius at the end of the spiral. The radius must be greater than zero. Double.Infinity is a valid value for the radius.
The orientation of the spiral.
The method of creation. ClothoidCreateMethod.ByLength signifies that lengthOrAngle specifies the length of the entire spiral. ClothoidCreateMethod.ByAngle signifies that lengthOrAngle specifies the angle, in radians, measuring the span of the arc from the start to the end of the clothoid path.
Either the length of the clothoid or the central angle of the clothoid as specified by createMethod.
The returned point on the clothoid.
The end radius of the spiral at pointOnPath.
The tangent direction of the spiral, north azimuth, at the end point of the spiral. The unit of the azimuth is radians.
The length of the spiral.
The end angle of the spiral.
(Optional) The spatial reference of the polyline. The default value is null.
Example

In This Topic
    QueryClothoidParameters Method
    In This Topic
    Queries parameters to be used when creating an instance Polyline or PolylineBuilderEx class that is a linear approximation to a clothoid. This method must be called on the MCT. Use QueuedTask.Run.
    Syntax

    Parameters

    queryPoint
    The query point. The curve paramters are reported for the point on the polyline that is closest to the query point.
    startPoint
    The start point of the polyline.
    startTangentDirection
    The tangent direction of the spiral, north azimuth, at the first point of the spiral. The unit of the azimuth is radians.
    startRadius
    The radius at the start of the spiral. The radius must be greater than zero. Double.Infinity is a valid value for the radius.
    endRadius
    The radius at the end of the spiral. The radius must be greater than zero. Double.Infinity is a valid value for the radius.
    orientation
    The orientation of the spiral.
    createMethod
    The method of creation. ClothoidCreateMethod.ByLength signifies that lengthOrAngle specifies the length of the entire spiral. ClothoidCreateMethod.ByAngle signifies that lengthOrAngle specifies the angle, in radians, measuring the span of the arc from the start to the end of the clothoid path.
    lengthOrAngle
    Either the length of the clothoid or the central angle of the clothoid as specified by createMethod.
    pointOnPath
    The returned point on the clothoid.
    radiusOut
    The end radius of the spiral at pointOnPath.
    tangentDirectionOut
    The tangent direction of the spiral, north azimuth, at the end point of the spiral. The unit of the azimuth is radians.
    lengthOut
    The length of the spiral.
    angleOut
    The end angle of the spiral.
    spatialReference
    (Optional) The spatial reference of the polyline. The default value is null.
    Exceptions
    ExceptionDescription
    This method or property must be called within the lambda passed to QueuedTask.Run.
    Remarks
    A clothoid, also known as an Euler spiral, is a curve such that its curvature is equal to a constant times its length. Curvature is a value that measures how curved or flat the curve is at a point. The larger the curvature, the more flat the curve is. The curvature is equal to the reciprocal of the radius. If the radius is infinity, then the curvature is zero. i.e. flat.

    Shown below is a clothoid with startTangentDirection = 0, startRadius = double.PositiveInfinity, endRadius = 1, orientation = ArcOrientation.ArcCounterClockwise, createMethod = ClothoidCreateMethod.ByLength, and lengthOrAngle = 10.

    Clothoid1

    Here is a clothoid with startTangentDirection = Math.PI / 4, startRadius = double.PositiveInfinity, endRadius = 0.8, orientation = ArcOrientation.ArcClockwise, createMethod = ClothoidCreateMethod.ByLength, and lengthOrAngle = 10.

    Clothoid2

    Now here is a clothoid such that the start radius is smaller than the end radius. It has startTangentDirection = Math.PI / 3, startRadius = 2, endRadius = 10, orientation = ArcOrientation.ArcClockwise, createMethod = ClothoidCreateMethod.ByLength, and lengthOrAngle = 20.

    Clothoid3
    Example
    Construct a Clothoid by Angle
    MapPoint startPoint = MapPointBuilderEx.CreateMapPoint(0, 0);
    double tangentDirection = Math.PI / 6;
    ArcOrientation orientation = ArcOrientation.ArcCounterClockwise;
    double startRadius = double.PositiveInfinity;
    double endRadius = 0.2;
    ClothoidCreateMethod createMethod = ClothoidCreateMethod.ByAngle;
    double angle = Math.PI / 2;
    CurveDensifyMethod densifyMethod = CurveDensifyMethod.ByLength;
    double densifyParameter = 0.1;
    
    Polyline polyline = PolylineBuilderEx.CreatePolyline(startPoint, tangentDirection, startRadius, endRadius, orientation, createMethod, angle, densifyMethod, densifyParameter, SpatialReferences.WGS84);
    
    int numPoints = polyline.PointCount;
    MapPoint queryPoint = polyline.Points[numPoints - 2];
    
    MapPoint pointOnPath;
    double radiusCalculated, tangentDirectionCalculated, lengthCalculated, angleCalculated;
    
    PolylineBuilderEx.QueryClothoidParameters(queryPoint, startPoint, tangentDirection, startRadius, endRadius, orientation, createMethod, angle, out pointOnPath, out radiusCalculated, out tangentDirectionCalculated, out lengthCalculated, out angleCalculated, SpatialReferences.WGS84);
    
    Construct a Clothoid by Length
    MapPoint startPoint = MapPointBuilderEx.CreateMapPoint(0, 0);
    MapPoint queryPoint = MapPointBuilderEx.CreateMapPoint(3.8, 1);
    double tangentDirection = 0;
    ArcOrientation orientation = ArcOrientation.ArcCounterClockwise;
    double startRadius = double.PositiveInfinity;
    double endRadius = 1;
    ClothoidCreateMethod createMethod = ClothoidCreateMethod.ByLength;
    double curveLength = 10;
    MapPoint pointOnPath;
    double radiusCalculated, tangentDirectionCalculated, lengthCalculated, angleCalculated;
    
    
    PolylineBuilderEx.QueryClothoidParameters(queryPoint, startPoint, tangentDirection, startRadius, endRadius, orientation, createMethod, curveLength, out pointOnPath, out radiusCalculated, out tangentDirectionCalculated, out lengthCalculated, out angleCalculated, SpatialReferences.WGS84);
    
    pointOnPath = MapPointBuilderEx.CreateMapPoint(3.7652656620171379, 1.0332006103128575);
    radiusCalculated = 2.4876382887687227;
    tangentDirectionCalculated = 0.80797056423543978;
    lengthCalculated = 4.0198770235802987;
    angleCalculated = 0.80797056423544011;
    
    queryPoint = MapPointBuilderEx.CreateMapPoint(1.85, 2.6);
    
    PolylineBuilderEx.QueryClothoidParameters(queryPoint, startPoint, tangentDirection, startRadius, endRadius, orientation, createMethod, curveLength, out pointOnPath, out radiusCalculated, out tangentDirectionCalculated, out lengthCalculated, out angleCalculated, SpatialReferences.WGS84);
    
    pointOnPath = MapPointBuilderEx.CreateMapPoint(1.8409964973501549, 2.6115979967308132);
    radiusCalculated = 1;
    tangentDirectionCalculated = -1.2831853071795867;
    lengthCalculated = 10;
    angleCalculated = 5;
     
    tangentDirection = Math.PI / 4;
    orientation = ArcOrientation.ArcClockwise;
    startRadius = double.PositiveInfinity;
    endRadius = 0.8;
    createMethod = ClothoidCreateMethod.ByLength;
    curveLength = 10;
    
    Polyline polyline = PolylineBuilderEx.CreatePolyline(startPoint, tangentDirection, startRadius, endRadius, orientation, createMethod, curveLength, CurveDensifyMethod.ByLength, 0.5, SpatialReferences.WGS84);
    
    Requirements

    Target Platforms: Windows 11, Windows 10, Windows 8.1

    See Also