geometry + Python > 四面体結合体 > 隠面の「頂点インデックス組合せ」を見つける > v0.1


動作環境
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 16.04 LTS desktop amd64
TensorFlow v1.2.1
cuDNN v5.1 for Linux
CUDA v8.0
Python 3.5.2
IPython 6.0.0 -- An enhanced Interactive Python.
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
scipy v0.19.1
geopandas v0.3.0
MATLAB R2017b (Home Edition)

背景

MATLAB > freeBoundary()を試してみた > tetmeshを処理してみた > 疑問点

MATLABにはfreeBoundary()というAPIがある。Numpyのビルトインにはない。
作るしかない(泥縄式開発方式: DDD[Doronawa Driven Development])

テストデータ

MATLAB > 四面体メッシュプロット > tetramesh() | view(30,30) | サブセット表示 tetramesh(tet(2:3,:),X)

上記にて隠面ありの四面体結合体の情報が得られている。

問題の整理

  • 三角形の座標が与えられる
  • 三角形の座標のインデックスの組合せが与えられる
  • 隠面となる三角形のインデックス組合せを求めよ

上記の例の三角形のインデックス(以下)を用いる。

MATLABコード。

>> load tetmesh
>> tet(2:3,:)

ans =

        1092         856        1094        1095
        1092        1095         896         856

解き方 (案)

思いついたのが以下。

異なる2つの四面体において、インデックスが3つ重なっていれば隠面である。

code v0.1

Python3コード。

alist = [ 1092, 856, 1094, 1095 ]
blist = [ 1092, 1095, 896, 856 ]
#print(alist)
#print(blist)

overlap = []
for elem in alist:
    if elem in blist:
        overlap += [ elem ]
print(overlap)
run
Success #stdin #stdout 0.02s 27704KB
[1092, 856, 1095]