1

我有一个由三个给定点组成的圆圈。我怎么知道另一个给定点是否在前三个点形成的圆圈内。它是我需要计算的决定因素吗?那么我需要处理哪些情况?

4

2 回答 2

3

似乎您想知道答案而不计算圆参数(半径,中心)。因此,您可以将方程用于三角形的外接圆(公式 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

补充:似乎计算四阶行列式的一般方法在这里不是很有效:而是使用第四列的小数(拉普拉斯公式在这里)或WolphramAlpha 输出的“替代形式”之一

于 2013-02-25T11:51:57.773 回答
1

如果内圆的半径小于外圆的半径,则表示内圆在外圆内(以防万一您需要测试另一个圆是否在外圆内)。

这是圆的公式:

x = (Math.cos(angle * Math.PI / 180) * radius) + this.centerX;
y = (Math.sin(angle * Math.PI / 180) * radius) + this.centerY; // in radians

您可以应用此公式来测试点是否在圆内。

要测试两个圆是否相交,您必须查看它们的中心之间的距离是否在它们半径的总和和差之间。

于 2013-02-25T07:39:20.067 回答