2016-08-01 4 views
-2

私は初心者のためにPythonでスクリプトを作成しています。 この例を単純にすると、([0,0]、[1,1])のuv座標を持つ1つのエッジがあるので、45度の角度になります。私は([0,0]、[0,1])という別のエッジを持っているので、その角度は0/360度です。私の目標は、2つのエッジの角度を比較してその差を求めることで、第1のエッジの角度と一致するように第2のエッジの角度を変更することができます。ベクトル計算でこれを行う方法はありますか?エッジ間のマッチング角度

+0

質問が不明です。それらの2つのタプル(エッジ)の最初のリスト(ポイント)が同じであることを確かめますか?あなたはそれらの2つのベクトル間の角度を計算するように求めていますか?両方がイエスならば、コサインの法則またはドットプロダクト(基本的に同じ)を使用します。 atan2()関数を使用することもできますが、それはより複雑です。 –

+0

ポイントはUV座標です。XYZ座標ではなく、エッジはこれらの座標のペアです。 – Kenny

+0

私は3点間のベクトルを比較するためのドットプロダクトのコード例を持っていますが、それらが同じかどうかを確認するには、角度の違いをどのように取得するのか分かりません。 – Kenny

答えて

0

再構築するのが最も簡単で建設的に覚えているのは、IMOです。 a=a.x+i*a.yからb=b.x+i*b.yまでの角度を計算するには、aのコンジュゲートを掛けてゼロ角度からの角度を得ることによって、bを戻します。正の実軸、

arg((a.x-i*a.y)*(b.x+i*b.y)) 

=arg((a.x*b.x+a.y*b.y)+i*(a.x*b.y-a.y*b.x)) 

=atan2(a.x*b.y-a.y*b.x , a.x*b.x+a.y*b.y) 

画面座標がデカルト/複素平面に反対の配向を使用することに注意してくださいは、このように通常の方向の角度を取得するatan2(y,x)からatan2(-y,x)する符号スイッチを使用して変更します。 aから


(ラジアン)ベクトルb回転角度を生成するためにw、あなたがbの指定した長さを得るために再スケールする必要があります

b.x = cos(w)*a.x - sin(w)*a.y 
b.y = cos(w)*a.y + sin(w)*a.x 

を得ることがcos(w)+i*sin(w)を掛け。

+0

私はあなたをフォローしているのか分かりません... aとb、45と0? – Kenny

+0

いいえあなたの質問の数字を使用すると、 'a =(a.x、a.y)=(1,1)'と 'b =(1,0)'となります。一般に、これらのベクトルは回転中心との差です。これは(おそらく) '(0,0)'でした。 – LutzL

関連する問題