我已经尝试了几种不同的解决方案,但到目前为止没有运气。
- (CGPoint)contractLineTemp:(CGPoint)point :(CGPoint)circle :(float)circleRadius {
CGFloat x,y;
x = point.x - circle.x;
y = point.y - circle.y;
CGFloat theta = atan2(x, y);
CGPoint newPoint;
newPoint.x = circle.x + circleRadius * sin(theta);
newPoint.y = circle.y + circleRadius * cos(theta);
return newPoint;
}
- (CGPoint)contractLineTemp:(CGPoint)startPoint :(CGPoint)endPoint :(float)scaleBy {
float dx = endPoint.x - startPoint.x;
float dy = endPoint.y - startPoint.y;
float scale = scaleBy * Q_rsqrt(dx * dx + dy * dy);
return CGPointMake (endPoint.x - dx * scale, endPoint.y - dy * scale);
}
这两种解决方案都有效。如果我将线画到圆的中心,您会看到它与圆正好相交在应该的位置。
http://www.freeimagehosting.net/le5pi
如果我使用上述任一解决方案并根据角度绘制圆的圆周,则它不再朝向圆心。在第二张图片中,这条线应该在圆圈右边缘的中间并向右直行。
http://www.freeimagehosting.net/53ovs
http://www.freeimagehosting.net/sb3b2
抱歉链接。我对当前发布图片很陌生。
谢谢你的帮助。