最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

POJ1269判断2条直线的位置关系

来源:懂视网 责编:小采 时间:2020-11-09 07:19:25
文档

POJ1269判断2条直线的位置关系

POJ1269判断2条直线的位置关系:题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两
推荐度:
导读POJ1269判断2条直线的位置关系:题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两

题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两

题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。


解题思路:


先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两直线相交。


判断共线: p1p2q1 共线 且 p1p2q2 共线 ,共线用叉乘为 0 来判断,


判断 平行: p1p2 与 q1q2 共线


求交点:


直线p1p2上的点 可表示为 p1+t(p2-p1) , 而交点 又在 直线q1q2上, 所以有 (q2-q1)X (p1 + t(p2-p1 ) - q1 ) =0


解得 交点 t = p1 + ( ((q2-q1) X (q1 - p1)) /( (q2-q1) X(p2-p1) ) *(p2-p1) )

-----------------------------------------------------------------------
注意: double 型数据为0 不能直接==0

------------------------------------------------------------------------

叉乘不满足交换律


const double eps = 1e-8 ;

double add(double x , double y){
 if(fabs(x+y) < eps*(fabs(x) + fabs(y))) return 0 ;
 return x + y ;
}

struct Point{
 double x , y ;
 Point(){}
 Point(double _x , double _y):x(_x),y(_y){}
 Point operator + (Point o){
 return Point(add(x , o.x) , add(y , o.y)) ;
 }
 Point operator - (Point o){
 return Point(add(x , -o.x) , add(y , -o.y)) ;
 }
 Point operator * (double o){
 return Point(x*o , y*o) ;
 }
 double operator ^(Point o){
 return add(x*o.y , -y*o.x) ;
 }
 double dist(Point o){
 return sqrt((x-o.x)*(x-o.x) + (y-o.y)*(y-o.y)) ;
 }
 void read(){
 scanf("%lf%lf" ,&x , &y) ;
 }
};

//判断2条直线的位置关系
int twoline(Point p1 , Point p2 , Point q1 , Point q2 , Point &interp){
 if(fabs((p2-p1) ^ (q1-p1)) < eps &&
 fabs((p2-p1) ^ (q2-p1)) < eps ) return 1 ; //共线
 if(fabs((p2-p1) ^ (q2-q1)) < eps) return 2 ; //平行
 double d1 = (q2 - q1) ^ (q1 - p1) ;
 double d2 = (q2 - q1) ^ (p2 - p1) ;
 double t = d1 / d2 ;
 interp = p1 + (p2 - p1) * t ; // 交点 interp
 return 3 ; // 相交
}

int main(){
 int t , k ;
 Point p1 , p2 , q1 , q2 , interp ;
 puts("INTERSECTING LINES OUTPUT") ;
 cin>>t ;
 while(t--){
 p1.read() , p2.read() ;
 q1.read() , q2.read() ;
 k = twoline(p1 , p2 , q1 , q2 , interp) ;
 if(k == 1) puts("LINE") ;
 else if(k == 2) puts("NONE") ;
 else printf("POINT %.2lf %.2lf\n" , interp.x , interp.y) ;
 }
 puts("END OF OUTPUT") ;
 return 0 ;
}

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

POJ1269判断2条直线的位置关系

POJ1269判断2条直线的位置关系:题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两
推荐度:
标签: 位置 判断 关系
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top