- PR -

済)C++)平面に接する平面の判断

1
投稿者投稿内容
うちうせん
ベテラン
会議室デビュー日: 2003/08/08
投稿数: 96
お住まい・勤務地: 福岡県
投稿日時: 2007-04-18 23:29
こんばんは。

今回の仕事で初めて3次元グラフィックを扱うことになりました。
そこで質問なのですが、2つの平面が接しているかどうかの判断をするためにはどういうアルゴリズムがあるのでしょうか?
条件等は以下の通りです。

・すべての平面は四角形である
・面の角が接している状態は想定せず、辺と辺・辺と面が接しているかどうかの判断を行う
・平面より取得できる情報は各頂点の座標・法線ベクトル
・3DにDirectXやOpenGL等を使用していないためそのようなライブラリ関数等は使用できず、C++標準かMFCなら使用可能

平面の方程式を使用してその平面上に接する辺の両端が存在するか?のような判断かな〜?とは思ったのですが、平面の方程式では意図する四角以外の範囲も入ってしまうようなのでその範囲の絞り込みがよくわかりませんでした。
同じ様なことをされた方アドバイスや経験談等お願いします。

開発環境
WindowsXP Pro SP2
VisualC++2005(MFC使用)



_________________
by うちうせん

[ メッセージ編集済み 編集者: うちうせん 編集日時 2007-04-19 13:09 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-04-19 07:31
ごめん、全部読んでない

> 全ての平面は四角
ダウト
平面が決まるのは三点、三角形。四角形じゃなく、三角形で考え直してごらん?
_________________
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2007-04-19 10:57


[ メッセージ編集済み 編集者: unibon 編集日時 2007-04-19 14:24 ]
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-04-19 12:39
頂点が同一のオブジェクトで扱われているなら
頂点へのポインタが同一かどうかで判断するのでは?
ポリゴンで辺を共有しているケースを判別したいと言うことでしょう?

2つの別々のオブジェクトで辺が共有される瞬間を判別したいなら
頂点ごとに衝突判定するのが一番早い気がする。
いずれにせよ、浮動小数点での同値比較は誤差の関係で上手く
いかない場合が多いのでそこの扱いをどうしたいのかとか
考慮事項は多いと思うけども。
うちうせん
ベテラン
会議室デビュー日: 2003/08/08
投稿数: 96
お住まい・勤務地: 福岡県
投稿日時: 2007-04-19 13:09
多数の返答ありがとうございます。

書いた内容があいまいですみません。
今回作成しているのは3DCADで作成された静止物体を使用したものです。
たとえば2枚の板をL字型につないだ際、その内側の面同士が接しているか?のような判断を行います。

独自のライブラリを探してみたところ、面同士の最短距離を計算するという関数が見つかったので、それを使用して0ならば接しているという判断することにしました。

多数のアドバイスありがとうございました。

_________________
by うちうせん
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-04-19 13:45
引用:

うちうせんさんの書き込み (2007-04-19 13:09) より:
独自のライブラリを探してみたところ、面同士の最短距離を計算するという関数が見つかったので、それを使用して0ならば接しているという判断することにしました。



CAD関連ですか。なるほど。

しかし、面同士の最短距離ってどういう仕様の「最短距離」なんだろう?
面の角が接合しているときに距離0になるのでは…?
片方の面がもうひとつの面に丁字型に辺を接している場合と区別がつくのかな?
あと、簡単に距離0と言っているけど、浮動小数点の問題は大丈夫なのかな?
うちうせん
ベテラン
会議室デビュー日: 2003/08/08
投稿数: 96
お住まい・勤務地: 福岡県
投稿日時: 2007-04-19 14:14
>nagiseさん
ライブラリなので中の詳しいことはわかりませんが、検証の結果どうやら面と面の一番近い部分?を計算しているようです。
面が横につながったときも距離0となりました。

面の角が接続している場合も距離0となりますが、距離の他法線ベクトルなどでもフィルタリングしている為、そこではじかれるようです。

L字とT字を仕様上区別する必要がないので今回は考慮しないでよさそうです。

わかりやすく距離0と書きましたが、実際には閾値を儲け誤差も範囲内にいれています。
_________________
by うちうせん
1

スキルアップ/キャリアアップ(JOB@IT)