2011-07-08 11 views
1

私はC++アプリケーションで作業しています。そして、それは私にとって新しいものです。ここでは、線の2つの座標を取得する関数を記述します。私はこれらの座標を処理し、同じ行にある別の点を見つけなければなりません。 私はA(x1,y1) and B(x2,y2)の座標を得ます。 C(x3,y3)の座標を見つける必要があります。 したがって、私は与えられた線の傾きを計算します。C++を使用して行の3番目のポイントを見つける

Double slope = (x1-x2)/(y1-y2);

そして私はポイントから3番目の点の距離を知っています。

Double dis = sqrt(pow(x2-x1) + pow(y2-y1)) * 1.35 ;

私はSlopedisを使用して、新しい座標X3、Y3を見つけたいです。

誰でもこの問題を解決するのに役立つことができます。

実行時に、私はとy3を計算したい生成これら2式を用いて

x3 = slope * y3 -------------------1

dis = sqrt(pow(x3-x1) + pow(y3-y1)) ------------2

、私は数学の一部を使用することができX3を計算すること。

+1

行の傾きは '(x1-x2)/(y1 -y2) 'ただし、(y1-y2)/(x1-x2)' – Mahesh

+0

'Double'を' double'に変更します。 –

+0

'pow'関数で発生させるパワーを指定する必要はありませんか? – user9423368

答えて

0

第1の式"y3 = slope * x3"を第2の式"dis = sqrt(pow(x3-x1) + pow(y3-y1))"に置き換え、両辺を正方形にすると、2次式を使って解くことができる2次式が得られます。置換後

あなたが得る:

dis^2 = (x3-x1)^2 + (slope*x3 - y1)^2 

スクエア両側:取得する最初の式に

x3 = (2*slope*y1+2*x1) +/- sqrt((2*slope*y1+2*x1)^b - 4*(slope^2+1)*(2*y1^2-dis^2))/(2*(slope^2+1)) 

代替のX3:

(slope^2+1)*x3^2 + (-2*slope*y1-2*x1) + 2*y1^2 = dis^2 

は次の式を使用してX3のための解決y3:

y3 = slope * x3 
+0

'y = m * x + q'を使って(このような問題が頻繁に起こるため)、間違ったアプローチです。パラメトリック方程式はよりよくフィットします... – 6502

6

多すぎる数学。

x3 = (x1 - x2) * 1.35 + x2 
y3 = (y1 - y2) * 1.35 + y2 
+0

これは、必要な距離が2点間の距離に比例するため、特定の問題を解決します。しかし、IMOはあまりにも細かすぎる(そして、良い答えが長く、説明しなければならないという考えに対して)。 – 6502

+0

@ 6502:素晴らしい答えの一部は信じられないほど短く...「ああ! "ユーレカ" "やっぱり"の瞬間 - 禅/仏の仏教を考える...; - P –

+0

@トニー:私は同意します。しかし、IMOはそうしたケースの1つではありません。 – 6502

5

それは垂直線のために働く(近垂直線用の悪い作品)はありませんので、あなたがy=m*x+qに基づいて数式を使用しないでくださいy=y(x)あなたは「1.5D」グラフで作業している場合を除き。

あなたのケースで最良のアプローチは、ラインのパラメトリック方程式をdx = x2 - x1dy = y2 - y1がP1からP2に配向方向の単位ベクトルの成分に比例し、代わりに使用される

x = x1 + t * dx 
y = y1 + t * dy 

を使用することですmqを使用して線を定義します(垂直線またはほぼ垂直線に問題がないようにします)。

あなたが特定の距離にポイントが必要な場合は、あなただけの

double dx = x2 - x1; 
double dy = y2 - y1; 
double dist = sqrt(dx*dx + dy*dy); 
dx /= dist; 
dy /= dist; 

と実際の単位ベクトル成分を見つける必要があり、その後、あなたが必要とする点の座標が

double x3 = x1 + prescribed_distance * dx; 
double y3 = y3 + prescribed_distance * dy; 

かありますポイントを希望する側に応じて、-prescribed_distanceを使用してください:P2に向かって、またはそれから離れていますか?

が所定距離は、正規化が必要とされない二点間の現在の距離に比例し、その結果は簡単になる可能性がある場合:

double x3 = x1 + (x2 - x1) * k; 
double y3 = y1 + (y2 - y1) * k; 
kが所定の距離との比である

と2つのポイント間の距離(もう一度、あなたが興味を持っている側に応じて正または負の符号で)。あなたはまた、より高い次元で拡張するのは簡単です式を取得した座標系に依存して人工的特異点の問題を抱えていないに加えて、パラメトリック方程式x=x(t), y=y(t)の代わりに、明示的な方程式y=y(x)を使用することにより

。たとえば、3dラインの場合、基本的には、zの座標を上の公式に同じように追加する必要があります。xy ...

+1

これはまったく非難されていますが、なんらかの理由で "悪い"のために内部の文法$ DANGEROUSLY_RADICAL_POLITICAL_PARTYを設定しました。それを語る正しい方法は、もちろん「うまくいかない」ことです。 –

+1

@Chris Lutz:ありがとうございました。私はイタリア語で、英語は貧弱です。;-) – 6502

+0

私は実際には伝えられませんでした。私はそれが脳の一部だと思った。だから、明らかにそれはあなたが思うほど吸うわけではありません。 –