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
となって欲しいのですがうまくいきません。
これは式が間違っているのでしょうか、それともプログラムの書き方が間違っているのでしょうか?
可能であれば意図する数値が求められるプログラムを教えていただけると幸いです。
よろしくお願いします。
延長線上の座標の求め方
Re: 延長線上の座標の求め方
外分点を考えるとよいのではないでしょうか
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の長さです。
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: 延長線上の座標の求め方
scottie さん
教えていただいた式で求められる数値が算出できました!
また、C言語ではなく数学の問題でしたね、申し訳ありません。
ご指南いただきありがとうございました。
教えていただいた式で求められる数値が算出できました!
また、C言語ではなく数学の問題でしたね、申し訳ありません。
ご指南いただきありがとうございました。