法線を使って、ある地表の一点の高さを調べるには
(X,Y,Z)座標の中のある一点(X,Z)の地表の高さ(Y)
を知るのに、その一点のまわりの三点(A、B、C)の座標値(X,Y,Z)
がわかっていれば、法線を使って知りたい点の高さがわかると聞いたのですが
(A,B,C)でできる平面の法線を求めて
点(A)と調べたい点(T)を結んだ線(AT)を作ると、
線(AT)と法線は直行してるので
線(AT)と法線の内積=0
という所までは、わかったのですが、
その内積を表す式と
法線の各成分、点(A)の各成分、調べたい点T(X,Z)成分
はすでにわかっているので、調べたい点T(Y)成分を
内積の式から抽出でき、
式を展開できるということの、
その式がどうしてもわかりません。
その式がわかれば、ある地点(X,Z)の(Y)成分がわかるらしいのですが、
どなたかご存知の方がおりましたら
よろしくお願い致します。
No.4
- 回答日時:
ANo.3です。
何がお分かりにならないのかが、よくわからないのですが。
> Y = Y_A - [ k (X - X_A) + m (Z - Z_A)]/l
> の形をだそうと考えていましたが(できませんでしたが)
この式の導出の仕方がわからないという意味ですか?
まず、内積の式が
k (X - X_A) + l (Y - Y_A) + m (Z - Z_A) = 0
となることは良いですよね?
ベクトル (k,l,m) と
ベクトルTA = ( X - X_A, Y - Y_A, Z - Z_A )
の内積は、各成分どうしかけたものを足せば良いわけです。
ベクトル(A_x,A_y,A_z) とベクトル(B_x,B_y,B_z) の内積は
A_x B_x + A_y B_y + A_z B_z = 0
になります。
これを今の場合に適用すると、
k (X - X_A) + l (Y - Y_A) + m (Z - Z_A) = 0
ですね。
この先の変形がわからないという意味ですか?
第1項と第3項を右辺に移項します。
l (Y - Y_A) = - [ k (X - X_A) + m (Z - Z_A) ]
lで両辺を割ります(lはエルです)
(Y - Y_A) = - [ k (X - X_A) + m (Z - Z_A) ]/l
両辺にY_Aを加える
Y = Y_A - [ k (X - X_A) + m (Z - Z_A) ]/l
右辺はすべてわかっているという仮定なので、これで Y の式が求まったことになります。
> どちらが正しいのか到底私には判断できません。
ANo.2のご回答の式はフォローしていませんが、
たぶん、同じものを違うインプットで表現したものだと思いますよ。
ANo.2のご回答の式は、おそらくABCの座標を使い表現したものだと思います。
ご質問の文面では、法線ベクトルがわかっているという前提なので、私はその情報を使った式を、提示しました。
ご質問には、
> 線(AT)と法線の内積=0
> という所までは、わかったのですが、
>
> その内積を表す式と
> 法線の各成分、点(A)の各成分、調べたい点T(X,Z)成分
> はすでにわかっているので、調べたい点T(Y)成分を
> 内積の式から抽出でき、
> 式を展開できるということの、
と書かれていて、それはまさしくこの式を求めるという意味ではないのですか?
> inara様の式の方が答の精度が高そうな気はしますが(想像)
別に何も近似はしてないので、私の提示した式も、ちゃんと正確な式ですよ。
ちなみに、法線ベクトルは「外積」というのを使えば簡単に求まりますよ。
A: (Xa,Ya,Za)
B: (Xb,Yb,Zb)
C: (Xc,Yc,Zc)
とおくと、
k = (Yb-Ya)(Zc-Za) - (Zb-Za)(Yc-Ya)
l = (Zb-Za)(Xc-Xa) - (Xb-Xa)(Zc-Za)
m = (Xb-Xa)(Yc-Ya) - (Yb-Ya)(Xc-Xa)
で座標から計算できます。
これを上の Y = … の式に代入すれば、たぶん、ANo.2のご回答の式と一致するのではないかと思います。
回答ありがとうございます。
> Y = Y_A - [ k (X - X_A) + m (Z - Z_A)]/l
> の形をだそうと考えていましたが(できませんでしたが)
と書いたのはここで質問する以前、
自分で考えてもわからなかったという意味で書きました。
ANo.3様の回答は大変良ありがたく思っております。
ただ、ANo.2様の式には、平面の方程式が含まれていたので
お二人の式はそれぞれ違うものと思ってしまいまして、
一重に私の知識不足からくる誤解ですので
どうかご容赦ください。
No.3
- 回答日時:
こんにちは。
> 三、四角形(傾きは任意)でその図形のすべての頂点位置
> はわかっている状態で、面の中のある一点(面に含まれる)の3次元座標のY位置を調べるという小さい話です。
> その内積を表す式と
> 法線の各成分、点(A)の各成分、調べたい点T(X,Z)成分
> はすでにわかっているので、調べたい点T(Y)成分を
> 内積の式から抽出でき、
> 式を展開できるということの、
法線ベクトルを (k,l,m) とします。
頂点Aの座標を (X_A, Y_A, Z_A) とします。
調べたい点T の座標を (X,Y,Z) とします。
この中でわかっていないのは、Y だけなのですよね?
ベクトルTA = ( X - X_A, Y - Y_A, Z - Z_A ) と、
法線ベクトルが直交する条件から、
k (X - X_A) + l (Y - Y_A) + m (Z - Z_A) = 0
が成立ちますが、これを単純に解いて、
Y = Y_A - [ k (X - X_A) + m (Z - Z_A)]/l
で求まった。
・・・というのではいけないのですか?
回答ありがとうございます。
私も、aquarius_hiro様の
おっしゃる様なごく簡単な式で求まる
という話を聞き、
短い式ですむ方が魅力的でしたので、
Y = Y_A - [ k (X - X_A) + m (Z - Z_A)]/l
の形をだそうと考えていましたが(できませんでしたが)
たしかに、inara様の教えて下さった式
を使ってプログラムしている方もいらっしゃいます。
平面の方程式を用いる理由がよくわからないので
どちらが正しいのか到底私には判断できません。
inara様の式の方が答の精度が高そうな気はしますが(想像)
No.2ベストアンサー
- 回答日時:
>三、四角形(傾きは任意)のすべての頂点位置はわかっている状態で、面の中のある一点(面に含まれる)の3次元座標のY位置を調べる
それでしたら、そのある1点の座標を ( Xp, Yp, Zp ) として、Xp と Zp を与えたときに、Yp はいくつになるかということを知りたいわけですね。
平面の方程式は
nx*x + ny*y + nz*z = d --- (1)
ですので、これが3点 A( Xa, Ya, Za )、B( Xb, Yb, Zb )、C( Xc, Yc, Zc ) を通るなら
nx = d*( Za*Yc - Yc*Zb - Ya*Zc + Zc*Yb + Ya*Zb - Za*Yb )/( - Xa*Yc*Zb - Ya*Xb*Zc + Xc*Ya*Zb + Xa*Zc*Yb + Za*Xb*Yc - Za*Xc*Yb ) --- (2)
ny = d*( Xb*Za - Xb*Zc + Xa*Zc - Xa*Zb - Xc*Za + Zb*Xc )/( - Xa*Yc*Zb - Ya*Xb*Zc + Xc*Ya*Zb + Xa*Zc*Yb + Za*Xb*Yc - Za*Xc*Yb ) --- (3)
nz = d*( - Xa*Yc - Ya*Xb + Xc*Ya + Xa*Yb + Xb*Yc - Yb*Xc )/( - Xa*Yc*Zb - Ya*Xb*Zc + Xc*Ya*Zb + Xa*Zc*Yb + Za*Xb*Yc - Za*Xc*Yb) --- (4)
となります( d の値は分からなくても nx:ny:nz が分かれば平面は決まります )。
点 ( Xp, Yp, Zp ) が平面 (1) 上にあるのなら
nx*Xp + ny*Yp + nz*Zp = d --- (5)
が成り立つので、式 (2) ~ (5) から
Yp = - ( - Yc*Za + Yc*Zb + Zc*Ya - Zc*Yb - Zb*Ya + Yb*Za )/( - Xb*Za + Xb*Zc - Xa*Zc + Xa*Zb + Xc*Za - Zb*Xc )*Xp - ( Xa*Yc + Ya*Xb - Xc*Ya - Xa*Yb - Xb*Yc + Yb*Xc )/( -Xb*Za + Xb*Zc - Xa*Zc + Xa*Zb + Xc*Za - Zb*Xc )*Zp - ( -Yc*Zb*Xa + Zc*Yb*Xa - Xb*Zc*Ya + Xc*Zb*Ya + Xb*Yc*Za - Xc*Yb*Za )/( - Xb*Za + Xb*Zc - Xa*Zc + Xa*Zb + Xc*Za - Zb*Xc )
となって、Yp を Xp と Zp を使って表わすことができます。このような計算は手計算ではとてもできないので、数式処理ソフトを使いました。
明快な回答、本当にありがとうございます。
教えてもらった計算式は
ありがたく
使わせていただきます。
これからはもっと数学も勉強していきます。
ありがとうございました。
No.1
- 回答日時:
ご質問に「地上」とあるので、地球上を想定されているのなら、xyz座標系でなく曲面座標系を使わないといけないと思います。
もし地上を平面としていいのなら、3点 ABC を通る平面と、点 T との距離(物体の高さ)を知りたいということですね。まず、法線というのは平面と直交する直線のことなので、「線(AT)と法線は直行してる」というのはおかしいです(点 T が地上にあれば別ですが)。点T (物体)から平面 ABC (地面)に直角に垂した線が、その平面と交わる点(つまり物体の真下の地上の点)を P とすれば、線分(ベクトル)PT が法線になるので、これと直交するのは平面上の任意の2点を結ぶ線分( 例えばベクトルAB、AC、BC )です。つまり、内積を・で表わせば
AB・PT = BC・PT = CA・PT = 0
が成り立ちます。3つめの式 CA・PT = 0 は、前の2式が成り立てば自動的に成り立ちます( CA = BC - BA なので、AB・PT = BC・PT = 0 ならば、CA・PT = ( BC - BA )・PT = BC・PT + AB・PT = 0 )。
ベクトルでなく座標で考えると以下のようになります。
まず、点 A, B, C, T, P の座標をそれぞれ ( Xa, Ya, Za )、( Xb, Yb, Zb )、( Xc, Yc, Zc )、( Xt, Yt, Zt )、( Xp, Yp, Zp ) とします。 このうち未知なのは ( Xp, Yp, Zp ) だけで、これが分かれば点 T と点 P の間の距離(物体の高さ)は √{ ( Xt - Xp )^2 + ( Yt - Yp )^2 + ( Zt - Zp )^2 } です。
xyz 座標系での平面の方程式は一般に
nx*x + ny*y + nz*z = d --- (1)
で表わされます( nx, ny, nz, d は定数)。nx はn*x でなく、x方向の成分という意味で、( nx, ny, nz ) がこの平面の法線ベクトルの成分になります。この法線ベクトルが 線分PT ならば
nx = Xt - Xp、ny = Yt - Yp、nz = Zt - Zp --- (2)
です。また、4つの点 A, B, C, P はこの平面上になければならないので、それらの座標は式(1) を満足しなければなりません。つまり
nx*Xa + ny*Ya + nz*Za = d --- (3)
nx*Xb + ny*Yb + nz*Zb = d --- (4)
nx*Xc + ny*Yc + nz*Zc = d --- (5)
nx*Xp + ny*Yp + nz*Zp = d --- (6)
となります。式(2)~(6)を解けば、未知数 ( Xp, Yp, Zp ) と d が出ますが大変複雑な式になります(ちゃんと解けます)。
これはレポートや試験問題の類ではないと思いますが、もし、ご趣味でこのような計算をしたいのであれば、計算プログラム(Excel VBA)を紹介します(字数制限が問題ですが)。Excel のソルバーで解けないことはないですが、初期値を誤ると収束しないので、確実に解の出る方法が良いかと思います。
詳しい回答ありがとうございます。
こちらの説明が不足していて
大変申し訳ありません。
計算が必要だったのはパソコン上の
3D仮想空間、XYZ座標 限定の問題だったのですが
話をややこしくしてすいません。
趣味の3Dプログラミングに必要だったのですが
数学の問題なので数学カテゴリーで質問させていただきました。
地上と言いましたのは、板切れの様なもの(面積はあるが厚さがない)
を隙間なく敷き詰めて、XYZ座標空間に配置し、
それを、地面に見立てるという意味でした。
最初から把握できるのは、板切れのかど(頂点)の
XYZ座標上の位置がどこかということだけですので、
それ以外の部分で、板切れの面のある一部の高さを
調べる方法を考えていたのですが、
地表などという言葉を使ったために
話が地球全体にまで及んでしまい、申し訳ありませんでした。
実際には、3次元座標空間に配置された一枚の
三、四角形(傾きは任意)でその図形のすべての頂点位置
はわかっている状態で、面の中のある一点(面に含まれる)の3次元座標の
Y位置を調べるという小さい話です。
外積を使って面の法線をだして、
その法線と、調べたい点(T)と図形の頂点(A)を結んだ線(TA)(面に含まれる)
が直行していて、内積は0というのは、わかりますし
内積=0であり、法線の各成分、点Aの各成分、調べたい点(T)のX,Z成分がわかっているという
ことから、その内積の式から調べたい点(T)のY成分が抽出できるとききまして考えました。
内積の式というと、|a→|×|b→|cosθ、 ax*bx+ay*by+az*bz だと
思うのですが
Y成分を求める事とどう関係するのか、考えてもわかりませんでした。
レベルの低い質問ですいません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 球面と接する直線の軌跡が表す領域 4 2023/07/30 12:37
- 数学 ベクトル方程式(ヘッセの標準形)についての質問 2 2022/04/23 18:00
- 数学 この問題が分かりません! 右図の直線①②の式は、y=-x+4①、 y=3/4x+1② である。2つの 3 2022/05/04 22:29
- その他(Microsoft Office) エクセルなどのオフィス系ソフト 8 2022/12/09 06:19
- 高校 数3 面積 4 2022/05/11 12:37
- 数学 第4問 座標平面上に3点 A(1, 1),B(1, 5), C(7, 3) を頂点とするABCがある 2 2022/10/01 14:53
- 数学 数学の問題で法線ベクトルについて 5 2022/11/13 12:45
- 数学 曲線y= f(x)上の任意の点Pで引いた法線とx軸の交点をN、Pからx軸に下ろした垂線の足をHとする 3 2022/12/25 10:45
- 数学 円と直線の共有点を求める時に、円を表す式と直線を表す方程式が提示されるんですが、判別式を使うのは分か 3 2023/02/15 19:20
- 数学 修正して頂いた画像を使用させていただき改めて質問させて頂きます。 画像において、直接fとgのx軸の点 9 2022/08/23 19:17
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
重分積分の極座標変換について
-
座標(x,y)間(=2点)の...
-
「原点に返る」と「原点に戻る...
-
座標空間について、点Pの座標を...
-
AB=2である2定点A、Bに対して...
-
楕円の角度とは?
-
エクセルでグラフの作り方 軌...
-
座標のS/I方向について
-
測量座標と算数座標の違い
-
【エクセル】傾いた楕円の長軸...
-
円柱?
-
任意の地点からの回転座標の求め方
-
生データーからのグラフから関...
-
座標から距離を求める方法
-
この解説の(5)が分かりません...
-
右下の小さい数字について
-
2点を通る半径rの円の中心の座標
-
数学の問題がわかりません。(球...
-
座標を入力すると角度を得られ...
-
大学の複素数の問題なんですが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
座標(x,y)間(=2点)の...
-
「原点に返る」と「原点に戻る...
-
距離と方向角から座標を求める...
-
右下の小さい数字について
-
なぜベクトルの外積の向きが右...
-
距離、方位角から座標を求める方法
-
重分積分の極座標変換について
-
測量座標と算数座標の違い
-
2022年 東京理科大 難易度判定
-
楕円の円周上の座標を求める計...
-
2次関数y=ax^2のグラフは点A(4,...
-
エクセルでグラフの作り方 軌...
-
N点間の中心と重心の求め方
-
複素数平面と座標平面の対応に...
-
楕円の角度とは?
-
等角螺旋(らせん)の3次元的...
-
「0でない2つのVのベクトルu,v...
-
【数学】 解説の下から4行目が...
-
座標値 世界測地系と日本測地系...
-
座標を入力すると角度を得られ...
おすすめ情報