判断线段相交和交点
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é)
- 上一篇: qtp web随机获取下拉框的值
- 下一篇: sharepoint权限操作(记录以备忘