我已經嘗試了幾種不同的解決方案,但目前爲止沒有運氣。我有一條線從一個圓的中心點到另一個點。我想找到線與圓的圓周相交的點
- (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
很抱歉的鏈接。我對當前發佈的圖片感興趣。
感謝您的幫助。
我認爲你的罪和cos可能會相反。 – rickster 2012-08-04 20:24:12
沒關係。只需要做一個乾淨的,並重新編譯 – cugrz 2012-08-04 20:29:02