Find a tangent point on circle?

后端 未结 9 749
别跟我提以往
别跟我提以往 2020-12-09 04:33

Given a line with first end point P(x1,y1) another end point is unknown, intersect with a circle that located at origin with radius R at only one point(tangent) T(x2,y2). An

9条回答
  •  猫巷女王i
    2020-12-09 05:15

    imbrizi's answer assumes that the circle's center is (0,0).

    This is the correct answer in Objective C:

    - (NSArray *)pointsTangentToCircleWithCenter:(CGPoint)centerPoint
                                          radius:(CGFloat)radius
                                      outerPoint:(CGPoint)outerPoint {
    
        float dx = centerPoint.x - outerPoint.x;
        float dy = centerPoint.y - outerPoint.y;
        float dd = sqrt(dx*dx + dy*dy);
        float a = asinf(radius / dd);
        float b = atan2f(dy, dx);
        float t1 = b - a;
        CGPoint tangentPoint1 = CGPointMake(centerPoint.x + radius*sinf(t1), 
                                            centerPoint.y + radius*-cosf(t1));
    
        float t2 = b + a;
        CGPoint tangentPoint2 = CGPointMake(centerPoint.x + radius*-sinf(t2), 
                                            centerPoint.y + radius*cosf(t2));
    
        NSArray *points = @[
                            [NSValue valueWithCGPoint:tangentPoint1],
                            [NSValue valueWithCGPoint:tangentPoint2]
                            ];
        return points;
    }
    

提交回复
热议问题