座標を求めるには?


トマト  2007-11-01 22:57:05  No: 28172

OSはWindowsXP、Delphi7 でプログラムを作成します。
Delphiには直接関係内のですが、教えてください。

点P1(X1,Y1)、P2(X2,Y2)で結ばれた直線があり、
この直線上で点(X1,Y1)からの距離lに有る
直線状の点Pl(Xl,Yl)を求めるにはどうすればよいでしょうか?


TS  2007-11-02 01:46:03  No: 28173

点P1と点P2の斜距離と指定する距離の比率でX,Yを計算とか。


めるめる  2007-11-02 04:17:52  No: 28174

三角関数「アーク・タンジェント」でその直線の角度を求め、
あとは、サイン、コサインを使って計算、かな。


うんと  2007-11-02 06:10:54  No: 28175

線分と円との交点。
連立方程式を解くだけ。


ウォレス  2007-11-05 21:20:11  No: 28176

実は、
「線分と円との交点の連立方程式を解く」と恐ろしい事になります。

もう少し簡単にしないと手に負えません。X1,Y1を強制的に原点にシフトすればOKです。

従って、P2(xa,ya)=(x2-x1,y2-y1)とすれば、

求めるPlは、

C = l^2* ya^4  + l^2 *xa^2 *ya^2 
D = xa^2+ya^2
と置いて

yl= C^0.5/D
xl= xa/ya*(C^0.5/D) = xa/ya*yl

もう一方の点は、円の反対側です。

最後に元の位置にシフトすればよいです。


石橋屋  2007-11-06 18:53:01  No: 28177

複素数を使えばさらに簡単になります。2点をあらわす複素数をCP1,CP2としたとき、ベクトルP1→P2はCP2-CP1で,その長さをTotalとします。点P1からPL間での長さをLとすると,ベクトルP1→PLは(CP2-CP1)*L/Totalとなります。以上を踏まえて実際のプログラムは次のようになります。なお,uses節にvarCmplxを追加してください。
var CP1,CP2,CPL:variant;Total,L:double;
begin
   CP1:=varComplexCreate(x1,y1);
   CP2:=varComplexCreate(x2,y2):
   CP2:=CP2-CP1;
   Total:=varComplexAbs(CP2);
   CPL:=CP1+CP2*L/Total;//Lは既知とする
//目的の座標を求める
   xL:=CPL.real;
   yL:=CPL.Imaginary;

end;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加