日期:2014-05-17  浏览次数:20888 次

Gis缓冲区类似简单实现

有大神给编个代码吗 求实现 有注释最好 谢谢了!
要求画任意多边形 然后输入A B 出来后面结果
C# gis 缓冲区 角平分线算法

------解决方案--------------------
1楼说的就是各个坐标点跟中心点用三角函数计算放大缩小比例,给你一个求中心点坐标的函数

      
 /// <summary>
        /// 获取中心点坐标
        /// </summary>
        /// <param name="p"></param>
        /// <returns></returns>
        public Point GetCenterPoint(Point[] p)
        {

            Point ptCenter = new Point(0, 0);
            int i, j;
            double ai, atmp = 0, xtmp = 0, ytmp = 0;
            if (p == null)
                throw new ArgumentNullException("获取多边形中心点坐标时传入的参数为空。");
            if(p.Length == 1)
                return p[0];
            if ((p.Length == 2) 
------解决方案--------------------
 (p.Length == 3 && p[0] == p[2]))
                return new PointDD((p[1].X + p[0].X) / 2, (p[1].Y + p[0].Y) / 2);

            int n = p.Length;
            for (i = n - 1, j = 0; j < n; i = j, j++)
            {
                ai = p[i].X * p[j].Y - p[j].X * p[i].Y;
                atmp += ai;
                xtmp += (p[j].X + p[i].X) * ai;
                ytmp += (p[j].Y + p[i].Y) * ai;
            }

            if (atmp != 0)
            {
                ptCenter.X = Convert.ToInt32(xtmp / (3 * atmp));