2017-04-01 7 views
0

の正しい幾何学的変換を得ることに私はPythonで働いていると私は(x_prev,y_prev) = (1.5, 3)が以前座標と現在(x,y) = (2, 3.2)座標とそれらの間のangle差と私は次のと同じ向きに一定の距離dになるように調整したいました現在の(x,y)座標です。回転式と平行移動式を使用しようとしましたが、適切な答えが得られません。ここでコードは、私が何を試したかです。座標期待トラブルデカルト座標

d = 0.5 
angle = np.arctan2((y - y_prev), (x - x_prev)) 
x_ = x * np.cos(angle) - y * np.sin(angle) + (d * np.sinc(angle_/2)* np.cos(angle/2)) 
y_ = x * np.sin(angle) + y * np.cos(angle) + (d * np.sinc(angle_/2)* np.sin(angle/2)) 

は約(x_,y_) = (2.5, 3.6)電流と同じ向きであるが、それは私が行方不明です何がある間違ったので、座標になります。事前

+0

'np.sinc()'の変数 'angle_'とは何ですか? – Craig

+0

これは誤字です。それは同じ角度です – varun

+0

あなたが何を求めているかは完全にはっきりしていません。 「アングル」とは何ですか?そしてなぜそれを2つのポイントの間に角度差と呼んでいますか?距離 'd'とは何ですか?何から距離?オリエンテーションは何ですか?オリエンテーションは何に比べて?いずれにしても、この質問はプログラミングとは関係なくジオメトリと関係しています。だから、いくつかの数学フォーラムで尋ねられるべきです。 – ImportanceOfBeingErnest

答えて

0

おかげで私は、部分的にあなたの質問が、幾何学的なものであると@ImportanceOfBeingErnestに同意します。しかし、numpyはあなたが最初にやろうとしているすべての三角関数の作業を避けることができるので、私は答えを加えています。何をしたい

(x_prev,y_prev)と3点が同じライン上にあると(x_prev,y_prev)(x_new,y_new)の間の距離が、予め設定されdあるように(x_now,y_now)に基づいてポイント(x_new,y_new)を見つけることです。

適切な2次元ベクトルで作業できる場合は、三角法は必要ありません。ベクトル(x_now,y_now) - (x_prev,y_prev)を正規化して、から移動する必要がある行の方向ベクトルを取得して、(x_new,y_new)になります。

import numpy as np 

x_prev,y_prev = (1.5, 3) 
x_now,y_now = (2, 3.2) 
d = 0.5 

# use 2d arrays for elegant vector operations 
# of course we can directly define these from coordinates if we want to 
p_prev = np.array([x_prev,y_prev]) 
p_now = np.array([x_now,y_now]) 

# compute the unit direction vector for p_new - p_prev 
t = p_now - p_prev 
t /= np.linalg.norm(t) # use Euclidean norm by default 

# p_new is simple now: 
p_new = p_prev + d*t 

print(p_prev) 
print(p_now) 
print(p_new) 

(x_new,y_new)=(1.96423835,3.18569534)上記の結果:numpyのは、あなたがエレガントにこれを処理することができます。あなたのポイントは実際に(x_now,y_now)がからほとんど0.5の距離にあるようなものなので、結果のベクトルは元のものとほとんど変わりません。しかし、とにかく、上記の手順は常に同じ角度で(x_prev,y_prev)から(x_now,y_now)までの一定の距離の新しいポイントを与えます。