1 :
名前は開発中のものです。:
閉じたポリゴンモデルの体積と重心を出したいのですが、
よい方法はありますか?
あと、同モデルの内外判定も知りたいです。
2 :
名前は開発中のものです。:02/01/08 17:22 ID:9AYHM8tl
そのモデルに比重の偏りがなきゃ楽でしょ
3 :
名前は開発中のものです。:02/01/08 17:23 ID:3ZfEflCi
材質は同一のものと仮定しています。
それでも一筋縄じゃいかなくて・・・
>1
法線で検索かけろ。質問の度にスレ立てるな。
ベクトル山中石器時代
複雑な形状の場合、法線を取るだけでは不十分でしょう。
7 :
4:02/01/08 17:33 ID:???
>6
複雑な形状にしなきゃいいっでーす。
8 :
名前は開発中のものです。:02/01/08 20:25 ID:nxSE8LAU
水に沈める方法はどう?
お船でも浮かべたいの?
10 :
:02/01/08 22:14 ID:???
体積は判るな。
1)内部の任意の点を決める
2)その点と任意の表面の平面とで構成される錐の体積を求める。
3)全ての錐の体積を足す。
11 :
:02/01/08 22:17 ID:???
重心は
1)物体を等体積で分割する平面を求める
2)互いに平行でない等分割面を3つ求める
3)3つの面の交点を求める
だけど1)を一意的に求める方法がわからん。
12 :
名前は開発中のものです。:02/01/08 22:31 ID:P7XSEdoE
縦と横からMRIみたく輪切りにして面積をはじき出して合計(積分の考え方?)
これって駄目なの?
>12
出来ますよ
・物体が対称軸を持てば重心は対称軸上にあります
そして二つの対称軸を持てば、その交点が重心の位置になる
・物体が点対称であればその点が重心になります
・物体を重心のわかっているいくつかの部分にわけ
それぞれの重心に働く合力を求め重心の位置を計算することができます
よーするに複雑な形は、重心が分かってる物体に分割して
それぞれの重心を求めてx,y,z軸各々のモーメントを考えて各軸の重心を求め
それの交点が物体の重心というわけです
わからなければ
>>7のようにするのが一番賢い
14 :
:02/01/08 23:04 ID:???
なる。
求まるだろうが、リアルタイムでは使えないような・・・
16 :
DOHTEI:02/01/09 02:42 ID:k6Dh116d
重心は、質量密度が一定って仮定なら全頂点座標の平均出せばいいんでないの?
と思ったけど全然ちがうみたいね・・鬱
18 :
名前は開発中のものです。:02/01/09 03:06 ID:X0vianPM
>>10 立方体ならそれでいいけど、人体モデルみたいなのには通用しないね。
点が内部にあるかどうかの判定もよくわからないけど、仮に内部だとしても
そこから見える平面を出せないと、モデルを突き抜ける三角錐が出来てしまう。
>>13 対象性がある図形の重心は、左右対称の人体の場合は正中線上にあることがわかるけど、
横から見たときと、上から見たときの重心がわからない。
確実に内部から全ての面が見える単位まで分割すれば解くことは可能かもしれない。
それをどうするかは謎
19 :
名前は開発中のものです。:02/01/09 03:24 ID:X0vianPM
色々考えてみたけど、難しいじゃねぇか・・・
せめて内外判定が取れればモンテカルロ法でも使って体積と重心を出せる。
しょせん近似だが・・・
20 :
名前は開発中のものです。:02/01/09 03:25 ID:X0vianPM
それか、BSPでも使うか?
重心は複雑な形状では数値積分して平衡点
をみつけるしかないね。
体積要素を立方体で近似してもそんなに違わんとおもうが、
芸がないな。
人間ならスティックモデルにするのが現実的でしょうけど
本気でどんな形でも重心を求める!と言いはじめたら
ちゃんと積分で求めないとダメかも……
ポリゴンモデルからボクセルモデルにする方法があれば
かなり解決できそうなんですけど、誰かやってないのかな。
逆はよく見かけるのですが。
ポリゴンが全部三角ならできるかも。
1枚のポリゴンの3つの頂点の座標をR1、R2、R3とする。(R1〜R3はベクトル)
まず、原点とこの三角ポリの張る三角錐の体積は
V=R3・(R1×R2)/6(ただし・は内積、×は外積)・・・1
(なんでこうなるかは、錐の体積=底面積×高さ÷3を考えればわかるやん?)
ここで重要なのがVの符号。原点に対してポリゴンが裏むきか表向きかによって符号が変わってくれるから。
(なぜなら、三角ポリゴンの頂点の並びを<R1、R2、R3>(またはこれの遇置換)にするか
<R1、R3、R2>(またはこれの遇置換)にするかで、1式の符号が変わる。
つまりV>0なら原点に対してポリゴンが裏向き、V<0なら表向き。)
これをふまえれば、
>>10のように錐の点を内部に限らなくてもいいことが分かる。
Vを全ポリゴンについて足し合わせれば求める体積が出るはず。
(図に書けばわかるが、錐の点が外部にあるならVの負の部分がVの正の部分の余分な分を剥ぎ取って
結果的に求める体積の部分が残る)
重心も同じく三角錐をベースに考えればできるかも。
原点と位置ベクトルR1、R2、R3によって作られる三角錐の重心は、
各頂点から対面にある三角形の面の重心に向かって線を引いて、それぞれ4つの線が交わるところ。
・・たぶん。
これも図に書けばわかるが、重心RG(ベクトル)は
RG=(R1+R2+R3)/4
これに上で求めた三角錐の体積を重みとしてかけて、全ポリゴンについて
足し合わせて、最後に全体積で割ってやれば求める重心位置が得られる。
・・・たぶん。
>>10 >>23-24 見事に正解。
ていうか、CAD系の本には当たり前のように書いてあるぞ。
ということで、このスレはめでたく終了。
26 :
25:02/01/09 07:08 ID:???
追記:
「CAD系の本」というのはCAD工学(CADの理論)の本のこと。
意外とゲーム開発者が見落としやすい分野かもな。
>>23 それのことをベクトル三重積と呼ぶと思うのだが…
5は解りにくすぎたか…
スマソ。スカラー三重積だったよ…
欝だ寝よう。
29 :
名前は開発中のものです。:02/01/09 10:44 ID:xVREeipX
おお、目からウロコが落ちました。
ありがとうございます。
計算してみれば当たり前か・・・
CAD系というのはノーマークでした。
30 :
名前は開発中のものです。:02/01/09 10:47 ID:xVREeipX
あと、判定に使いたい内外判定なんですが、こちらは何か定番の方法はありますか?
(線分ではなく、点で・・・)
面の法線と面の頂点から点へのベクトルの内積を使って裏表判定。
それを全部の面にたいしてやってやればいいんでない?
>>30 CADの本に書いてあるよ
基礎教育コンピュータ設計・製図-CAD/CAMの基礎-T 岩田一明監修 共立出版
は、古いけど基礎的なことが書いてあって分かりやすい
33 :
デザイーナ:02/01/09 13:07 ID:E82gtxfd
内外の判定はどうやってやるんだろう?
ちゃんと考えるなら∫dΩ (Ωは立体角、積分範囲はポリゴンの表面)を計算して0なら外、4πなら内だと思うんだけど。
各ポリゴンについて立体角を求める方法がわからん。
>10 の考え方で求まりますよ。
任意の点から全てのポリゴンに線を延ばして
錐体を作り、この体積を全て足します。
このとき、任意の点に錐体の底面となるポリゴンが
裏を見せていたら体積は正の値、
表を見せていたら体積は負の値として扱います。
これで体積が出ます。
(ここでいう表というのは、
閉じた形状を外側から見た時に見える側の面です)
重心も、上記の錐体の重心に
体積(正負有り)を重みとして掛けたものを
足して平均すれば出るはずです。
適当に線分伸ばして面との交差回数奇数なら内,偶数なら外
こういうことでなくて?
37 :
34:02/01/09 17:01 ID:???
すいません。
ものすごい既出っぷりでした。
返って寝ます。
って言うか >23-24 頭良いですね。
これでデザイナーなんだ。
そう言う人と仕事してみたいです。
英語苦手
>>39 この本読みやすい構成になってるんで、力学の基礎(慣性モーメントくらいまで)
知ってれば図と式だけで結構すらすら読めちゃうよ。
41 :
名前は開発中のものです。:02/01/10 19:13 ID:qbjC4FQb
線分と面の交差ってどうやって調べますか?
直線と平面なら簡単ですけど・・・
基準平面(XY平面とか)に変換して、2次元で考える。
線分と面の交差判定は外積とか使って3次元のまま判定もできるけど、
結局2次元で判定した方が計算量少なかった記憶があるな。
ところで1はリアルタイムでやりたいの?
ゲーデブ板だからリアルタイムだとは思うが、一応
>>43 convexだけなら3次元のままでも良いかもね。
面と線が直交してると計算できないという危険を伴う。
ところで、ポリゴンモデルの内部は、空洞か?
それなら重心出すのに楽な方法あるが・・・。
同様の理由で、体積は限りなくゼロに等しい。(藁
当然空洞でしょう。
重心を出す楽な方法とは?
体積が無いので重さも無い。よって重心も存在しない。
寒い・・・
v 人ヾ
/ ゚o\
(´Д`O )
(⊃o⊂゚)
U U
______∧_______
クソスレはちゃんと削除依頼しないと
ageられちゃうんですよ…
52 :
yuka:02/12/02 17:44 ID:jif+yVnB
三角錐の慣性モーメントの求め方を教えてください。
□□□□■□□□□□■□□□□□□□□□□□□□□□□□□□□□
□□□■■□□□□□■□□□□□□□■■■■■■■■■■■■□□
□□■■□□□□□■■■■■■□□□□□□□□□□□□□■■□□
□■■□□■□□□■□□□□■□□□□□□□□□□□□■■□□□
□□■□■■□□■■■□□■■□□□□□□□□□□□■■□□□□
□□□■■□□■■□■■■■□□□□□□□□□□□■■□□□□□
□□■■□□□□□□□■■□□□□□□□□□□□■■□□□□□□
□□■□□□■□□□■■■■□□□□□□□□□□■□□□□□□□
□■■■■■■□□■■□□■■□□□□□□□□□■□□□□□□□
□□□□■□□□■■□□□□■■□□□□□□□□■□□□□□□□
□□■□■□■□□□□■■□□□□□□□□□□□■□□□□□□□
□□■□■□■□□□□□■■□□□□□□□□□□■□□□□□□□
□■■□■□■□□□□□□□□□□□□□□□□□■□□□□□□□
□■□□■□□□□■■■□□□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□■■■□□□□□□□□□□■□□□□□□□
□□□□■□□□□□□□□■■□□□□□□■■■■□□□□□□□
_、_ GOOD END!!
( ,_ノ` ) n
 ̄ \ ( E)
フ /ヽ ヽ_//
56 :
名前は開発中のものです。:03/06/04 17:27 ID:yy/vk9tA
ぬるぽ
ガッ
61 :
名前は開発中のものです。:04/07/02 18:43 ID:fdoAETWb
hosyu
同じく。
■■■■■ ■■■■
■■■■■ ■■■■
■■ ■■
■■ ■■ ■ ■■
■■ ■ ■■ ■■ .■■
■■ ■■ ■■ .■■
■■ ■■ ■■■■■■ ■■ ■■
■■ ■ ■ ■■ ■■
■■ ■ ■ ■■
■■ ■ ■ ■ ■■
■■ ■ ■ ■ ■ ■■
■■ ■ ■ ■ ■ ■■
■■ ■■ ■ ■ .■■
■■ ■ ■ ■■
■■ ■ ■ ■■
■■ ■■■■■■■■■ .■■
■■■■■ ■■■■
■■■■■ ■■■■
うんこ
あ
fff
てst
test
test
73 :
名前は開発中のものです。:2006/12/04(月) 06:21:21 ID:51nQACTz
74 :
山ア渉:2007/01/01(月) 14:42:43 ID:gnRV7EiY
テs
ポリゴンについてです。
○−−−−−○−−−−−○
| | |
| | |
| | |
○ A ○ B ○
| | |
| | |
| | |
○−−−−−○−−−−−○
という頂点を持つ隣接した2つのポリゴンを、
○−−−−−○−−−−−○
| |
| |
| |
○ C ○
| |
| |
| |
○−−−−−○−−−−−○
一つのポリゴンにする為には、
どのようなアルゴリズムが必要ですか?
もの
a+b/2
知ってどうする
79 :
名前は開発中のものです。:2012/09/30(日) 14:25:56.56 ID:uK8A513X
はげどう
80 :
名前は開発中のものです。:2012/10/05(金) 01:18:18.44 ID:xIbX05ie
>>75 全ての辺にカウンタ変数を埋め込んで0で初期化する。
面Aを構成している辺のカウンタを+1する。
同じように、面Bを構成している辺のカウンタも+1する。
カウンタが2になっている辺は重複しているので、取っ払うことができる。
81 :
名前は開発中のものです。:2012/10/05(金) 01:19:21.62 ID:xIbX05ie
って5年前の質問じゃん…
orz
)))
('ω')ここにぼくの妄想ラノベかいちゃおうかな☆