这算法在一些地方会用到;在GIS中也有;

新建一个单文档工程;

先把窗口标题改一下;如下图定位到文档类OnNewDocument函数;

定位到OnNewDocument()函数,添加setTitle一行;

把如下的C语言函数加到视类CPP文件的尾部;

int PointIsOnSegment(POINT p, POINT a, POINT b)
{Vector AP = VectorConstruct(p, p);Vector AB = VectorConstruct(a, b);if(CrossProduct(AP, AB) == 0 && p.x>=min(a.x, b.x) && p.x <=max(a.x, b.x) && p.y>=min(a.y, b.y) && p.y<=max(a.y, b.y)){return 1;}else{return 0;}
}Vector VectorConstruct(POINT a, POINT b)
{Vector v;v.x = b.x - a.x;v.y = b.y - a.y;return v;
}double CrossProduct(Vector a, Vector b)
{return a.x * b.y - a.y * b.x;
}

结构体定义和函数声明加到视类CPP文件的头部;

struct Vector{int x;int y;
};Vector VectorConstruct(POINT , POINT );
double CrossProduct(Vector , Vector );
int PointIsOnSegment(POINT , POINT , POINT );

视类OnDraw函数如下;

void CPttestView::OnDraw(CDC* pDC)
{CPttestDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereCString str1;POINT pt1;POINT pt2;pt1.x=50;pt1.y=50;pt2.x=250;pt2.y=250;    pDC->MoveTo(pt1);pDC->LineTo(pt2);int zxs = PointIsOnSegment(pt1, pt1, pt2);str1.Format("%d",zxs);pDC->TextOut(400,50,str1);POINT pt3;pt3.x=60;pt3.y=260;zxs = PointIsOnSegment(pt3, pt1, pt2);str1.Format("%d",zxs);pDC->TextOut(400,100,str1);POINT pt4;pt4.x=60;pt4.y=1600;zxs = PointIsOnSegment(pt4, pt1, pt2);str1.Format("%d",zxs);pDC->TextOut(400,150,str1);POINT pt5;pt5.x = 60;pt5.y =160;zxs = PointIsOnSegment(pt5, pt1, pt2);str1.Format("%d",zxs);pDC->TextOut(400,200,str1);
}

先画一下线段;然后判断几个点看一下;

PointIsOnSegment(POINT p, POINT a, POINT b),  a、b是线段端点,p是要判断的点;

先判断端点,端点肯定在线段上,输出1;

再判断(60,260),不在,输出0;

再判断(60,1600),不在,输出0;

再判断(60,160),输出1,那么此点在线段上;

但是感觉还有问题;如果(60,160)在的话,看上去(60,161)应该不在了; 判断(60,161)还是输出1;可能是计算的四舍五入,结构体Vector的成员可能应定义为double;下回再整;

基本代码和判断原理参见:

C语言平面几何3-点是否在线段上_xiaoshe的专栏-CSDN博客

VC++ 判断点是否在线段上相关推荐

  1. 高德地图API开发二三事(一)如何判断点是否在折线上及引申思考

    最近使用高德地图 JavaScript API 开发地图应用,提炼了不少心得,故写点博文,做个系列总结一下,希望能帮助到LBS开发同胞们. 项目客户端使用高德地图 JavaScript API,主要业 ...

  2. 线段的逆时针方向(顺时针、正上方、正下方、线段上)、相交判断(图解)

    逆时针方向 给定3个点,构造出从同一起点的两条线段,判断两条线段的关系 这个关系包括逆时针.顺时针.重合,其中重合又包括点在线段正上方.正下方情况! 图示 图中都是以p0为源点,p0p1为基准线,判断 ...

  3. java如何判断一个点在一条线段上

    第一步:数学思路思考: 首先肯定是要先证明该点是在一条直线上,我在上篇文章有介绍,可以去看一下,证明一个点在一条直线上,然后去想如何证明一个点在一条线段上,学数学的时候我们知道,如果一个点在一条线段上 ...

  4. (计算几何)判断一个点是否在线段上

    累加器传送门: http://blog.csdn.net/NOIAu/article/details/71775000 这个问题需要用到向量的叉积性质,下面先从百度截一些语句来介绍一下 用向量的叉积来 ...

  5. POJ 1584 A Round Peg in a Ground Hole 判断凸多边形,点到线段距离,点在多边形内

    ACM博客_kuangbin POJ 1584 A Round Peg in a Ground Hole(判断凸多边形,点到线段距离,点在多边形内) A Round Peg in a Ground H ...

  6. Java黑皮书课后题第3章:*3.34(几何:线段上的点)编程练习题3.32显示了如何测试一个点是否在一个无限长的直线上。修改3.32测试一个点是否在一个线段上。编写程序,输入三个点坐标,显示在否线段

    *3.34(几何:线段上的点)编程练习题3.32显示了如何测试一个点是否在一个无限长的直线上.修改3.32测试一个点是否在一个线段上.编写程序,输入三个点p0 p1 p2坐标,显示p2在否线段p0p1 ...

  7. Java黑皮书课后题第3章:*3.32(几何:点的位置)给定一个从点p0(x0,y0)到p1(x1,y1)的有向线段,可以用以下公式判定定点p2(x2, y2)是在线段的左侧、右侧,或者在该线段上

    *3.32(几何:点的位置)给定一个从点p0(x0,y0)到p1(x1,y1)的有向线段,可以用以下公式判定定点p2(x2, y2)是在线段的左侧.右侧,或者在该线段上 题目 题目概述 运行示例 代码 ...

  8. VC++判断文件或文件夹是否存在(转)

    VC++判断文件或文件夹是否存在 在Windows应用项目中,几乎总会需要用到一些文件系统相关的函数,如:判断文件是否存在,判断文件夹是否为空,删除文件夹及其所有子项,计算文件夹的大小,等等.不知为何 ...

  9. 如何判断点是否在圆弧上

    如何判断点是否在圆弧上 已知一个圆弧三点,A(起点),B(中点),C(结束点). 可以求出圆心.半径 红色的分别是圆上的起点.中点.结束点. 1.首先判断圆心到某点P的距离,是否等于半径. 如果不等于 ...

最新文章

  1. shell脚本求和_【零基础学云计算】Shell编程之case语句与循环语句
  2. 整理一下自己手撸的博客
  3. Nat. Biotechnol | PHATE:高维生物数据的可视化方法
  4. php修改网页打印纸张 份数,打印机上复印10份怎么设置
  5. 好用的记事本_推荐一款可设定定时提醒的电脑桌面悬挂记事本便签软件
  6. jquery post 同步异步总结
  7. angular示例_用示例解释Angular动画
  8. mysqldump 备份原理8
  9. svpwm仿真_【好物推荐】《现代永磁同步电机控制原理及MATLAB仿真》
  10. java实例摘要(三)
  11. 转载:LOG_ARCHIVE_DEST_n参数属性——DATA GUARD概念和管理
  12. Liunx服务管理(Centos)
  13. 企业如何有效抵御匿名化工具带来的威胁
  14. Pulsar较Kafka的优势
  15. Android 跑马灯效果与EditText冲突
  16. Java硬核福利,实战虚拟机+Springboot+缓存,java电子书教材下载
  17. MES生产管理系统中,看板管理究竟是什么
  18. C#批量提取DXF文件中的尺寸,公差和形位公差
  19. 2019前端书籍推荐,前端PDF书籍,前端书籍下载
  20. 上古卷轴5怎么加补丁_上古卷轴5:想要装MOD的话,小编教你怎么做!

热门文章

  1. 异步任务AsyncTask
  2. 四阶龙格库塔法的基本思想_SIR模型计算基本再生数R0
  3. unity game和scene效果不一样_都说水泥漆和乳胶漆只是叫法不一样,对房子装修效果一样,事实呢...
  4. linux服务器oracle数据库导出dmp文件功能演示,备份数据库命令。exp命令显示command not found解决方法,EXP-00028: 无法打开dmp进行写入问题解决
  5. C# 学习笔记(13)自己的串口助手
  6. poj 2115 C Looooops(扩展欧几里德算法)
  7. 从传递函数到差分方程的转换
  8. opencv矩阵运算(1)
  9. Java实现swap交换(可能跟网上的一些方法不太一样)
  10. GMM_example(3)