Страница 1 из 1

Сформировать полигон из дуги

Добавлено: 18 мар 2013, 13:49
novice
Есть объект типа CircularArc

Код: Выделить всё

IConstructCircularArc constructCircularArcKWEmulator = new CircularArc() as IConstructCircularArc;
ICircularArc circularArcKWEmulator = constructCircularArcKWEmulator as ICircularArc;
constructCircularArcKWEmulator.ConstructEndPointsAngle(farMap, nearMap, true, Math.Abs(s_Info.Azimuth - s_Info.OpeningAngle) * Math.PI / 180.0);
Как из этого объекта получить массив из, например, 200 точек, чтобы впоследствии по ним построить полигон?

Re: Сформировать полигон из дуги

Добавлено: 18 мар 2013, 13:58
novice
Если у кого-то есть пример с Densify, CircularArc и ISegment на с# скиньте его пожалуйста

Re: Сформировать полигон из дуги

Добавлено: 18 мар 2013, 17:52
novice
Может кому понадобится. Если точность в 200 км не принципиальна, то можно применить следующий подход.
Нарисовать сегмент, его разбить на точки и из них сформировать одну из сторон полигона. Код хреновый, но работает быстро.
работает на порядки быстрее, чем построение всяких ортодромий

Код: Выделить всё

 IConstructCircularArc constructCircularArcKWEmulator1 = new CircularArc() as IConstructCircularArc;
                    ICircularArc circularArcKWEmulator1 = constructCircularArcKWEmulator1 as ICircularArc;
                    constructCircularArcKWEmulator1.ConstructEndPointsAngle(farMap1, nearMap1, true, Math.Abs(s_Info.Azimuth - s_Info.OpeningAngle) * Math.PI / 180.0);

                    ISegment oneLineOfPolygon = (ISegment)circularArcKWEmulator1 as ISegment;
                    ILine[] listSegments = new ILine[10];
                    int myTest = 10;

                    IGeometryBridge whatIsItXZ = new GeometryEnvironment() as IGeometryBridge;
                    whatIsItXZ.Densify(oneLineOfPolygon, 0, ref myTest, ref listSegments);

                    IEnumerator iterator = listSegments.GetEnumerator();
                    while (iterator.MoveNext())
                    {
                        ILine myTestObject = (ILine)iterator.Current;
                        arrayX.Add(myTestObject.FromPoint.X);
                        arrayY.Add(myTestObject.FromPoint.Y);
                    }