問題タブ [atan2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - XY 座標を角度に変換するための GLSL の堅牢な atan(y,x)
GLSL (具体的には私が使用している 3.00) には 2 つのバージョンがあります
atan()
: atan(y_over_x)
-PI/2、PI/2 の間の角度のみを返すことatan(y/x)
ができますが、4 つの象限すべてを考慮に入れることができるため、角度範囲は -PI からすべてをカバーします。 PI、 atan2()
C++とよく似ています。
atan
2番目を使用してXY座標を角度に変換したいと思います。ただし、atan()
GLSL では、 の場合に処理できないほか、x = 0
あまり安定していません。特に がx
ゼロに近い場合、除算がオーバーフローして結果の角度が反対になる可能性があります (約 PI/2 になるはずの場所で -PI/2 に近い値が得られます)。
atan(y,x)
より堅牢にするために GLSL の上に構築できる優れた単純な実装は何ですか?
c++ - 符号付き Char ATAN2 および ATAN 近似
基本的に、私は 2 つの近似関数を作成しようとしています。どちらの場合も、「x」コンポーネントと「y」コンポーネントを入力し (これらの厄介な n/0 および 0/0 条件に対処するため)、Signed Char 出力を取得する必要があります。ATAN2 の場合、+/-PI の範囲を提供する必要があり、ATAN の場合、範囲は +/-PI/2 である必要があります。
私は昨日ずっと頭を包み込もうとして過ごしました。近似に基づいて全体的に適切なアルゴリズムを見つけるために Excel で遊んだ後:
次のコードを思いつきました:
私の絶望的なことに、実装には 180 度もの誤差があり、その間のほぼすべての場所にも誤差があります。(signed char 形式に変換した後、ライブラリの ATAN2F と比較しました。)
私はこのウェブサイトから一般的な要点を得ました: http://geekshavefeelings.com/posts/fixed-point-atan2
どこが間違っているのか誰か教えてもらえますか? そして、この狂気のない ATAN バリアント (範囲の半分以上を見ているため、より正確なはずです) にどのようにアプローチする必要がありますか。
現在、WindowsでQTクリエーター4.8.1を使用しています。この特定のコードのエンド プラットフォームは、最終的には FPU のないマイクロコントローラーになり、ATAN 機能は使用される主要な機能の 1 つになります。そのため、妥当な誤差 (ATAN2 で +/-2 度、ATAN で +/-1 度。これらは現時点では推測であるため、範囲を広げる可能性がありますが、90 度は絶対に受け入れられません!) を伴う効率が目標です。ゲームの。
事前にすべての助けに感謝します!
編集: 明確にするために、ATAN2 と ATAN の出力は符号付きの char 値に出力されますが、2 つの型の範囲は異なる範囲です。
ATAN2 の範囲は -128 (-PI) から 127 (+PI - PI/128) です。
ATAN の範囲は -128 (-PI/2) から 127 (+PI/2 - PI/256) です。
そのため、2 つの出力値は 2 つの異なるデータ型と見なすことができます。
混乱して申し訳ありません。
EDIT2: 暗黙的な int 数値を明示的に signed char 定数に変換しました。
c++ - SFML atan2 関数と減速
基本的に、このコードを使用した後に何が起こるかというと、船が画面の一番下に直接引き下げられ、地面に重力があるように動作し、何が間違っているのか理解できません
python - 画像回転のための Python 角度計算
デスキューを行うために、最初に画像をわずかに回転させる必要があるアプリケーションに取り組んでいます。
画像の 2 点 (x1, y1) と (x2,y2) の間の垂直線を検出しました。垂直線は完全に垂直ではありません。2 番目の x 座標は、上部の x よりもわずかに小さいかわずかに大きいため、線に傾きがあります。
画像を回転させて線を再検出し、完全に垂直になるように、線の傾きの角度を計算しようとしています。これにはPythonでOpenCVを使用しています。
残念ながら、線の傾きの計算に問題があり、画像の回転が不正確です。
画像の垂直線の傾きを検出する私の関数は次のとおりです。
線が垂直になるように画像を回転させる私のコードは次のとおりです。
しかし、回転角度は 249 度、89 度などと出てきます。
誰かがこの問題の解決策を見つけて、画像の歪みを正しく修正できるようにしてくれれば、それは大歓迎です。
c++ - aTan2 を使用してオブジェクトを目的地に向ける
慣性で目的地に向かって移動するオブジェクトを作成しました。オブジェクトを目的地に向けるのに苦労しています。私のコードは単純です。角度を計算し、それを度に変換し、その角度を Matrix4 Rotate 関数に渡します。これにより、localTransform (シーングラフ) が調整されます。
問題は、オブジェクトが生成された後、無限に回転することです。目標に向かってゆっくりと進みますが、回転し続けます。翻訳なしでテストしましたが、その場で関係なく回転します。私が必要とするのは、オブジェクトがその目的地を向いていることだけです。私の移動/回転機能は正しく機能します。オブジェクトを回転させ、親の回転でオブジェクトをスポーンさせ、その方向に向かいます。GLM ライブラリで 1 対 1 の結果を提供します。
aTan2 で順序を交換し、度の変換を削除して (それは何もしませんが、Rotate 関数は度を取得します)、並進/回転の順序を交換してみました。
localTransform は、回転/スケール/平行移動行列を組み合わせたものです。行 [3] 列 [1] は Y、[3][0] は X です。
これを処理する方法に関するアドバイスはありますか?これはすべて 2D 座標ですが、回転は Z 軸で行われます。
python - math.atan2 を使用した線分の間の角度の計算 (Python)
私は空間分析の問題に取り組んでおり、このワークフローの一部は、接続された線分の間の角度を計算することです。
各線分は 2 つの点のみで構成され、各点には 1 対の XY 座標 (直交座標) があります。これは GeoGebra からの画像です。0 から 180 の範囲で正の角度を取得することに常に関心があります。ただし、入力線分の頂点の順序に応じて、あらゆる種類の角度を取得します。
私が扱う入力データは、座標のタプルとして提供されます。頂点の作成順序によっては、各ライン セグメントの最終/終点が異なる場合があります。Python コードでのケースのいくつかを次に示します。取得する線分の順序はランダムですが、タプルのタプルでは、最初の要素が始点で、2 番目の要素が終点です。DE
たとえば、線分は((1,1.5),(2,2))
、(1,1.5)
座標のタプルの最初の位置にあるため、始点になります。
DE,DF
ただし、間などで同じ角度になるようにする必要がありED,DF
ます。
線の組み合わせを引数として取り、それらの間の角度を計算する小さな関数を作成しました。私はmath.atan2
これに最も適していると思われる を使用しています。
私が得る出力は次のとおりです。
ご覧のとおり、線分の頂点の順序と線分の順序によって異なる値を取得しています。ソース行がどのような関係にあるかを調べて、行を反転させたり、角度を編集したりして、角度を後処理しようとしました。 -119.744 を 60.255 (鋭角) にするべきか、119.744 (鈍角) のままにするべきかなど、もはや判断できません。
math.atan2
受け取った出力角度値を処理して、0 から 180 の範囲の正の値のみを取得する個別の方法はありますか? そうでない場合、他にどのようなアプローチをとるべきですか?
matlab - MatLabで2つの2Dベクトル間の方向角を計算するには?
データの一部を分析するスクリプトを実装しようとしています。3 点 (p1、p2、p3) の位置情報があります。この図のように、ベクトル p1p2 から点 p3 の角度変位を見つけたいと思います。
p3a、p3b、p3c、p3d は、p3 の可能な相対位置を示します。示されているように、ベクトル p1p2 に対する相対位置を表す出力角度の符号が必要です。
私が使用しているコードは次のとおりです(図に適合):
これは、p3 が p3a にある場合に希望どおりに機能し、正しいサイズ (-77 度) の負の角度を与えます。ただし、p3 が p3d にある場合、目的の大きな負の角度ではなく、大きな正の角度 (+150 度) が出力されます。
matlab - 拡張カルマン フィルター - 更新ステップでのエラー
実際に数学的によく理解していなくても、EKF を実装する必要があります。(素晴らしい... 違います...) これまでのところ、私はうまくやっていますが、予測ステップを実装しようとしてから、うまくいきませんでした。
- EKF (赤) を使用するエージェントは、ランダムな方向に発射します
- 最終的に一部の変数 (ポーズ、シグマ、S、K) が NaN になり、シミュレーションが失敗する
コードは、Thrun の「Probabilistic Robotics」ページのコードに基づいています。204. これは、物事を台無しにしているように見えるコードの一部です。
私はまったく無知です...アイデアやヒントをいただければ幸いです。ありがとうございました。
アップデート
エージェントが発砲する理由は、2 つの角度の差を計算するときの「エラー」です。これらは atan2 を使用して計算されます。問題が何であるかはわかっていますが、まだそれを修正する方法がわかりません。
2 つのオブジェクトの atan2 を計算した後、a = 135 と b = 45 という値が得られたとします。90 度と 270 度の両方の可能性についてそれらの差を計算しましたが、エージェントはまだ想定どおりに動作しません。 . 私はこれまでatan2に実際に遭遇したことはありません。atan2 値の差の計算に関する私の理解は間違っていますか? これが私の理解の実例です:
java - Java: 2 点間の角度を決定する
この種の質問が以前に複数回行われたことを知っているので、まずお詫び申し上げます。ただし、他の質問と回答を見ても、自分の状況ではこれを機能させることができませんでした。以下に例を示します。
私が単純に試みているのは、P1 と P2 の間の角度を 0 度が上に示されていると仮定して、2 の間の矢印を正しい方向に向けることができるようにすることだけです。だから私はこのようなことをします...
どちらが -45 で、45 である必要がありますか? ただし、単に P1 を 300,300 (P2 の下) に変更した場合、角度は 0 になるはずですが、-90 として返されるなど、否定的な結果を返すとは考えていません。
だから、これを計算するために私が間違っていることを誰かが指摘できるかどうか疑問に思っていますか、それともこの方法でそれを行うことさえ可能ですか?