線分AB上に点Pが存在しているかの判定をしたく、そのコードを作ろうと考えています。(直線と線分を混同しないように気をつけてください。)
※注意: 画像にあるように円の中点から直線AB(ax+by+c=0とした)の交点を求めて、それを点Pとしています。そのため点Pは点Oの位置によって動いたりすることが前提です。
上記のURLを参考にすると、プログラム上では
"s+t=1 &&
s>=0 &&
t>=0"
この3つの条件さえ合っていれば線分AB上内に点Pが存在していることになります。
ここからが問題なのですが、OP = sOA + tOBの公式についてです。
sとtの比較を実現するためにはそれぞれ s= と t= の式に直し、実数を比較しなければなりません。
しかし、ベクトルOPは "点P-点O" で表すことができるのでプログラム上で書くと(glm::vec2 P - glm::vec2 O)となり、結果もglm::vec2で出てきます。
glm::vec2は主に(x,y)を表すためのものですが、この程で計算を進めていくと以下のような問題に突き当たります。
C++
1s = (OP+OB)/(OA+OB); // glm::vec2 2if ( s>=0 &&...) {...} // glm::vec2 >= int
つまり型が違うので比較ができないのです。
ここでいくつか質問があります。
-
私のベクトルの算出方法が間違っているのでしょうか?もし間違いであれば正しいベクトルの算出方法を教えてください。
-
これは余談ですが、ベクトル計算は単位ベクトルに直す必要がありますか?ありませんか?
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/28 13:19