1

与えられた 3 点で形成された円があります。別の特定の点が前の 3 つの点によって形成された円の内側にあるかどうかを知るにはどうすればよいですか? 計算する必要があるのは行列式ですか?では、どのようなケースを処理する必要がありますか?

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

追加: 4 次行列式を計算する一般的なアプローチは、ここではあまり効果的ではないようです: 代わりに、4 列目のマイナー (ここではラプラス式) またはWolphramAlpha 出力からの「代替形式」の 1 つを使用します。

于 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

この式を適用して、点が円の内側にあるかどうかをテストできます。

2 つの円が交差するかどうかをテストするには、中心間の距離が半径の和と差の間にあるかどうかを確認する必要があります。

于 2013-02-25T07:39:20.067 に答える