Here is one possible solution. I thought it was an interesting question so I gave it a try. I tested it a few times to see if it would work, BUT I'm not totally sure I've thought through the azimuth vs. degrees thing. All it does is create 3 lines (2 straight and 1 curved) and uses them to create a polygon. I know you asked for C# - it shouldn't be too hard to convert since most of it is standard stuff. I tested it in UTM zone10, feet.
Option Strict On
Imports ESRI.ArcGIS.DataSourcesGDB
Imports ESRI.ArcGIS.Geometry
Imports ESRI.ArcGIS.Geodatabase
Imports ESRI.ArcGIS
Module Module1
Const dbPath As String = "C:\temp\TestFan.gdb"
Const LayerName As String = "Fans"
Sub Main()
Try
'Get license
ESRI.ArcGIS.RuntimeManager.BindLicense(ESRI.ArcGIS.ProductCode.EngineOrDesktop)
'Get target featureclass for polygon creation
Dim WorkspaceFactory As IWorkspaceFactory = New ESRI.ArcGIS.DataSourcesGDB.FileGDBWorkspaceFactory
Dim Workspace As IFeatureWorkspace = CType(WorkspaceFactory.OpenFromFile(dbPath, 0), IFeatureWorkspace)
Dim pFc As IFeatureClass
pFc = Workspace.OpenFeatureClass(LayerName)
Dim pGeoDataset As IGeoDataset = CType(pFc, IGeoDataset)
Dim pSpatRef As ISpatialReference = pGeoDataset.SpatialReference
Dim pPoly As IPolygon = CreateWedgePoly(pSpatRef, 2000, 40, 30, 1778291, 16892929)
'Create a new feature in the target layer
Dim pF As IFeature = pFc.CreateFeature
pF.Shape = pPoly
pF.Store()
Catch ex As Exception
Debug.Print(ex.Message)
End Try
End Sub
Private Function CreateWedgePoly(ByVal pSpatRef As ISpatialReference, ByVal radius As Double, _
ByVal FanOrientation As Double, ByVal degreesOpen As Double, _
ByVal originX As Double, ByVal OriginY As Double) As IPolygon
' radius
' FanOrientation - azimuth from origin through curved segment apex.
' degreesOpen - total span in degrees
' originX - Origin point x (utm feet for test)
' originY - Origin point y (utm feet for test)
'Create origin point
Dim ptOrigin As IPoint = New Point
ptOrigin.PutCoords(originX, originY)
'Create first point along circle
Dim pt1 As IPoint = New Point
Dim az As Double = 90 - (FanOrientation - (degreesOpen / 2))
pt1.X = radius * Math.Cos(az * Math.PI / 180.0F) + originX
pt1.Y = radius * Math.Sin(az * Math.PI / 180.0F) + OriginY
'Create second point along circle
Dim pt2 As IPoint = New Point
az = 90 - (FanOrientation + (degreesOpen / 2))
pt2.X = radius * Math.Cos(az * Math.PI / 180.0F) + originX
pt2.Y = radius * Math.Sin(az * Math.PI / 180.0F) + OriginY
'Create first straight leg.
Dim pPolyline1 As IPolyline5 = New Polyline
pPolyline1.SpatialReference = pSpatRef
pPolyline1.FromPoint = ptOrigin
pPolyline1.ToPoint = pt1
pPolyline1.SimplifyEx(True)
'Create second straight leg
Dim pPolyline2 As IPolyline5 = New Polyline
pPolyline2.SpatialReference = pSpatRef
pPolyline2.FromPoint = ptOrigin
pPolyline2.ToPoint = pt2
pPolyline2.SimplifyEx(True)
'Create curved leg and QI/Densify to polyline
Dim cirArc As ICircularArc = New CircularArc
cirArc.SpatialReference = pSpatRef
cirArc.PutCoords(ptOrigin, pt1, pt2, esriArcOrientation.esriArcClockwise)
Dim path1 As ESRI.ArcGIS.Geometry.ISegmentCollection
path1 = New ESRI.ArcGIS.Geometry.Path
path1.AddSegment(CType(cirArc, ISegment))
Dim pSegPoly As ESRI.ArcGIS.Geometry.IPolyline
pSegPoly = New ESRI.ArcGIS.Geometry.Polyline
Dim pGeoColl As ESRI.ArcGIS.Geometry.IGeometryCollection
pGeoColl = CType(pSegPoly, IGeometryCollection)
pGeoColl.AddGeometry(CType(path1, IGeometry))
Dim pPolyline3 As IPolyline5 = New Polyline
pPolyline3 = CType(pGeoColl, IPolyline5)
pPolyline3.Densify(-1, 0)
pPolyline3.SimplifyEx(True)
'Union 2 straight and 1 curved leg.
Dim pTempPolyline As ITopologicalOperator = CType(pPolyline1, ITopologicalOperator)
pTempPolyline = CType(pTempPolyline.Union(pPolyline2), ITopologicalOperator)
pTempPolyline = CType(pTempPolyline.Union(pPolyline3), ITopologicalOperator)
'Create polygon and add to feataure class.
Dim pPolygonpointcoll As IPointCollection
Dim pPolygon As IPolygon = New Polygon
pPolygonpointcoll = New Polygon
pPolygonpointcoll.AddPointCollection(CType(pTempPolyline, IPointCollection))
pPolygon = CType(pPolygonpointcoll, IPolygon) 'QI
pPolygon.Close()
Return ppolygon
End Function
End Module