折线的等分点标注法和等间隔标注法

折线的标注法有两种,一种是给定需要标记的点数进行标记,另外一种是给定标记的两点之间的间隔进行标记

首先建立点的结构体

struct polyline {int num;//折线上的点的数目int point_num;//等分点标注法需要标记的点数float space;//等间隔标注法的间隔double coord[1000][2];//折线上点的坐标
};

等分点标注法

等分点标注法首先需要计算两个点之间的间隔,以便后续的计算。首先确定起始点为起始坐标,计算该点与下一个点之间的距离是不是大于或者等于间隔,如果是,计算x,y值,并且将起始点的坐标改变为计算所得的x,y值;如果距离小于间隔,则用间隔减去这两个点之间的距离,并且将起始点坐标改变为下一个坐标点的坐标。这样来进行逐条线段的处理,得到标注点的坐标。

/************************************************************
*函数名:method_A
*主要功能:对单个的一条折线,使用等分点标注法进行标注
*输入参数说明:单个的一条折线的结构体
*输出说明:会将计算所得的标注点的x,y逐个输出
*返回值:无返回值case:pyline要求标记2个点,坐标依次是(0.0,0.0)、(1.0,1.0) 、(4.0,4.0)method_A(pyline);会输出:标记点坐标为:1.333333 1.333333 2.666667 2.666667
***************************************************************/
int method_A(polyline pyline) {double line_lenth = 0;//计算折线的总长度for (int i = 1; i < pyline.num; i++) {line_lenth += sqrt(pow(pyline.coord[i][0] - pyline.coord[i - 1][0],2)+pow(pyline.coord[i][1]-pyline.coord[i-1][1],2));//计算总的长度}double distance = line_lenth / ((__int64)pyline.point_num + 1);//计算每一段的长度double x1 = pyline.coord[0][0];double y1 = pyline.coord[0][1];//起始点的坐标double cur_distance = distance;int out_point = 0;//统计输出点cout << "标记点坐标为:" << endl;for (int j = 1; j < pyline.num; j++) {double x2 = pyline.coord[j][0];double y2 = pyline.coord[j][1];//逐条线段处理while (1) {double line_distance = sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));//当前线段长度不小于每一段的长度if (line_distance >= cur_distance) {double x = (x2 - x1) * cur_distance / line_distance + x1;double y = (y2 - y1) * cur_distance / line_distance + y1;//计算x,y的值out_point++;if (out_point > pyline.point_num) {break;}cout << x << ' ' << y << endl;x1 = x;y1 = y;//改变起始点的坐标cur_distance = distance;}//当前线段长度不足时,考虑下一条线段else {x1 = x2;y1 = y2;//改变起始点的坐标cur_distance -= line_distance;//长度要减去之前线段的长度break;}}}return 0;
}

等间隔标注法

/************************************************************
*函数名:method_B
*主要功能:对单个的一条折线,使用等间隔标注法进行标注
*输入参数说明:单个的一条折线的结构体
*输出说明:会将计算所得的标注点的x,y逐个输出
*返回值:无返回值case:pyline要求间隔是2.0,坐标依次是(0.0,0.0)、(2.0,0.0) 、(5.0,0.0)method_B(pyline);会输出:标记点数量为:3标记点坐标为:0.5 02.5 04.5 0
***************************************************************/
int method_B(polyline pyline){double line_lenth = 0;//计算折线的总长度for (int i = 1; i < pyline.num; i++) {line_lenth += sqrt(pow(pyline.coord[i][0] - pyline.coord[i - 1][0], 2) + pow(pyline.coord[i][1] - pyline.coord[i - 1][1], 2));}double division = line_lenth / pyline.space;double distance = 0;//最边上的点与端点的距离//如果能够整除,distance就是间隔的一半,也就是说先从一半开始标记if ((int)division-division==0) {distance = pyline.space / 2.0;}//如果不能整除,就用下面的公式,计算distanceelse {distance = (line_lenth - (__int64)((int)(line_lenth / pyline.space)) * (__int64)pyline.space) / 2.0;}cout << "标记点数量为:"<<(int)division+1<<endl;double x1 = pyline.coord[0][0];double y1 = pyline.coord[0][1];cout << "标记点坐标为:" << endl;int out_point = 0;//统计输出点for (int j = 1; j < pyline.num; j++) {double x2 = pyline.coord[j][0];double y2 = pyline.coord[j][1];while (1) {//起始距离为我们前面计算的distance,之后变为正常距离double line_distance = sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));if (line_distance >= distance) {double x = (x2 - x1) * distance / line_distance + x1;double y = (y2 - y1) * distance / line_distance + y1;out_point++;cout << x << ' ' << y << endl;x1 = x;y1 = y;distance = pyline.space;//变为正常间隔}//当前线段长度不足时,考虑下一条线段else {x1 = x2;y1 = y2;distance -= line_distance;break;}}}return 0;
}

结语

等间隔标注法其实与等分点标注法有相同之处,只是端点两边的处理不太一样。如果线段长度能够整除间隔,那么最边上的点与端点的距离就是间隔的一半,否则就是余数的一半。计算得到最边上点与端点的距离后,就先以这个距离来标记第一个点,标记完第一个点后,剩下的过程与等分点标注法便一样了。

折线的等分点标注法和等间隔标注法相关推荐

  1. lisp 焊接符号标注_机械制图焊缝标注方法!太全了,收藏了

    原标题:机械制图焊缝标注方法!太全了,收藏了 1.焊缝标注方法 图样上焊缝有两种表示方法,即符号法和图示法. 焊缝标注以符号标注法为主,在必要时允许辅以图示法.比如用连续或断续的粗线表示连续或断续焊缝 ...

  2. ui标注生成html,自动标注一键生成,手动标注自由补充

    熬着夜手动做标注? 用工具自动标注,却被攻城狮追命连环call? 设计稿标注--其实--可以「自动+手动」! 助你五星通过标注大关~ 为什么标注需要「自动+手动」? 手动标注到自动标注,在设计界是有一 ...

  3. R语言ggplot2可视化时间序列数据并突出标注重要时间点数据实战:特殊节点标签标注、特殊区域标注

    R语言ggplot2可视化时间序列数据并突出标注重要时间点数据实战:特殊节点标签标注.特殊区域标注 目录

  4. 相邻帧差法和三帧差法

    相邻帧差法和三帧差法 原文地址:https://blog.csdn.net/dcrmg/article/details/52234929 帧间差分法是通过对视频中相邻两帧图像做差分运算来标记运动物体的 ...

  5. cad线性标注命令_CAD常用标注快捷键和命令

    点击上方 "CAD自学网 "  → 点击右上角"..." → 点选"设为星标 ★ " 为CAD自学网加上星标,即可及时收到干货啦! 左下角阅 ...

  6. python 求和并排序_Python算法教程第三章知识点:求和式、递归式、侏儒排序法和并归排序法...

    本文目录:一.求和式:二.递归式:三.侏儒排序法和并归排序法 微信公众号:geekkr 一.求和式 # 假设有一函数为f(),则在Python中经常使用的求和方法如下. sum(f(i) for i ...

  7. arcgis标注牵引线_解析ArcGis的标注(三)——标注的放置 与 转注记修改

    该"标注"系列博文的标注引擎使用"标准标注引擎(standard label engine)",这个概念如不知道,可不理会,ArcGis默认标注引擎就是它. 写 ...

  8. cad线性标注命令_CAD的标注命令原来可以这样用,学了十几年,终于知道了

    大家都知道我们的CAD有很多快捷键,其中标注命令就是非常重要的一环啦,接下来就给大家介绍下吧,无论你是学建筑呀,还是设计,都能用得上的呢! 1.简单标注 第一个种是简单标注,通过这个标注,我们可以对直 ...

  9. Python算法教程第三章知识点:求和式、递归式、侏儒排序法和并归排序法

    本文目录:一.求和式:二.递归式:三.侏儒排序法和并归排序法 微信公众号:geekkr </br> </br> </br> 一.求和式 # 假设有一函数为f(),则 ...

最新文章

  1. java 语义_Java文件合并变得语义化
  2. 宝塔面板进行ssl配置,显示待域名确认
  3. CPU上电后加载程序的流程 | 基于RK3399
  4. 计算机无法连接无线信号,win7系统连接无线信号时提示Windows无法连接到路由器名称的四种解决方法...
  5. Web前端基础---JQuery的页面加载+选择器+电子时钟案例
  6. 20个it专业术语_DevSecOps这个术语是否必要?
  7. android中搜索对话框,android – 如何使用onSearchRequested()调用搜索对话框
  8. 图论 - 寻找fly真迹
  9. *第八周*数据结构实践项目二【建设链串算法库】
  10. 机器学习模型之集成算法
  11. python安装pdf模块_Python PyPDF2模块安装使用解析
  12. 马哥linux2018目录,2018-01-02 马哥Linux学习笔记—Linux系统基础使用入门
  13. PDF如何裁剪页面,PDF裁剪页面的小技巧
  14. 计算机如何连接wifi台式,台式电脑怎么连接WIFI上网?台式电脑连接无线网络的方法...
  15. 查看字符的所占字节数
  16. Mysql之查看数据库版本
  17. linux 计算程序运行时间
  18. java生成随机密码,包含大小写字母,数字,特殊字符等
  19. CoreMark简介
  20. Support for password authentication was removed on August 13, 2021.解决办法大全

热门文章

  1. IT—Java简历方法论
  2. SpaceX载人龙飞船宇航员进入空间站 太空之旅前半段完成
  3. python_自动化_excel处理
  4. Kaptcha 使用教程
  5. Sorl搭建与中文分词
  6. SHELL脚本之基础网络检查
  7. MySQL 数据库中日期与时间函数 FROM_UNIXTIME(), UNIX_TIME()
  8. 匿名对象调用与使用容器一次性添加多个类的方法
  9. ➷HTML+CSS前端笔记(基础篇-第一部分)
  10. 【转载】天地图、百度、高德、腾讯、Leaflet、openlayers地图图片叠加层切片生成工具使用指南(20191007修改)