计算圆上一个点的坐标,沿着圆心和外面的另一个点之间的直线?

时间:2016-11-28 20:51:04

标签: javascript math geometry

这是一张展示问题的图片:

enter image description here

假设我Point A [0,0]Point B [50, 30]。我希望找到Point X的坐标,沿着半径为15的圆,其原点位于Point A,它也位于Point A和{{1}之间的一条线上}}

指出最好的方法吗?

2 个答案:

答案 0 :(得分:3)

由于这已被标记为JavaScript,因此这是一个简单的实现:

// disclaimer: code written in browser
function Point2D(x, y) {
    this.x = x;
    this.y = y;
}

function findCircleInteresction(center, radius, target) {
    var vector = new Point2D(target.x - center.x, target.y - target.y);
    var length = Math.sqrt(Math.pow(vector.x, 2) + Math.pow(vector.y, 2));
    var normal = new Point2D(vector.x / length, vector.y / length);
    var result = new Point2D(center.x + (normal.x * radius), center.y + (normal.y * radius));
    return result;
}

findCircleInteresction(new Point2D(0, 0), 15, new Point2D(50, 30));

Point2D只是一个用xy属性制作对象的类。
findCircleInteresction有三个参数:
  - center圆心的中心
  - radius圆的半径
  - target外面

findCircleInteresction
  - 计算vectorcenter之间的target   - 获得结果length的{​​{1}}   - 计算vector的{​​{1}}(标准化)   - 通过添加圆的中心加上归一化的矢量分量乘以圆的半径,找到矢量与圆相交的点

此代码可能会进行大量优化并且未经测试但我认为它说明了这一想法。

答案 1 :(得分:1)

您可能希望将其视为两个重叠的三角形,一个是边Bx-AxBy-Ay。你想要的是找到X的坐标,它具体是一个边长为Xx-AxXy-Ay的三角形,但是有一个已知的斜边R,这是你的半径圈。请注意,两个三角形的角度相对于x坐标轴都相等。

因此,要获得三角形的角度,请使用arctan(By-Ay/Bx-Ax)现在使用该角度,将其称为T,您可以使用已知半径R来解决较小的腿。< / p>

要获取x坐标,您需要Rcos(T)

要获得y坐标,您需要Rsin(T)

将所有内容整合在一起,即可Xx = Rcos(T)Xy = Rsin(T)

如果您不愿意使用此方法将使用的数学库,您可以使用比率(如Pointy所述)