
Cの初心者です。
空間上に存在する2点間を結ぶ直線上に任意の点が存在するかどうかの
関数を作りたいのですがどのような公式を用いて評価すればいいのか分かりません。
どなたかご教示ください。
引数
始点 A(x,y,z)
終点 B(x,y,z)
直線上に存在するであろう任意の点
C(x,y,z)
関数のイメージ
boolean isOnLine (Ax, Ay, Az, Bx, By, Bz, Cx, Cy, Cz); 配列でもよいです。
返り値
True、 False ( 0 or 1 )
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
直線ABの式を求め、その式に任意の点Cの座標を代入し、式が成り立つか判定すればOK。
(Cx,Cy,Cz)=(Ax,Ay,Az)+t(Bx-Ax,By-Ay,Bz-Az)
この式が、点Cを通る直線ABの式。
この式をt=の形に直せば
t=(Cx-Ax)/(Bx-Ax)=(Cy-Ay)/(By-Ay)=(Cz-Az)/(Bz-Az)
となる。
2つの点{(Cx-Ax)、(Cy-Ay)、(Cz-Az)}、{(Bx-Ax)、(By-Ay)、(Bz-Az)}は「点Aが原点になるように、直線ABと点Cを並行移動した時の、点Bと点Cの座標」を表わしている。
そして、原点と点Bの延長線上に点Cがあるならば各x、y、zの比は等しくなるので
(Cx-Ax):(Cy-Ay):(Cz-Az)=(Bx-Ax):(By-Ay):(Bz-Az)
が成り立つ。
つまり
(Cx-Ax)/(Bx-Ax)=(Cy-Ay)/(By-Ay)=(Cz-Az)/(Bz-Az)
が成り立つ。
プログラムでは
(Bx-Ax)が0、かつ、(By-Ay)が0、かつ、(Bz-Az)が0
(Bx-Ax)が0、かつ、(By-Ay)が0
(Bx-Ax)が0、かつ、(Bz-Az)が0
(By-Ay)が0、かつ、(Bz-Az)が0
(Bx-Ax)が0
(By-Ay)が0
(Bz-Az)が0
と言う7つの例外条件を取り除いた上
(Cx-Ax)/(Bx-Ax)と(Cy-Ay)/(By-Ay)と(Cz-Az)/(Bz-Az)が等しいかどうかを判定すれば良い。
7つの例外条件では、それぞれ
(Bx-Ax)が0、かつ、(By-Ay)が0、かつ、(Bz-Az)が0
の時
(Cx-Ax)が0、かつ、(Cy-Ay)が0、かつ、(Cz-Az)が0
ならば真(3つの点がすべて同じ座標にある)
(Bx-Ax)が0、かつ、(By-Ay)が0
の時
(Cx-Ax)が0、かつ、(Cy-Ay)が0
ならば真(直線ABがZ軸と並行)
(Bx-Ax)が0、かつ、(Bz-Az)が0
の時
(Cx-Ax)が0、かつ、(Cz-Az)が0
ならば真(直線ABがY軸と並行)
(By-Ay)が0、かつ、(Bz-Az)が0
の時
(Cy-Ay)が0、かつ、(Cz-Az)が0
ならば真(直線ABがX軸と並行)
(Bx-Ax)が0
の時
(Cx-Ax)が0、かつ、(Cy-Ay)/(By-Ay)と(Cz-Az)/(Bz-Az)が等しいならば真(直線ABが「平面(Bx-Ax)=0」上にある)
(By-Ay)が0
の時
(Cy-Ay)が0、かつ、(Cx-Ax)/(Bx-Ax)と(Cz-Az)/(Bz-Az)が等しいならば真(直線ABが「平面(By-Ay)=0」上にある)
(Bz-Az)が0
の時
(Cz-Az)が0、かつ、(Cx-Ax)/(Bx-Ax)と(Cy-Ay)/(By-Ay)が等しいならば真(直線ABが「平面(Bz-Az)=0」上にある)
と判定すればよい。
なお、この判定では「点Cが直線ABの延長線上にあり、点Aと点Bの中間にない場合(線上にあるが外側にある場合)」にも真となる。
点Cが点Aと点Bの中間にあるかどうかは「Ax、Bx、Cxの大小関係」で判定可能なので、上記の判定の前に判定してしまうと良い(Ay、By、Cy、Az、Bz、Czの大小関係は無視して良い)
No.8
- 回答日時:
えぇと....
ベクトルの取り方を確認して下さい>#7. #5 では「AB と AC」なのでなす角は 0 です. もちろんこれだと「C が B より A に近い」という条件を組み込まなければなりません. 一方, #3 のように「CA と CB」でとればなす角が π というだけですみます.
いずれにしても「角度を求める」という方針だと「C と A または B が一致する」可能性を念頭に置く必要がありますね.
ああ, 線分だったら Line より LineSegment (もしくは Segment) の方がいいかもしれない.
というか, この辺はほとんど数学の問題であって, 全く C には関係ない気がする.
No.7
- 回答日時:
No.5の方の内容に補足させてください。
ABの線分上にCが存在するかどうかなので、
θ=180度で、cosθ = -1 の場合 じゃないかと思います。
ABの直線上にCがあるかだと、cosθ = -1 or 1 ですね。
No.5
- 回答日時:
> ところでその"二つのベクトル AB と AC の内積から求められる"とは
> 具体的にどのようにどのような公式になるのでしょうか?
ベクトルABを x, ベクトルACを y とします。
x・y = |x||y|cosθ なので
cosθ= (x・y) / (|x||y|)
二つのベクトルが重なるときθ=0だから、cosθ = 1 すなわち
(x・y) = |x||y|
No.3
- 回答日時:
答えがひとつ出ているようですが、内積を使う場合の参考に。
http://w3e.kanazawa-it.ac.jp/math/category/vecto …
「ベクトルのなす角」に関する説明ページです。
Cx, Cy, Czを原点として、Ax,Ay,Azに向かうベクトル、
Cx, Cy, Czを原点として、Bx,By,Bzに向かうベクトル のなす角が、
180度であれば、直線上にCx,Cy,Czがあると判定できます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 初歩的な質問で申し訳ないのですが、 平面における直線→y=ax+b 空間における直線→ax+b=y= 2 2022/04/01 13:22
- JavaScript オブジェクト配列の各メンバを任意の式で評価して、その評価値が最大のオブジェクトを返す関数はありますか 2 2023/05/20 15:02
- 数学 二次関数の問題なのですが、パープ〜が愚にも付かぬ珍説を喧しく唱え続けていて、非常に当惑しております。 2 2022/05/29 21:41
- 数学 高校数学で質問があります。 2 2023/02/13 16:40
- その他(教育・科学・学問) 関数、写像について 1 2022/04/10 23:45
- 数学 微分幾何の問題です。1問でもわかる方教えて頂きたいです。 問1 第1基本量、第2基本量が E=G=1 2 2023/02/04 13:48
- 数学 3次元実ベクトル空間において, 平面 P:x-y+z+1=0 と直線 L:2(x-1)=-y=-z 3 2022/10/29 14:39
- Excel(エクセル) エクセルで同じ数字同士を自動で線で結ぶVBAを教えてください 6 2022/04/26 23:13
- 数学 4次関数と二重接線に囲まれる面積を求めるときに、まず4次関数と1次関数の交点を求めたいのですが ax 2 2022/10/16 12:42
- 数学 数学の問題で法線ベクトルについて 5 2022/11/13 12:45
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
Paint Shop Pro で
-
メッセージ処理、ウインドウ同...
-
ExcelVBA上で特定の座標への画...
-
●Excel VBA 配列●教...
-
VB.net フォームをなめらかに移...
-
色付けの円を描きたい
-
CADソフトの線の表現?
-
追跡のアルゴリズム
-
3次元空間上の2つの座標から...
-
C# 2つのベクトルのなす角を二...
-
座標を結んだ線分の交差
-
座標のページへ直接飛ばすやり...
-
3次元のラプラス演算子について...
-
TSP問題
-
javascriptからCGIにデータを移...
-
PictureBoxの更新
-
ピクチャボックスから座標を読...
-
VBAでは角度はどっち回りですか?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
3次元空間上の2つの座標から...
-
エクセルで回転する座標の出し方
-
ダイアログ内コントロールの位...
-
多角形の内部かどうか判定する方法
-
交差する2線分の交点座標の求め方
-
ワード上Shapeの位置情報を統一...
-
C言語 配列で座標
-
閉図形の座標の配列が右回りか...
-
シーケンサー(PLC?)で制...
-
Excel VBA で自在に図形を変化...
-
直線上にある点の座標の求め方
-
エクセルである点からの距離で...
-
OpenCvSharp4による画像判定解...
-
始点、終点の二つの座標と半径...
-
GLで座標を変えて回転させたい
-
ピクチャボックスの座標取得
-
最小二乗平面
-
c言語でキーボードから2点の座...
おすすめ情報