道路曲线要素计算c#小程序

一、 程序功能简介

本程序功能主要包括:数据文件(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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会飞的神里绫华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值