日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

VC++ 判断点是否在线段上

發布時間:2025/4/14 c/c++ 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VC++ 判断点是否在线段上 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這算法在一些地方會用到;在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++ 判断点是否在线段上的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。