实验报告

时间:45班:1022 ,   6班:1024

时间:45班:1112 ,   6班:1114

时间:45班:1119 ,   6班:1121

时间:45班:123 ,   6班:125

时间:45班:1217 ,   6班:1219

 

第二篇:实验报告4

数字高程模型

实验报告

20##年 06 月 12 日


一、  实验名称

    离散点最小凸包的生成

二、实验目的

1. 理解离散点最小凸包的生成的原理;

2.利用C#代码实现离散点最小凸包的生成;

三、部分代码及结果图

                   图3.1 计算最小凸包调用

     

                     图3.2 函数调用

 private void primary(List<Point> aapoints,List<Point> minpoints)

        {

            int i;

            int j = 0;

            for (i = 0; i < aapoints.Count; i++)

            {

                if ((aapoints[i].X + aapoints[i].Y) < (aapoints[j].X + aapoints[j].Y))

                { j = i; }

            }

            minpoints.Add(aapoints[j]);       //min(X+Y)

            for (i = 0; i < aapoints.Count; i++)

            {

                if ((aapoints[i].X - aapoints[i].Y) < (aapoints[j].X - aapoints[j].Y))

                { j = i; }

            }

            minpoints.Add(aapoints[j]);       //min(X-Y)

            for (i = 0; i < aapoints.Count; i++)

            {

                if ((aapoints[i].X + aapoints[i].Y) > (aapoints[j].X + aapoints[j].Y))

                { j = i; }

            }

            minpoints.Add(aapoints[j]);        //max(X+Y)

            for (i = 0; i < aapoints.Count; i++)

            {

                if ((aapoints[i].X - aapoints[i].Y) > (aapoints[j].X - aapoints[j].Y))

                { j = i; }

            }

            minpoints.Add(aapoints[j]);      //max(X-Y)

           

        }

 private void delete1(List<Point> fistpoint,List<Point> minpoints)

        {

            aim = 0;

            int mm = 1;

            int count = 0;

            for (int i = 0; i < fistpoint.Count;)

            {  

                for (int j = 0; j < minpoints.Count; j++)

                {

                    if (j ==(minpoints.Count - 1))

                    { judge5(minpoints[minpoints.Count-1],minpoints[0], fistpoint[i]); }

                    else

                    { judge5(minpoints[j], minpoints[j+1], fistpoint[i]); }

                    if (aim == mm)

                    { count++; aim = 0; }

                }

                if (count == minpoints.Count)

                {

                    fistpoint.Remove(fistpoint[i]);

                }

                else

                    i++;

                count = 0;

            }

        }

        private void delete2(List<Point> fistpoint, List<Point> minpoints)

        {

            int mm = 3;

            int nn = 3;

            int pp = 3;

            for (int j = 0; j < minpoints.Count;j++)

            {

                for (int i = 0; i < fistpoint.Count; i++)

                {

                    for (int k = j - 1; k <= j + 1; k++)

                    {

                        aim = 2;

                        if ( k== -1)

                        { judge5(minpoints[minpoints.Count - 1], minpoints[0], fistpoint[i]); }

                        else if (k == minpoints.Count-1)

                        { judge5(minpoints[minpoints.Count - 1], minpoints[0], fistpoint[i]); }

                        else if (k == minpoints.Count )

                        { judge5(minpoints[0], minpoints[1], fistpoint[i]); }

                        else

                        { judge5(minpoints[k], minpoints[k + 1], fistpoint[i]); }

                        if (k == (j - 1)) mm = aim;

                        if (k == j) nn = aim;

                        if (k == (j + 1)) pp = aim;

                    }

                    if ((mm == 1) && (nn == 0) && (pp == 1))

                    {

                        minpoints.Add(fistpoint[i]);

                        for (int xx = MinPoints.Count - 1; xx > j; xx--)

                        {

                            MinPoints[xx] = MinPoints[xx-1];

                        }

                        MinPoints[j + 1] = fistpoint[i];

                        continue;

                    }

                    else if (((mm == 1) && (nn == 0) && (pp == 0)) || (mm == 0) && (nn == 0) && (pp == 1))

                    {

                        MinPoints[j+1] = fistpoint[i];

                        continue;

                    }

                }

                mm=nn=pp=3;

            }

        }

        上述确定最基础多边形后,调用delete1和delete2函数,最后得到结果图,如下图3.3

                         图3.3 最下凸包生成图

相关推荐