0

私はPythonでいくつかのコードを試しています。基本的には、(x、y)座標系でドア(上から見た場合)をシミュレートします。タスクにはポイントのリストが与えられ、もしあれば、どのドアが最初に当たるかを決定します。

ポイントがドアに当たる範囲内にあるかどうかを判断するのは簡単です。ドアは時計回りまたは反時計回りにスイングでき、スイングの範囲がかなり大きく、可変であるため、最初に当たるポイントを決定するのは困難です。 (ラジアン/度の観点から)。問題は主に、ポイントが最初にヒットするためにどのような条件が真である必要があるのか​​わからないことです。

更新:角度は計算されていますが、ドアが1度の場合や、角度180、190、300のポイントに向かって時計回りにスイングする場合などの特殊なケースが心配です。

4

2 に答える 2

2

ドアのヒンジから各ポイントまでの角度を計算します。ドア自体の現在の角度(ドアの端にヒンジ)に最も近い方が、回転時に最初にヒットします。

サイクリングで問題が発生する場合:任意の角度について、360からそれを引いて補数を得ることができることに注意してください。2つのうち小さい方が、それに到達するためのより近い方法です。それで:

  1. 点a1...aNのすべての角度を計算します
  2. それらすべてをドアの角度から差し引いて、差の角度d1...dNを取得します
  3. 各dNをmin(dN、360 --dN)に置き換えて、「より短い」アプローチを取得します
  4. 最小値を選択してください
于 2012-11-08T04:09:01.400 に答える
0

これは、ドアの角度とドアのヒンジに対する各ポイントの角度の違いで考えると簡単にできます。

次に、次の式で角度を見つけます。

length of vector from hinge to door: A
length of vector from hinge to point: B

angle = (A * B)/(A^2 + B^2)
于 2012-11-08T04:14:55.377 に答える