我有一个由三个给定点组成的圆圈。我怎么知道另一个给定点是否在前三个点形成的圆内。这是我需要计算的决定因素吗?那我需要处理的案例是什么?
答案 0 :(得分:3)
似乎您想要在不计算圆参数(半径,中心)的情况下知道答案。因此,您可以使用the equation for the circumcircle of the triangle(公式2),用给定的点坐标替换(x,y)并计算行列式(Det)符号。
重要提示:点x1,x2,x3应按逆时针顺序排列。否则 - 更改标志
| x^2+y^2 x y 1 |
| x1^2+y1^2 x1 y1 1 | = Det
| x2^2+y2^2 x2 y2 1 |
| x3^2+y3^2 x3 y3 1 |
To take mutual orientation of points into account:
Det = Det * ((x1-x3)*(y2-y3)-(y1-y3)*(x2-x3))
If Det = 0 then all four points are concyclic (given point lies at the circle border)
if Det < 0 then point is inside
otherwise it is outside the circle
但我怀疑这种方法可能需要更多的数学运算,然后计算半径和中心点并估算(x-x0)^2+(y-y0)^2 <= R^2
增加: 似乎计算四阶行列式的一般方法在这里不是很有效:而是使用Laplace formula here中的第4列(WolphramAlpha output)或“替代形式”之一的未成年人
答案 1 :(得分:1)
如果内圆的半径小于外圆的半径,这意味着内圆在外圆内(如果你需要测试另一个圆是否在外圆内)。
以下是圆圈的公式:
x = (Math.cos(angle * Math.PI / 180) * radius) + this.centerX;
y = (Math.sin(angle * Math.PI / 180) * radius) + this.centerY; // in radians
您可以应用此公式来测试某个点是否在圆圈内。
要测试两个圆是否相交,您必须查看它们的中心之间的距离是否在它们的半径之和与它们之间的差异。