C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[15]: 時計回り、反時計回り判定 [2]


(過去ログ 18 を表示中)

[トピック内 44 記事 (41 - 44 表示)]  << 0 | 1 | 2 >>

■7226 / inTopicNo.41)  Re[14]: 時計回り、反時計回り判定
  
□投稿者/ Zee (20回)-(2007/09/01(Sat) 11:20:34)
Zee さんの Web サイト
No7214 (Jitta さん) に返信
> ■No7047 (Zee さん) に返信
> Zeeさんのセッション内容けってぇ〜!!(笑)
> 「測量技術の応用〜実世界から仮想世界へ〜」
>

うは!なんというセッション^^;
荷が重いな^^;
関係ないレスで失礼しまいした。
引用返信 編集キー/
■7262 / inTopicNo.42)  Re[20]: 時計回り、反時計回り判定
□投稿者/ y4yama (21回)-(2007/09/03(Mon) 09:05:10)
No7221 (れい さん) に返信
> 2007/09/01(Sat) 00:03:33 編集(投稿者)
> 私の知っている方法は

> 1) 最大値最小値による方法
> 2) 外積を用いた符号付面積による方法
> 3) 外角を積算していく方法
> の3つで、どれも一長一短ですので、目的に応じて選ぶ必要があります。
>
> 2)は皆さんと同じです。
> 凹多角形に使えますが、捩れている多角形には使えません。
> また、頂点が増えると精度の問題が発生します。
>
> 3)は外角を足すだけで、細かいテクニックはありますが、arctanが必要で、重いです。
> 図形が何回捩れているのかわかるのはこれだけです。
>
> 1)は多点のポリゴンでよく用いられる方法で、一番軽く、早いです。
> 捩れている場合には使えません。

この機会に(1)も知ることができました。これ、ある程度簡単でいいですネ!(XYの2次元の場合は)
れい さん、ありがとうございました

多分セインさんの目的は、3次元の立体で、平面的な表面のレンダリングかと
そのとき、ある1つの平面では(外から見た時に)境界を必ず時計回りに定義する、と決めておいたら
光(または視線)の方向に対して表が見えているか、裏が見えているかを
法線の向きで判定することが出来る・・・ということかと。(なんと大胆な思い込みの予測だろうか、ははっ)
引用返信 編集キー/
■7285 / inTopicNo.43)  Re[15]: 時計回り、反時計回り判定
□投稿者/ セイン (27回)-(2007/09/03(Mon) 13:53:53)
2007/09/03(Mon) 15:18:01 編集(投稿者)

No7226 (Zee さん) に返信
> ■No7214 (Jitta さん) に返信
>>■No7047 (Zee さん) に返信
>>Zeeさんのセッション内容けってぇ〜!!(笑)
>>「測量技術の応用〜実世界から仮想世界へ〜」
> >
>
> うは!なんというセッション^^;
> 荷が重いな^^;
> 関係ないレスで失礼しまいした。


>>「測量技術の応用〜実世界から仮想世界へ〜」

ホームページ作成するとしたらそれがテーマっすか(汗
プレッシャーwww

がんばって作ってみます。
できあがったらこそっと解決済みにチェック入れてリンクいれますね。

解決済み
引用返信 編集キー/
■7312 / inTopicNo.44)  Re[21]: 時計回り、反時計回り判定
□投稿者/ れい (107回)-(2007/09/03(Mon) 19:08:47)
2007/09/03(Mon) 19:20:24 編集(投稿者)
No7262 (y4yama さん) に返信
> ■No7221 (れい さん) に返信
>>2007/09/01(Sat) 00:03:33 編集(投稿者)
>>私の知っている方法は
>>1)は多点のポリゴンでよく用いられる方法で、一番軽く、早いです。
>>捩れている場合には使えません。

> この機会に(1)も知ることができました。これ、ある程度簡単でいいですネ!(XYの2次元の場合は)
> れい さん、ありがとうございました
>
> 多分セインさんの目的は、3次元の立体で、平面的な表面のレンダリングかと
> そのとき、ある1つの平面では(外から見た時に)境界を必ず時計回りに定義する、と決めておいたら
> 光(または視線)の方向に対して表が見えているか、裏が見えているかを
> 法線の向きで判定することが出来る・・・ということかと。(なんと大胆な思い込みの予測だろうか、ははっ)

んーと。

実は3次元でも同じ方法で可能なのです。
法線を求めるのにはこれが圧倒的に早いので、
ポリゴンの全頂点から面積を求めたりは普通はしないのです。

説明すると。

凸多角形なら、どの隣接する3点を選んでも、その外積は(符号付の)法線と同じ向きを向きます。
凹多角形の場合は、凹んだところの3点を選ぶとその外積は法線と反対の方向を向きます。
それ以外の凸な3点では正しい法線を返します。

ですので、凹多角形の場合は凸多角形に変形するか、凸な3点を取得できればいいことになります。
もちろん後者の方が早くて簡単です。

局所的に凸である3点を探す方法として、一次関数の最大値・最小値で探すという方法があります。
その特殊なタイプが前の投稿の方法で、
一次関数としてf(x,y)=xとf(x,y)=yを取ったわけです。計算無いから早いので。

で、これはそのまま3次元でも適用可能です。

一次関数(例えばf(x,y,z)=x)に、ポリゴンの全点を入れ、
最大値を示す頂点が1個、もしくは2個の場合、その前後の点の3点から、法線が求まります。
そうで無い場合は違う関数を使ってやり直します

これだけで、3次元中にある凹多角形の法線は計算できます。
捩れている場合はダメですが。

追記
また解決済みチェックを忘れた
解決済み
引用返信 編集キー/

<前の20件
トピック内ページ移動 / << 0 | 1 | 2 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -