3

(-6/35)を使って の角度を計算しましたatan2(-6/35)。結果は-9.7275785514016047です。

戻るために、ウィキペディアの式を使用しました

ここに画像の説明を入力

distance = sqrt(6*6+35*35);
angleRelativeToPatternOrigin = -9.7275785514016047;

double  x1 = distance * cos(angleRelativeToPatternOrigin);
double  y1 = distance * sin(angleRelativeToPatternOrigin);

座標を取得できると思っていましたが、取得しました(-6/35) ( -33.895012797701419/10.589056022311761)

は4 つの象限でatan2定義されており、は2でしか定義されていないため、これは間違っていると思います。sincos

これは正しいです?それを正しく行う方法は?

編集:

さて、まず、私の質問を悪い方法で説明して申し訳ありません。私は実際に次のことをしました

int main(int argc, char* argv[])
{
   int x = -6;
   int y = 35;
   double radian = atan2(x,y);  // this was wrong. atan2(y,x) is correct.
   double degree = radian  * (360 / (2 * 3.14159265358979323846));
   double distance = sqrt(6*6+35*35);

   double x1 = distance * cos(degree); // Wrong because I used degree
   double y1 = distance * sin(degree); // instead of radian

   return 0;
}
4

2 に答える 2

4

atan2 関数を使用して角度を取得し、sin & cos を使用してデカルト座標に戻すには、既に述べたように、それらを少し異なる方法で使用する必要があります。

LightnessRacesInOrbit と user38034 の両方が言ったように、atan2 関数は 2 つのパラメーターを取ります。1 番目は y で、2 番目は x です。

次の JS スニペットを検討してください。

var x = -6.0;
var y = 35.0;

var at = Math.atan2(y, x);
console.log(at);

var dist = (x*x) + (y*y);
dist = Math.sqrt(dist);
console.log(dist);

var x1 = dist * Math.cos(at);
var y1 = dist * Math.sin(at);

console.log( {x:x1, y:y1} );

このスニペットからの出力は次のとおりです。

1.740574600763235
35.510561809129406
Object {x: -5.999999999999998, y: 35}
于 2015-12-04T11:29:06.987 に答える
2

あなたの使い方atan2が間違っています。の関数宣言atan2は次のとおりです。

double atan2 (double y, double x);

したがって、角度は次のとおりです。

double angle = atan2(35, -6); // 1.74057 radians or 99.72758 degree
于 2015-12-04T11:22:00.717 に答える