C 代码实现:两条线段的交点计算
double XX[4], YY[4];
double ALX1, ALX2, ALY1, ALY2, EPS;
double NTT1, NTT2, NTT3, NTT4;
double AK12, B12, XX11, YY11, VALUE1, VALUE2, VALUE3, BBX, BBY;
double AK, BB, XX12, YY12, XX13, YY13, T;
XX[0] = XN(NTT1);
XX[1] = XN(NTT2);
XX[2] = XN(NTT3);
XX[3] = XN(NTT4);
YY[0] = YN(NTT1);
YY[1] = YN(NTT2);
YY[2] = YN(NTT3);
YY[3] = YN(NTT4);
if (fabs(ALX2-ALX1) >= EPS || fabs(XX[1]-XX[0]) >= EPS) {
if (fabs(ALX2-ALX1) < EPS && fabs(XX[1]-XX[0]) >= EPS) {
AK12 = (YY[1]-YY[0])/(XX[1]-XX[0]);
B12 = YY[0] - AK12*XX[0];
XX11 = ALX1;
YY11 = AK12*XX11 + B12;
VALUE1 = (YY11-YY[1])*(YY11-YY[0]);
VALUE2 = (YY11-ALY1)*(YY11-ALY2);
VALUE3 = (XX11-XX[1])*(XX11-XX[0]);
if (VALUE1 <= 0 && VALUE2 <= 0 && VALUE3 <= 0) {
BBX = XX11;
BBY = YY11;
}
}
if (fabs(XX[1]-XX[0]) < EPS && fabs(ALX2-ALX1) >= EPS) {
AK = (ALY2-ALY1)/(ALX2-ALX1);
BB = ALY1 - AK*ALX1;
XX12 = XX[0];
YY12 = AK*XX12 + BB;
VALUE1 = (YY12-YY[1])*(YY12-YY[0]);
VALUE2 = (YY12-ALY1)*(YY12-ALY2);
VALUE3 = (XX12-ALX1)*(XX12-ALX2);
if (VALUE1 <= 0 && VALUE2 <= 0 && VALUE3 <= 0) {
BBX = XX12;
BBY = YY12;
}
}
if (fabs(ALX2-ALX1) >= EPS && fabs(XX[1]-XX[0]) >= EPS) {
AK = (ALY2-ALY1)/(ALX2-ALX1);
AK12 = (YY[1]-YY[0])/(XX[1]-XX[0]);
if (fabs(AK12-AK) >= EPS) {
B12 = YY[0] - AK12*XX[0];
BB = ALY1 - AK*ALX1;
XX13 = (BB-B12)/(AK12-AK);
T = XX13;
YY13 = AK*T + BB;
VALUE1 = (XX13-XX[1])*(XX13-XX[0]);
VALUE2 = (YY13-ALY1)*(YY13-ALY2);
VALUE3 = (XX13-ALX1)*(XX13-ALX2);
if (VALUE1 <= 0 && VALUE2 <= 0 && VALUE3 <= 0) {
BBX = XX13;
BBY = YY13;
}
}
}
}
原文地址: http://www.cveoy.top/t/topic/oUBg 著作权归作者所有。请勿转载和采集!