質問

atan2(y,x)が不連続で180°でスイッチを-180°..0°かを時計回りに回してください。

い地図の値の範囲は0°..360°?

こちらは自分のコード:

CGSize deltaPoint = CGSizeMake(endPoint.x - startPoint.x, endPoint.y - startPoint.y);
float swipeBearing = atan2f(deltaPoint.height, deltaPoint.width);

私は計算の方向にスワイプのタッチイベントのstartPointおよびエンドポイントは、XY点構造体.このコードは、iPhoneでの言語に対応しatan2f()します。

おかげとなるようご理解とご協力をありの両方の一般的な溶液とのコードです。

更新:またerikkallenの回答への機能の良い長さの変数名だ把握で6ヶ月からです。もしその他のiPhone伝.

float PointPairToBearingDegrees(CGPoint startingPoint, CGPoint endingPoint)
{
    CGPoint originPoint = CGPointMake(endingPoint.x - startingPoint.x, endingPoint.y - startingPoint.y); // get origin point to origin by subtracting end from start
    float bearingRadians = atan2f(originPoint.y, originPoint.x); // get bearing in radians
    float bearingDegrees = bearingRadians * (180.0 / M_PI); // convert to degrees
    bearingDegrees = (bearingDegrees > 0.0 ? bearingDegrees : (360.0 + bearingDegrees)); // correct discontinuity
    return bearingDegrees;
}
役に立ちましたか?

解決

(x > 0 ? x : (2*PI + x)) * 360 / (2*PI)

他のヒント

ソリューションモデューロ製

このグループに参加"ボタンをタッチパネルがあります。

degrees = (degrees + 360) % 360;  // +360 for implementations where mod returns negative numbers

説明

手ぶれ補正のアクティブ1 180

まmod意の正数1 180 360、同じ番号をくくることができました。Modここでは確保され正の値として返されますと、同じ値を表示します。

発行体が負う-180-1

使用modこちらの戻り値の範囲は180度359ます。

特別な場合:0-360

使用modと0が返却されますので、安全0-359°ます。

だけで追加360°の場合の応答からatan2未満0°となっています。

はんだり、思い思いにアルゴリズムの研究を行だけを否定す二つのパラメータを追加180°たと言えるのでしょうか。

(追加180°の戻り値する役割を担っているもの0-360範囲で切り替えの角度になります。自身の両方の入力パラメータを切り替えます。)

@erikkallen圏でもないですよね。

theta_rad = atan2(y,x);
theta_deg = (theta_rad/M_PI*180) + (theta_rad > 0 ? 0 : 360);

こうC++:によってどのようfmod実施する日以内以下の条件式)

theta_deg = fmod(atan2(y,x)/M_PI*180,360);

またなにができること:

theta_deg = atan2(-y,-x)/M_PI*180 + 180;

以降、(x,y)と(x,y)で異なる角度を180°になります。

私は2つのソリューションでうすべての組み合わせで正と負をxとy.

1)虐待atan2()

よdocs atan2かのパラメータはxとyできます。ただし、逆にして次の操作が可能です:

double radians = std::atan2(x, y);
double degrees = radians * 180 / M_PI;
if (radians < 0)
{
    degrees += 360; 
}

2)利用atan2()を正しく変換し、その後

double degrees = std::atan2(y, x) * 180 / M_PI;
if (degrees > 90)
{
    degrees = 450 - degrees;
}
else
{
    degrees = 90 - degrees;
}

@Jason S:ご"fmod"変異体では、標準準拠の実装です。Cの基準は明確で、明らかに7.12.10.1のfmod機能):

場合はyがゼロ以外で、同じ符号としてx

このように、

fmod(atan2(y,x)/M_PI*180,360)

は実際は単にデフォルト値が設定され書き換え:

atan2(y,x)/M_PI*180

サ提案します。

そして、自分の書いた文章は:

float rads = atan2(y, x);
if (y < 0) rads = M_PI*2.f + rads;
float degrees = rads*180.f/M_PI;
angle = Math.atan2(x,y)*180/Math.PI;

私式配向角度に0-360

angle + Math.ceil( -angle / 360 ) * 360;

ュニケーションにも利用され mod ()関数で定義されている。

function mod(a, b) {return a - Math.floor (a / b) * b;}

そして、以下の機能により、角度と ini(x,y)終了(x,y) ポイントが得られます。の角度で表される度に正規化され[0,360]℃を目安にしています。-北参照360℃を目安にしています。

    function angleInDegrees(ini, end) {
        var radian = Math.atan2((end.y - ini.y), (end.x - ini.x));//radian [-PI,PI]
        return mod(radian * 180 / Math.PI + 90, 360);
    }

Rパッケージ地球を計算しまbearingRhumb、常に固定された原点とeasting/northing.のeastingとnorthingなければなマトリクスまたはベクトルとなっています。原点を風上昇は0,0.次のコードのような問題を解決すると:

windE<-wind$uasE
windN<-wind$vasN
wind_matrix<-cbind(windE, windN)
wind$wind_dir<-bearingRhumb(c(0,0), wind_matrix)
wind$wind_dir<-round(wind$wind_dir, 0)
theta_rad = Math.Atan2(y,x);
if(theta_rad < 0)
  theta_rad = theta_rad + 2 * Math.PI;    //if neg., add 2 PI to it
theta_deg = (theta_rad/M_PI*180) ;        //convert from radian to degree

//or
theta_rad = Math.Atan2(y,x);
theta_rad = (theta_rad < 0) ? theta_rad + 2 * Math.PI : theta_rad;
theta_deg = (theta_rad/M_PI*180) ;

-1°(-1+360)=359deg
-179deg(-179+360)=181℃

double degree = fmodf((atan2(x, y) * (180.0 / M_PI)) + 360, 360);

この戻りま程度から0°-360°反時計回りに回し、0°では、3時位置に

式の値の範囲は0から360°になります。

f(x,y)=180-90*(1+記号(x))*(1-sign(y^2))-45*(2+サ(x))※サインインする(y)

     -(180/pi())*sign(x*y)*atan((abs(x)-abs(y))/(abs(x)+abs(y)))
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top