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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

判断线段相交和交点

發(fā)布時間:2025/3/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 判断线段相交和交点 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

#include <iostream> using namespace std;typedef struct {double m_nPosX;double m_nPosY; }worldMapPos;#define EUSE 1e-15int direction (worldMapPos& p0, worldMapPos& p1, worldMapPos& p2) {return ((p2.m_nPosX - p0.m_nPosX)*(p1.m_nPosY - p0.m_nPosY) - (p1.m_nPosX - p0.m_nPosX)*(p2.m_nPosY - p0.m_nPosY)); }bool on_segment (worldMapPos& p0, worldMapPos& p1, worldMapPos& p2) {int minx, maxx, miny, maxy;minx = min(p0.m_nPosX, p1.m_nPosX);maxx = max(p0.m_nPosX, p1.m_nPosX);miny = min(p0.m_nPosY, p1.m_nPosY);maxy = max(p0.m_nPosY, p1.m_nPosY);if (p2.m_nPosX >= minx && p2.m_nPosX <= maxx && p2.m_nPosY >= miny && p2.m_nPosY <= maxy){return true;}else{return false;} }void getinsectpoint(worldMapPos& a,worldMapPos& b,worldMapPos& c,worldMapPos& d,worldMapPos& p) {double delta,r,u;delta = (b.m_nPosX - a.m_nPosX) * (c.m_nPosY - d.m_nPosY) - (c.m_nPosX - d.m_nPosX) * (b.m_nPosY - a.m_nPosY);if(abs(delta) <= EUSE){p.m_nPosX = 10000;p.m_nPosY = 10000;}else{r = ((c.m_nPosX - a.m_nPosX) * (c.m_nPosY - d.m_nPosY) - (c.m_nPosX - d.m_nPosX) * (c.m_nPosY - a.m_nPosY)) / delta;u = ((b.m_nPosX - a.m_nPosX) * (c.m_nPosY - a.m_nPosY) - (c.m_nPosX - a.m_nPosX) * (b.m_nPosY - a.m_nPosY)) / delta;if((r >= 0 && r <= 1) && (u >= 0 && u <= 1)){p.m_nPosX = a.m_nPosX + r*(b.m_nPosX - a.m_nPosX);p.m_nPosY = a.m_nPosY + r*(b.m_nPosY - a.m_nPosY);}else{p.m_nPosX = 10000;p.m_nPosY = 10000;}} }bool CheckLineMeet (worldMapPos& p1, worldMapPos& p2, worldMapPos& p3, worldMapPos& p4) {int d1, d2, d3, d4;d1 = direction(p3, p4, p1);d2 = direction(p3, p4, p2);d3 = direction(p1, p2, p3);d4 = direction(p1, p2, p4);if (((d1 < 0 && d2 > 0) || (d1 > 0 && d2 < 0)) && ((d3 < 0 && d4 > 0) || (d3 > 0 && d4 < 0))){cout<<"--------AAAAAA---------"<<endl;return true;}else if (d1 == 0 && on_segment(p3, p4, p1)){cout<<"--------BBBBBB---------"<<endl;return true;}else if (d2 == 0 && on_segment(p3, p4, p2)){cout<<"--------CCCCCC---------"<<endl;return true;}else if (d3 == 0 && on_segment(p1, p2, p3)){cout<<"--------DDDDDD---------"<<endl;return true;}else if (d4 == 0 && on_segment(p1, p2, p4)){cout<<"--------EEEEEE---------"<<endl;return true;}else{cout<<"--------FFFFFF---------"<<endl;return false;} }int main() {worldMapPos pa,pb,pc,pd,pp;//cout<<"please input the first line: "<<endl;//cin>>pa.m_nPosX>>pa.m_nPosY>>pb.m_nPosX>>pb.m_nPosY;//cout<<"\n"<<"please input the second line: "<<endl;//cin>>pc.m_nPosX>>pc.m_nPosY>>pd.m_nPosX>>pd.m_nPosY;int posDir[] = {0,0,300,100,1200,0,500,600};pa.m_nPosX = posDir[0];pa.m_nPosY = posDir[1];pb.m_nPosX = posDir[2];pb.m_nPosY = posDir[3];pc.m_nPosX = posDir[4];pc.m_nPosY = posDir[5];pd.m_nPosX = posDir[6];pd.m_nPosY = posDir[7];getinsectpoint(pa,pb,pc,pd,pp);cout<<"point is "<<CheckLineMeet(pa,pb,pc,pd)<<"("<<pp.m_nPosX<<","<<pp.m_nPosY<<")"<<endl;return 0; }



轉(zhuǎn)載于:https://my.oschina.net/u/659405/blog/183233

總結(jié)

以上是生活随笔為你收集整理的判断线段相交和交点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。