| ホーム > プログラミング > グラフィックス プログラミング > 点と直線の距離 |
点P、線分AB、があったときに、PからABへの垂線の足の長さを求めるには?
要素は2次元空間内に存在するものとします。
解説
垂線の足点 I を求めて、ベクトル PI の長さとして、距離dを求めます。
図よりAIの大きさは、
|AI| = |AP|cosαである。 ・・・@
内積の公式より
AP・AB = |AP||AB|cosα ・・・A
式@Aより、
|AI| = (AP・AB) / |AB|
|AI| がもとまれば、点Iの位置は、
A + ( |AI|/|AB| ) AB
= A + ( (AP・AB) / |AB||AB| ) AB
として求まります。
ベクトル IP は、Iの位置が求まったので、求まります。
考察
計算に一時変数(垂線の足点 I )が必要なのが速度、精度の面で気になる。
が、垂線の足点 I が線分AB上にあるかどうかを、( (AP・AB) / |AB||AB| ) の値が、0〜1かどうかで判定することができます。
解説
距離 d は、
d = |AP| sinα ・・・@
外積の公式
PA × AB = |PA| |AB| sinα ・・・A
より、sinαは、外積が求まれば求まることがわかる。
式@、Aより
d = |AP| sinα
= ( PA × AB ) / |AB|
となる。
(半空間テストのために、ベクトルAPではなくPAにしている。PがABの右側なら、dは負の値として求まります。)
考察
半空間テストに備えて、負の値が返ってくることもあるように設計してあります。
ダウンロード
サンプルプロジェクト
コメント
ご意見、ご感想、ご質問、ご要望等は、「コメントを投稿する」もしくは「ホーム
> コンタクト」よりお願いいたします。
内容の誤り、誤字脱字、リンクミスなどの問題点を発見された場合には「コメントを投稿する」もしくは「ホーム
> コンタクト」より連絡していただけると幸いです。
Copyright (c) 2004-2010 Nobuki HIRAMINE All rights reserved.