FORTRAN 代码转换为 C 代码:线段相交检测算法
if(fabs(ALX2-ALX1)>=EPS || fabs(XX[2]-XX[1])>=EPS){ if(fabs(ALX2-ALX1)<EPS && fabs(XX[2]-XX[1])>=EPS){ AK23=(YY[2]-YY[1])/(XX[2]-XX[1]); B23=YY[1]-AK23XX[1]; XX21=ALX1; YY21=AK23XX21+B23; VALUE1=(YY21-YY[2])(YY21-YY[1]); VALUE2=(YY21-ALY1)(YY21-ALY2); VALUE3=(XX21-XX[2])(XX21-XX[1]); if(VALUE1<=0 && VALUE2<=0 && VALUE3<=0){ N1++; B[N1-1][0]=XX21; B[N1-1][1]=YY21; } } if(fabs(ALX2-ALX1)>=EPS && fabs(XX[2]-XX[1])<EPS){ AK=(ALY2-ALY1)/(ALX2-ALX1); BB=ALY1-AKALX1; XX22=XX[1]; YY22=AKXX22+BB; VALUE1=(YY22-YY[2])(YY22-YY[1]); VALUE2=(YY22-ALY1)(YY22-ALY2); VALUE3=(XX22-ALX1)(XX22-ALX2); if(VALUE1<=0 && VALUE2<=0 && VALUE3<=0){ N1++; B[N1-1][0]=XX22; B[N1-1][1]=YY22; } } if(fabs(ALX2-ALX1)>=EPS && fabs(XX[2]-XX[1])>=EPS){ AK23=(YY[2]-YY[1])/(XX[2]-XX[1]); AK=(ALY2-ALY1)/(ALX2-ALX1); if(fabs(AK23-AK)>=EPS){ B23=YY[1]-AK23XX[1]; BB=ALY1-AKALX1; XX23=(BB-B23)/(AK23-AK); T=XX23; YY23=AKT+BB; VALUE1=(XX23-XX[2])(XX23-XX[1]); VALUE2=(YY23-ALY1)(YY23-ALY2); VALUE3=(XX23-ALX1)(XX23-ALX2); if(VALUE1<=0 && VALUE2<=0 && VALUE3<=0){ N1++; B[N1-1][0]=XX23; B[N1-1][1]=YY23; } } } } if(N1==2){ TTT21=B[0][0]; TTT22=B[1][0]; TTT23=B[0][1]; TTT24=B[1][1]; if(TTT21==TTT22 && TTT23==TTT24) N1=1; }
原文地址: http://www.cveoy.top/t/topic/oUDI 著作权归作者所有。请勿转载和采集!