gpt4 book ai didi

iphone - 我有一条从圆心到另一点的线。我想找到直线与圆的圆周相交的点

转载 作者:行者123 更新时间:2023-12-03 20:30:50 28 4
gpt4 key购买 nike

我尝试了几种不同的解决方案,但到目前为止还没有成功。

- (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

抱歉链接。我对当前发布图像还不太熟悉。

感谢您的帮助。

最佳答案

将其视为向量问题会更容易。您的第二种方法很接近,但是您没有正确缩放两点之间的向量。在这种情况下,使用归一化向量会更容易,尽管您必须假设直线上两点之间的距离非零。

给定:

double x0 = CIRC_X0; /* x-coord of center of circle */
double y0 = CIRC_Y0; /* y-coord of center of circle */

double x1 = LINE_X1; /* x-coord of other point on the line */
double y1 = LINE_Y1; /* y-coord of other point on the line */

那么两点之间的向量为(vx,vy):

double vx = x1 - x0;
double vy = y1 - y0;

使用单位向量更容易,我们可以通过标准化 (vx,vy) 来获得单位向量:

double vmag = sqrt(vx*vx + vy*vy);
vx /= vmag; /* Assumption is vmag > 0 */
vy /= vmag;

现在,沿线的任意点都可以描述为:

x0 + dist * vx
y0 + dist * vy

其中dist是距中心的距离。圆和直线的交点距中心的距离必须为 CIRC_RADIUS,因此:

double x_intersect = x0 + CIRC_RADIUS * vx;
double y_intersect = y0 + CIRC_RADIUS * vy;

关于iphone - 我有一条从圆心到另一点的线。我想找到直线与圆的圆周相交的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11811660/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com