| From: [119.77.170.142]
|
發表日期:
2019-06-21 14:31
通常用斜率來判定 相交,平行,疊合
m1=(y1-y2)/(x1-x2) , m2=(y3-y4)/(x3-x4) , m3=(y1-y4)/(x1-x4);
if(m1==m2&&m1==m3){
printf("LINE\n");
}else if(m1==m2){
printf("NONE\n");
}else{
x=(-m1*x1+y1+m2*x3-y3)/(m2-m1);
y=(-m1*m2*x1+m1*m2*x3+m2*y1-m1*y3)/(m2-m1);
}
但是有時候用斜率計算會遇到水平或垂直的情況,也就是計算斜率時有可能分母或分子為0,所以要多加幾個判斷式
if( (m1==m2&&m1==m3) || (x1==x2&&x1==x3&&x1==x4) || (y1==y2&&y1==y3&&y1==y4) ){
printf("LINE\n");
}else if( (m1==m2) || (x1==x2&&x3==x4) || (y1==y2&&y3==y4) ){
printf("NONE\n");
}else{
if( x1==x2 && y3==y4 ){
x=x1,y=y3;
}else if( x3==x4 && y1==y2 ){
x=x3,y=y1;
}else{
x=(-m1*x1+y1+m2*x3-y3)/(m2-m1);
y=(-m1*m2*x1+m1*m2*x3+m2*y1-m1*y3)/(m2-m1);
}
printf("POINT %.2lf %.2lf\n",x,y);
}