2012-03-05 9 views
0

私はかなり長い間頭を悩ましています。私が若い頃、私は三角法の数学のクラスでもっと注意を払っていたはずですが、ここで私たちは行く:三角法の問題 - 角度を使ってPointFを作成する

私は角度とポイントを持っています。次に、最初の点から200単位離れた角度の方向に2番目の点を配置​​したいと思います。私はAtan2を使用して角度を取得し、次にcosとsinを使用して3番目のポイントを取得します。しかし... ...私はp3.Yのために罪を計算するときに何かが間違っていると思う。

編集:明確にするために、私はP2を除去し、直接角度を用いる:ここ

 PointF p1 = new PointF(20, 20); 
     double angle = 1.3034851559678624f; 

     //Create a new PointF in the same direction, 200 pixels away from p1 
     //{ X = 199,9482, Y = 4,549629 } 
     PointF p3 = new PointF 
     { 
      X = (float)(Math.Cos(Math.PI * angle/180.0) * 200), 
      Y = (float)(Math.Sin(Math.PI * angle/180.0) * 200) 
     }; 

     //This is where I would expect 1.3034851559678624 as the first angle 
     //but I get -4.9073849244837184 
     double angle2 = Math.Atan2(p3.Y - p1.Y, p3.X - p1.X) * 180/Math.PI; 

は、上記の値の視覚的表現です。緑色の線が最初の角度です。

Visual overview

+1

いくつかの点で 'X'値その最終算定基準べきではないのですか? –

+0

私の言葉をそれに取ってはいませんが、私はラジアンでこれらの角度を表現すべきだと思います。 – neeKo

+0

@Damien_The_Unbeliever - どこでXポイントを使用しますか? – BlueVoodoo

答えて

1

問題は現在のコードでは、p3p1。あなたはp3の座標にp1.Xp1.Yを追加する必要があります。

PointF p3 = new PointF 
{ 
    X = p1.X + (float)(Math.Cos(Math.PI * angle/180.0) * 200), 
    Y = p1.Y + (float)(Math.Sin(Math.PI * angle/180.0) * 200) 
}; 
+0

ああ、もちろん!ありがとう。 – BlueVoodoo

0

あなたは角度、その後、カルク罪/ COSを取得するためにATANを使用する必要はありませんでした。 ポイントの座標からsinとcosを直接得ることができます。まあ

cos = (p2.x - p1.x)/length 
sin = (p2.y - p1.y)/length 

http://en.wikipedia.org/wiki/Line_%28geometry%29

+0

ありがとうございますが、私の最終的なコードでは、角度と最初の点だけでなく、この作業を行う方法を理解する必要があります。 – BlueVoodoo

+0

私はatan表現で間違いがあると思います。その角度の完全な表現ではない。値の範囲を探してください。 http://en.wikipedia.org/wiki/Atan2 – gabba

+0

私はあなたがatanを得るときにフラットの四分の一を欠場すると思います。 – gabba

1

P3はあなたがまったく三角法を使用する必要はありませんラインP1-P2にすることになっている場合。 p3の座標は、p1とp2の座標から直接見つけることができます。 p1とp2との間の距離が1000単位であると仮定する。次いで、P1からP3の位置、200個の単位である:

{p1.x+(p2.x-p1.x)*(200/1000),p1.y+(p2.y-p1.y)*(200/1000)} 

2点間の距離が1000でない場合(それはないであろうコースのもの)、それらの間のEuclidean Distanceによってその値を置き換えます。

それでもあなたは比

(p2.y-p1.y)/(p2.x-p1.x) 

あなた1 +45deg角度で原点を通る直線を表す単一の数として傾きを与える計算する線の傾きが必要な場合。ちょっと動き回ると傾きが角度に変わります。線が垂直のとき、つまり比率の分母が0のときは注意してください。

+0

はい、問題は私の最終的なコードでは、私は角度とPointFが与えられるだけです。次に、200台離れた第2のPointFを作成する方法を検討する必要があります。 – BlueVoodoo

+0

@BlueVoodo:あなたの質問はさらに混乱しています。あなたの要件が何であるかを明確に述べるように編集してみませんか?次のようなものがあります:2D点と{angle、distance}を指定して、最初の点から削除した点の2番目の点の{x、y}座標を計算します。なぜあなたは第3のポイントを持っているのか分かりません。あなたは確かに私を混乱させて、おそらくあなた自身も混乱させました。あなたが質問を編集した後、私は戻ってもう一度見ていきます。 –

+0

混乱して申し訳ありません。私は、より明確な説明のために私のコメントを編集しました。私は簡単に角度を取得し、画像で視覚的に表現できるようにp2を使用しました。 – BlueVoodoo