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も見ています
-
見学に行くとしたら【天国】と【地獄】どっち?
みなさんは、一度だけ見学に行けるとしたら【天国】と【地獄】どちらに行きたいですか? 理由も聞きたいです。
-
【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
【お題】・忍者がやってるYouTubeが炎上してしまった理由
-
最強の防寒、あったか術を教えてください!
とっても寒がりなのですが、冬に皆さんがされている最強の防寒、あったか術が知りたいです!
-
AIツールの活用方法を教えて
みなさんは普段どのような場面でAIツール(ChatGPTなど)を活用していますか?
-
今から楽しみな予定はありますか?
いよいよ2025年が始まりました。皆さんには、今から楽しみにしている予定はありますか?
-
多角形の内部かどうか判定する方法
その他(プログラミング・Web制作)
-
点が線分上にある条件について
数学
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
スクリーン座標からワールド座...
-
一番近い点を見つけたい。
-
凸型の多角形の座標
-
直線上にある点の座標の求め方
-
3次元空間上の2つの座標から...
-
シーケンサー(PLC?)で制...
-
図形が重なりあっているかどうか
-
3D座標上のベクトルをを2D平...
-
ダイアログ内コントロールの位...
-
黒体放射軌跡のxy色度座標への...
-
エクセルである点からの距離で...
-
矩形同士の当たり判定 C#
-
VBで、開いているExcelシートの...
-
Tiny Basicでのグラフィック。。
-
Minecraft 統合版(PC)の描画距...
-
コントロールの書式設定で、“コ...
-
エクセルのコントロールツール...
-
EXCELVBA リストボックスで選択...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
3次元空間上の2つの座標から...
-
ダイアログ内コントロールの位...
-
エクセルで回転する座標の出し方
-
シーケンサー(PLC?)で制...
-
エクセルである点からの距離で...
-
始点、終点の二つの座標と半径...
-
C言語 配列で座標
-
多角形の内部かどうか判定する方法
-
閉図形の座標の配列が右回りか...
-
以下のプログラムは重心を求め...
-
c言語でキーボードから2点の座...
-
Excel VBA で自在に図形を変化...
-
タッチパッドのタッチ座標取得
-
C言語において、0の座標をキャ...
-
当たり判定後に面に沿って動か...
-
ワード上Shapeの位置情報を統一...
-
黒体放射軌跡のxy色度座標への...
-
一番近い点を見つけたい。
おすすめ情報