ともさんのHP >プロブラミング >JAVAで幾何計算 >3Dポリゴンの交点

3Dポリゴンの交点を求める方法

3Dポリゴンと3D平面との交点を求めることができたのですが、ポリゴンどうしの交点を求めることはまだできないでいました。今回うまく作れたので方法を紹介します。

広告


ポリゴンと平面との交点

この場合はポリゴンを構成する辺(直線)と平面の交点を求め、辺の延長上の点を取り除けば良いので、あまり難しくはありませんでした。
平面と三角形の交点

これを応用してポリゴンをカットしたのが下の図です。
平面で切るので、当たり前ですが、単純な断面しか作ることが出来ません。
服のカット


ポリゴンとポリゴンとの交線

これも同様に双方の辺と面との交点を求めます。
下の図は様々な交点を示しています。
ポリゴンとポリゴンの交点

ここで困ったのは、交点が相手の辺の上にある場合です。辺の上にある場合は、三角形の内側とは判定されないので不具合がおきてしまいます。
ポリゴンの辺同士が重なるケースは、結構多いのです。
これをうまくなおして、辺上の交点も判定できるようにしました。

点が三角形の中にあるかどうかを知る方法

いきなりベクトルの話になります。
3D平面上に3点abcで構成される三角形をおき、同一平面上にある点dをおきます。
三角形と点

点dが三角形の中にあるかどうかは、ベクトルの外積を計算することで確かめることができます。
ベクトルabとベクトルadの外積を計算すると図のようになります。
ベクトルの外積

計算結果の絶対値はベクトルが作る平行四辺形の面積となります。
ベクトルabの進行方向左側に点dがある場合は、計算結果が+、右側にある場合は-、ベクトルABと同一線上に乗っている場合は0になります。
三角形ABCを一筆書きで囲むように三つのベクトルを作り、それぞれのベクトルで点dとの外積を計算します。Dが三角形の中にある場合、全ての外積計算結果が同一(+か-どちらか)になります。
三角形の中の点

外積の計算結果を見ることで点が内側にあるか否かを判定できるわけです。
三角形の辺の上にある場合は、計算結果が0になるので、この方法では辺上の点は除外されてしまいます。
では単純に0も含めていればいいかと言うと、そういうわけでもありません。辺の延長線上も含まれてしまいます。
三角形と辺の延長


辺の延長上を除外する方法

最初は三角形を包み込む外接円を描き、円の外側にある点を除外しようかと思いました。しかし3D上で外接円の中心点を計算するのがとても難しいので諦めました。
よく考えて単純に長さ関係から除外することにしました。
辺AB上の点Cが辺の内側にあるかどうかを知るには、
点AB間長さをDを計算する。
点AC間長さをEを計算する。
点BC間長さをFを計算する。
Eの長さもFの長さも、Dより小さければ、CはABの間にあります。
この方法で延長線上の点を除外することができました。
延長上の除外

これでポリゴンどうしの交点を求め、交線をひけるようになりました。
下の図は球体ポリゴン2つの交線をひいています。平面との交線では単純な交線しか引けませんでしたが、これで複雑な交線を引くことが出来るようになりました。
ポリゴン同士の交線

最終更新日: 2020-10-24 12:16:50

ともさんのHP >プロブラミング >JAVAで幾何計算 >3Dポリゴンの交点

広告
新着ページ

キャベツと白菜とブロッコリーを同時に育てる  
柿の落葉病・防除と対策  
柿の枝の剪定方法  
H8マイコンでLチカ  
H8でLED点灯  
AKIH83694FをPCに接続  
H8マイコン  
小屋を立て直す  
情報カードのデータベース化  
雑草でグリーンカーテン  
ミシン机(テーブル)の自作  

他のサイト

3D-CAD
洋裁CAD

いいねなど

 RSS 

Author: Tomoyuki Ito

このサイトの文章・写真の無断転載を禁じます