最近有需求需要做两直线求交点,看似比较简单,但是需要考虑的问题比较多。。
-(void)showTwoLinePointOfIntersectionPoint1:(CGPoint)point1 point2:(CGPoint)point2 point3:(CGPoint)point3 point4:(CGPoint)point4{
CGFloat x1=point1.x,y1=point1.y,
x2=point2.x,y2=point2.y;
CGFloat x3=point4.x,y3=point3.y,
x4=point4.x,y4=point4.y;
CGFloat k1 = (y1-y2)/(x1-x2);
CGFloat k2 = (y3-y4)/(x3-x4);
CGFloat b1 = y1-k1*x1;
CGFloat b2 = y4-k2*x4;
if (x1==x2&&x3!=x4) {
NSLog(@"x:%f y:%f",x1,k2*x1+b2);
}else if (x3==x4&&x1!=x2){
NSLog(@"x:%f y:%f",x3,k1*x3+b1);
}else if (x3==x4&&x1==x2){
if ((x1==x2==x3==x4)&&(y1==y2==y3==y4)) {
NSLog(@"重合");
}else{
NSLog(@"平行");
}
}else{
if (y1==y2&&y3!=y4) {
NSLog(@"x:%f y:%f",(y1-b2)/k2,y1);
}else if (y3==y4&&y1!=y2){
NSLog(@"x:%f y:%f",(y4-b1)/k1,y4);
}else if (y3==y4&&y1==y2){
if ((x1==x2==x3==x4)&&(y1==y2==y3==y4)) {
NSLog(@"重合");
}else{
NSLog(@"平行");
}
}else{
if (k1==k2){
NSLog(@"平行");
}else{
CGFloat x = (b2-b1)/(k1-k2);
CGFloat y = k2*x+b2;
NSLog(@"x:%f y:%f",x,y);
}
}
}
}