2017-12-04 7 views
1

私は他の2つのポイント(origina)があるとき、(x,y)ポイント(b)の座標を計算するための一般的なアルゴリズムが必要です。 (angle)、距離(distance)である。ポイントが2つの他のポイント、角度、および距離を与えられた

それらは固体充填ラジアルプログレスインジケータを形成するために、このように使用されるであろう。

  • originはちょうどの一つを越えて配置されているGUIビュー
  • aの中央に配置されます図
  • angleのエッジがb
  • originaから形成された角度でありますは、ビューの端を越えて配置され、aからoriginbまでのパスが閉じられて塗りつぶされると、中央に1点、辺に2行の形をします。
  • distanceは機能的に無限であると考えることができる。計算を簡単にするため、ビューの境界ボックスの周囲に等しいと考えることができます。
Example: 
Where `o` is the origin and `A` is the angle: 

    a 
    . ------+ 
    |  | 
+----|----+ | 
| | | | I can draw more shapes as 
| .A | --+ necessary to fill other 
| o \ | | quadrants. I just need `A` 
|  \ | | 
+-------\-+ | 
     \ | 
      \ | 
      \ | 
      \ 
      .b 

この方法では、angleの値を変更し、ビューを再描画することによって、私はカウントダウンクロックスタイルの形状を有することができます。

一般化されたアルゴリズムでbの座標を見つけるにはどうすればよいですか?は(私は複数の言語でこれを実装することになります)

答えて

2

aが起源の直接権利であり、唯一のb移動した場合: これはbを前提としていa「をリードする」は、角度を覚えて、常に反時計回りに測定されています。あなたの例では、Aは小さな外側の角度ではなく、大きな外側の角度になります。 abにする場合は、代わりに-Aを使用してください。

b = (dist x cos(A), dist x sin(A)) 

aがどこよりも直接の権利である場合は、次のようなアルファに(右とaへの原点からの行に原点から行くことによって形成されたラインとの間に)「開始角度」を追加する必要がありますこの:

beta = angle(right, origin, a) 
b = (dist x cos(A + beta), dist x sin(A + beta)) 

origin(0, 0)ではない場合、あなたはBにこれらの座標を追加する必要があります。

b = (origin_x + (dist x cos(A + beta)), origin_y + (dist x sin(A + beta))) 
+0

「a」はどこでもかまいません。上に直接、右に、少し左に。 –

+0

あなたの例では 'アルファ 'とは何ですか?あなたはそれを私の質問の条件に入れることができますか? –

+1

あなたの質問によく合うようにそれを更新しました – Skusku

関連する問題