#18160: 用斜率計算忽略掉的事


rmp4joxj6 (盧邊談話)

學校 : 中原大學
編號 : 97841
來源 : [27.247.230.6]
最後登入時間 :
2020-10-20 18:00:03
c113. 00378 - Intersecting Lines -- UVa378 | 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);
}

 
#18977: Re:用斜率計算忽略掉的事


froghackervirus@gmail.com (Cow Frog)

學校 : 不指定學校
編號 : 99277
來源 : [210.71.78.241]
最後登入時間 :
2019-12-23 15:08:51
c113. 00378 - Intersecting Lines -- UVa378 | From: [123.194.159.172] | 發表日期 : 2019-08-20 21:09

依個人理解,斜率分母為零時應該不用特別處理吧。在下拙見,請多指教。

 
ZeroJudge Forum