延長線上の座標の求め方

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
かるて

延長線上の座標の求め方

#1

投稿記事 by かるて » 14年前

2点の座標を、P1(x1,y1)、P2(x2,y2) とし、P2の側に長さL(定数)だけ延長した点P3(x3,y3)の座標を求めるには

x3=(L/√((x2-x1)^2+(y2-y1)^2)+1)x2
y3=(L/√((x2-x1)^2+(y2-y1)^2)+1)y2

と某所に書いてありました。

これを以下のプログラムで走らせたところ、意図しない結果になってしまいました。

float x[3] , y[3] , L;

x[0] = 110.0f;
x[1] = 110.0f;
y[0] = 100.0f;
y[1] = 300.0f;
L = 22.0f;

x[2] = (L / sqrt(pow(( x[1] - x[0] ) , 2 ) + pow(( y[1] - y[0] ) , 2 ) ) + 1.0f ) * x[1];
y[2] = (L / sqrt(pow(( x[1] - x[0] ) , 2 ) + pow(( y[1] - y[0] ) , 2 ) ) + 1.0f ) * y[1];

x[2] = 122
y[2] = 333

点x[0],y[0]と点x[1],y[1]の角度分延長線をL(22.0f)分延長した場合は、

x[2] = 110
y[2] = 322

となって欲しいのですがうまくいきません。
これは式が間違っているのでしょうか、それともプログラムの書き方が間違っているのでしょうか?

可能であれば意図する数値が求められるプログラムを教えていただけると幸いです。
よろしくお願いします。

scottie

Re: 延長線上の座標の求め方

#2

投稿記事 by scottie » 14年前

外分点を考えるとよいのではないでしょうか
P(px,py)、Q(qx,qy)とするとQ方向にL伸ばした点R(rx,ry)の座標は
rx=(-Lpx+(PQ+L)qx)/PQ
ry=(-Lpy+(PQ+L)qy)/PQ
で与えられます。
ただしPQは線分PQの長さです。

かるて

Re: 延長線上の座標の求め方

#3

投稿記事 by かるて » 14年前

scottie さん
教えていただいた式で求められる数値が算出できました!
また、C言語ではなく数学の問題でしたね、申し訳ありません。
ご指南いただきありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る