我有一个由三个给定点组成的圆圈。我怎么知道另一个给定点是否在前三个点形成的圆圈内。它是我需要计算的决定因素吗?那么我需要处理哪些情况?
问问题
393 次
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 回答