【源代码】GIS 点、线缓冲区生成算法的C#实现(V0.95)

这是一个关于GIS中点、线缓冲区生成算法的C#实现源代码分享,包括MathTool.cs、Coordinate.cs、PointBuffer.cs、PolylineBuffer.cs四个部分。代码详细实现了数学工具类、坐标类、点缓冲区边界生成和线缓冲区边界生成算法,适用于GIS领域的缓冲区计算需求。
摘要由CSDN通过智能技术生成

今天将源代码都贴上,请大家多多批评赐教。

广泛希望大家能指出一些错误,谢谢。

以后我会抽空学习一下特殊情况的处理,然后加上去,希望大家多多支持。

源代码结构:

 

源代码分别附上:

1.MathTool.cs

 

/*******************************************************
 * 文档作者:dxj
 * 创建时间:2010.3.7
 * 文档说明:
 *      在GIS中常用的通用数学函数。
 ******************************************************/
using System;
using System.Collections.Generic;
using System.Text;

using DXJ.Teresa.GIS.GeoObject;

namespace DXJ.Teresa.GIS.Utility
{
    /// <summary>
    /// 常用的通用数学函数
    /// </summary>
    public static class MathTool
    {
        /// <summary>
        /// 获取由两个点所形成的向量的象限角度
        /// </summary>
        /// <param name="preCoord">第一个点的坐标</param>
        /// <param name="nextCoord">第二个点的坐标</param>
        /// <returns></returns>
        public static double GetQuadrantAngle(Coordinate preCoord, Coordinate nextCoord)
        {
            return GetQuadrantAngle(nextCoord.X - preCoord.X, nextCoord.Y - preCoord.Y);
        }
        /// <summary>
        /// 由增量X和增量Y所形成的向量的象限角度
        /// </summary>
        /// <param name="x">增量X</param>
        /// <param name="y">增量Y</param>
        /// <returns>象限角</returns>
        public static double GetQuadrantAngle(double x, double y)
        {
            double theta = Math.Atan(y / x);
            if (x > 0 && y > 0) return theta;
            if (x > 0 && y < 0) return Math.PI * 2 + theta;
            if (x < 0 && y > 0) return theta + Math.PI;
            if (x < 0 && y < 0) return theta + Math.PI;
            return theta;
        }
        /// <summary>
        /// 获取由相邻的三个点所形成的两个向量之间的夹角
        /// </summary>
        /// <param name="preCoord"></param>
        /// <param name="midCoord"></param>
        /// <param name="nextCoord"></param>
        /// <returns></returns>
        public static double GetIncludedAngel(Coordinate preCoord, Coordinate midCoord, Coordinate nextCoord)
        {
            double innerProduct = (midCoord.X - preCoord.X) * (nextCoord.X - midCoord.X) + (midCoord.Y - preCoord.Y) * (nextCoord.Y - midCoord.Y);
            double mode1 = Math.Sqrt(Math.Pow((midCoord.X - preCoord.X), 2.0) + Math.Pow((midCoord.Y - preCoord.Y), 2.0));
            double mode2 = Math.Sqrt(Math.Pow((nextCoord.X - midCoord.X), 2.0) + Math.Pow((nextCoord.Y - midCoord.Y), 2.0));
            return Math.Acos(innerProduct / (mode1 * mode2));
        }
        /// <summary>
        /// 获取由两个点所形成的向量的模(长度)
        /// </summary>
        /// <param name="preCoord">第一个点</param>
        /// <param name="nextCoord">第二个点</param>
        /// <returns>由两个点所形成的向量的模(长度)</returns>
        public static double GetDistance(Coordi

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值