MapPoint startPoint = MapPointBuilder.CreateMapPoint(0, 0);
MapPoint queryPoint = MapPointBuilder.CreateMapPoint(3.8, 1);
double tangentDirection = 0;
esriArcOrientation orientation = esriArcOrientation.esriArcCounterClockwise;
double startRadius = double.PositiveInfinity;
double endRadius = 1;
esriClothoidCreateMethod createMethod = esriClothoidCreateMethod.ByLength;
double curveLength = 10;
MapPoint pointOnPath;
double radiusCalculated, tangentDirectionCalculated, lengthCalculated, angleCalculated;
PolylineBuilder.QueryClothoidParameters(queryPoint, startPoint, tangentDirection, startRadius, endRadius, orientation, createMethod, curveLength, out pointOnPath, out radiusCalculated, out tangentDirectionCalculated, out lengthCalculated, out angleCalculated, SpatialReferences.WGS84);
// pointOnPath = (3.7652656620171379, 1.0332006103128575)
// radiusCalculated = 2.4876382887687227
// tangentDirectionCalculated = 0.80797056423543978
// lengthCalculated = 4.0198770235802987
// angleCalculated = 0.80797056423544011
queryPoint = MapPointBuilder.CreateMapPoint(1.85, 2.6);
PolylineBuilder.QueryClothoidParameters(queryPoint, startPoint, tangentDirection, startRadius, endRadius, orientation, createMethod, curveLength, out pointOnPath, out radiusCalculated, out tangentDirectionCalculated, out lengthCalculated, out angleCalculated, SpatialReferences.WGS84);
// pointOnPath = (1.8409964973501549, 2.6115979967308132)
// radiusCalculated = 1
// tangentDirectionCalculated = -1.2831853071795867
// lengthCalculated = 10
// angleCalculated = 5
tangentDirection = Math.PI / 4;
orientation = esriArcOrientation.esriArcClockwise;
startRadius = double.PositiveInfinity;
endRadius = 0.8;
createMethod = esriClothoidCreateMethod.ByLength;
curveLength = 10;
Polyline polyline = PolylineBuilder.CreatePolyline(startPoint, tangentDirection, startRadius, endRadius, orientation, createMethod, curveLength, esriCurveDensifyMethod.ByLength, 0.5, SpatialReferences.WGS84);