HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0117
HSP初心者2本の直線の交点を求める方法を教えてください.7解決


HSP初心者

リンク

2007/1/17(Wed) 06:29:48|NO.4857

(x1,y1)(x2,y2)を通る直線と(x3,y3)(x4,y4)を通る直線の交点を求めたいのですが,
どのように組めば良いか判りません.それぞれは全て正の整数です.
数Iの教科書を見て公式どおり当てはめて組んでもとんでもない値となってしまします.

HSPの神様!どうかお慈悲を...



この記事に返信する


りさ

リンク

2007/1/17(Wed) 08:18:48|NO.4858

こんにちわ。大げさなスレですね(^^;

できれば、そのスクリプトを載せて欲しかったです。
頭悪いんで公式が分からないんです(汗)

一応、分かる範囲で書いてみたんですが、間違っていたらすみません。

x1 = double( 2 ) :y1 = double( 2 ) x2 = double( 4 ) :y2 = double( 4 ) x3 = double( -1 ) :y3 = double( 5 ) x4 = double( 4 ) :y4 = double( 0 ) a = ( y2 - y1 ) / ( x2 - x1 ) // 傾き b = y1 - ( x1 * a ) // 切片 c = ( y4 - y3 ) / ( x4 - x3 ) // 傾き d = y3 - ( x3 * c ) // 切片 p = ( d - b ) / ( a - c ) // 交点 x 座標 q = a * p + b // 交点 y 座標 mes "点(" + int(x1) + "," + int(y1) + ")と点(" + int(x2) + "," + int(y2) + ")を通る直線は" mes "y= " + a + "x + " + b mes mes "点(" + int(x3) + "," + int(y3) + ")と点(" + int(x4) + "," + int(y4) + ")を通る直線は" mes "y= " + c + "x + " + d mes mes "この2つの直線の交点は(" + p + "," + q + ")です"

公式を知らないので、
傾きは変化率(Δy/Δx)を考えて、
切片は y = ax + b ⇒ b = y - ax としてます。

交点は、
x座標は、q = ap + b と q = cp + d を減算してます( p = ( d - b ) / ( a - c ) )
y座標は、そのまま q = ap + b をしてます。

部分部分で分けて計算してますが、
この方法だと、誤差も出やすいかもしれません。

もっといい方法があると思いますので、それは他の方に・・・m(_ _)m



HSP初心者

リンク

2007/1/19(Fri) 06:19:27|NO.4891

りさ様,返事が遅くなり申し訳御座いませんでした.

教えて頂いた通りで求める事が出来ましたが,今ひとつご教授を...
直線のいずれかの座標の差が0になってしまう場合に「0で除算しました」と
エラーが出てしまいます.この回避策はどのようにすればよいのでしょう?

素人からのお願いです.お願い致します.( T o T )



トホホッティー

リンク

2007/1/19(Fri) 06:50:07|NO.4892

差が0の時ifで判断して0で除算する式から退避すればよろしいのではないですか?

計算式の前にifをいれて退避してください。



トホホッティー

リンク

2007/1/19(Fri) 06:52:58|NO.4893


if ((xs-x1)=0):a=0:else:a = ( y2 - y1 ) / ( x2 - x1 )
みたいにどうぞ。



cbird

リンク

2007/1/19(Fri) 12:14:56|NO.4898

気になったのでちょいと補足です。

2つの傾きが同じ場合その2直線は平行にあり、
さらに2つの切片が同じ場合は2直線は同じ線上にあるため交点が無限に存在します。
又、切片が異なる場合は平行なので交点は存在しません。



りさ

リンク

2007/1/19(Fri) 13:15:29|NO.4899

上記したスクリプトは『交点の存在する2直線』に限ります。

ですので、もし任意の点を4つ指定する場合は、
cbirdさんのご指摘を含め、大きく分けて2つの場合を考えなくてはなりません。

1)それぞれが『線』なのか(または『点』なのか)
2)交点が存在するのか

これらは既存の変数を使って if 文で判定するだけですので、そう難しくはないと思います。

(1)は、傾き・切片を求める前で、
(2)は、交点を求める前で判定するのがいいかと思います。



HSP初心者

リンク

2007/1/20(Sat) 13:09:04|NO.4921

みなさま感謝感激です! if文を組み合わせて無事エラー回避もできました.
有難う御座いました.



ONION software Copyright 1997-2023(c) All rights reserved.