質問

私は簡単な質問いたします。たような気がすべての答えがなんだかんラップに私の頭の周辺のこの些細な問題です。

与えベクトルv=(x,y)、思いの"一般"に向かう。のいずれかできない','Down','左又は右

ベクターのリエンテーションは'Up'の場合、ベクトルの方向は45 135°になります。"左翼"は135 225℃。"を降りてすぐのところにあ間225 315°になります。権利'には315-45°になります。

んですが、ケアの場合は角度が45,135,225は315°になります。

のではございますが、私はしたくない三角法.きだと思うのだが、単純な解決策です。

と思い解決策が分割の円。こちらはうっています。

if(x > 0 && y > x)
    return Up
if(x > 0 && y > 0 && y < x )
    return Right

... etc ...

基本的には思いが問題の解決を図ります。私の関心は自分のアプローチはこの問題です。

よろしく!

編集 :のベクターに使用しない正規化されます。では任意のベクターペット。単に振りの原点ベクトル(0,0).

役に立ちましたか?

解決

方があるということでもあります。全てを実現する場合はabs(y)>abs(x)、その方向が垂直方向と、それ以外の方向は水平である。場合は、縦向きはyを示します上下、そうでないものづくりの中で回線が切断された場合を示すleft/right.い:

if (abs(y) > abs(x)) {
  if (y > 0) up else down
} else {
  if (x > 0) right else left
}

の45ish角度は常に多少時間が掛かります。

他のヒント

思い思いを避けるtrigがいを利用したことがあり atan2 機能しているのでしょうか。も簡単に使用を決定するの角度ベクトル:

double ldAngle = atan2(vector.y, vector.x) * 180 / PI;

を想定した規格化ベクトル空間(編集: 意味だベクターで構成され ユニットのベクトル としている場合サイトに登録する必要がありますので、お手法が、最も使用されていた2次元ゲームやアニメーション思を確認す真実を表しています。

@ダニエルのアプローチにより優雅なと思う。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top