目录
一、 程序功能简介
本程序功能主要包括:数据文件(TXT文本文件格式)读取,实现圆曲线计算,带缓和曲线的圆曲线要素计算,道路曲线示意图和成果报告的输出与保存。如图1.1。
图1.1 程序功能简介
二、 算法设计与流程图
2.1算法设计
2.1.1圆曲线计算
通过读取的数据计算计算从每个道路交点处的道路转角,通过转角可以计算各类圆曲线要素。根据两点间距离公式计算圆曲线主点里程,根据道路曲线要素计算主点坐标。最后根据圆曲线上的独立点具有的圆的性质计算各点的线路里程和独立坐标以及线路坐标。
2.1.2带缓和曲线的圆曲线计算
带缓和曲线的圆曲线与圆曲线的主要差别在于在圆曲线两端加设了等长的缓和曲线,因此首先要计算缓和曲线的曲线参数再进行圆曲线的曲线参数要素的计算,而后进行曲线主点里程计算和主点坐标以及主点独立坐标的计算,最后进行线路坐标的计算。
2.1.3 里程桩计算
从起点开始每隔固定设定的距离插入一个里程桩,根据其所在的不同位置分别按照直线上、圆曲线上、缓和曲线上三种不同情形的公式计算曲线计算其坐标。
三、 程序函数与变量说明
3.1 绘图类变量与函数说明
3.1.1变量说明
static double minX;
static double minY;
static double maxX;
static double maxY;//记录画布最大最小值,上同
static double dsx;
static double dsy;//记录绘图比例尺,上同
static double margin;//记录画图边界
static Rectangle rect;
static System.Drawing.Point startPoint, endPoint;//记录鼠标按下、抬起的//位置
static bool mousedown;//记录鼠标是否抬起
3.2.2函数说明
创建画布以及画图范围,将实际距离转换为屏幕距离:
//记录数据中的最大最小值
foreach (Point point in ZDpoints)
{
if (point.x > maxX) maxX = point.x;
if (point.y > maxY) maxY = point.y;
if (point.x < minX) minX = point.x;
if (point.y < minY) minY = point.y;
}
//寻找最大值最小值,确立画布
foreach (Point data in LCZpoints)
{
if (data.x > maxX) maxX = data.x;
if (data.y > maxY) maxY = data.y;
if (data.x < minX) minX = data.x;
if (data.y < minY) minY = data.y;
}
foreach (Point jd in JDpoints)
{
if (jd.x > maxX) maxX = jd.x;
if (jd.y > maxY) maxY = jd.y;
if (jd.x < minX) minX = jd.x;
if (jd.y < minY) minY = jd.y;
}
//寻找最大值最小值,确立画布
dsx = Math.Abs(maxX - minX) / (rect.Height - 2 * margin); //x坐标画到纵轴上
dsy = Math.Abs(maxY - minY) / (rect.Width - 2 * margin); //y坐标要画到横轴上
//确定画图比例尺,将实际距离转换成为屏幕距离
画点通用函数:
foreach (Point point in points)
{
double x = margin + (point.y - minY) / dsy; // y坐标画到横轴,包括dsy需要按照纵轴比例来画
double y = (rect.Height - margin) - (point.x - minX) / dsx; //x坐标画到纵轴,包括dsx需要按照横轴比例来画
g.DrawEllipse(p1, (float)x, (float)y, (float)2, (float)2);
g.FillEllipse(b1, (float)x, (float)y, (float)2, (float)2);
g.DrawString(point.name, f1, b1, (float)x, (float)y);
}
画线通用函数:
for (int i = 1; i < points.Count; i++)
{
double x = margin + (points[i - 1].y - minY) / dsy;
//x坐标画到纵轴,包括dsx需要按照横轴比例来画
double y = (rect.Height - margin) - (points[i - 1].x - minX) / dsx;
// y坐标画到横轴,包括dsy需要按照纵轴比例来画
double x0 = margin + (points[i].y - minY) / dsy;
double y0 = (rect.Height - margin) - (points[i].x - minX) / dsx;
g.DrawLine(p1, (float)x0, (float)y0, (float)x, (float)y);
}
四、程序运行功能截图
五、使用说明
5.1数据说明
道路数据包括两个交点数据和道路起点与终点的数据:每行为点名、X坐标、Y坐标、圆曲线半径、缓和曲线长,如图5.1。
图5.1 数据说明
5.2操作说明
5.2.1 数据读取操作
点击菜单栏中的文件选项卡,选择读取文件或点击工具栏中的打开按钮,均可以实现数据的读取,如图5.2和5.3
图5.2 数据读取操作1
图5.3 数据读取操作2
5.2.2 曲线要素计算操作
单机菜单栏中的计算选项或工具栏中的计算按钮,均可以实现一键计算功能,如图5.4和5.5。
图5.4 数据计算操作1
图5.5 数据计算操作2
5.2.3示意图生成与保存操作
选择菜单栏中的操作选项卡,单击生成示意图或点击工具栏中示意图按钮,均可以实现示意图输出操作,如图5.6和图5.7
图5.6 示意图生成操作1
图5.7 示意图生成操作2
选择菜单栏中的操作选项卡,单击保存示意图或点击工具栏中保存示意图按钮,均可以实现示意图保存操作,如图5.8和图5.9
图5.8 示意图保存操作1
图5.9 示意图保存操作2
5.2.4 结果报告生成与保存操作
选择菜单栏中的操作选项卡,单击生成报告或点击工具栏中报告按钮,均可以实现报告输出操作,如图5.10
图5.10 报告输出操作1
图5.11 报告输出操作2
选择菜单栏中的操作选项卡,单击保存报告或点击工具栏中保存报告按钮,均可以实现报告保存操作,如图5.12和图5.13
图5.12 报告保存操作1
图5.13 报告保存操作2