geometry > line | Polygon > 平面の頂点からnormalベクターを計算する


動作環境
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 16.04.4 LTS desktop amd64
TensorFlow v1.7.0
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)
ADDA v.1.3b6
gnustep-gui-runtime v0.24.0-3.1
PyMieScatt v1.7.0

http://geomalgorithms.com/a05-_intersect-1.html
Line, Polygonのintersectionの式ではPolygonのnormalベクターを使う。

Polygonの座標だけが与えられた場合、normalベクターの計算は下記に紹介されている。
http://kitchingroup.cheme.cmu.edu/blog/2015/01/18/Equation-of-a-plane-through-three-points/

試してみた。

test_plane_eq_180430.ipynb
import numpy as np

DIST_VAL = 7
p1 = np.array([DIST_VAL, 0, 0])
p2 = np.array([0, DIST_VAL, 0])
p3 = np.array([DIST_VAL, DIST_VAL, DIST_VAL])

v1 = p3 - p1
v2 = p2 - p1
print(v1)
print(v2)
cp = np.cross(v1, v2)
a, b, c = cp

print(a,b,c)

3D Vector Plotterで確認。
https://academo.org/demos/3d-vector-plotter/

normalベクターになっているようだ。

内向き、外向き、どちらのnormalベクターになるかは、頂点の取り方に依存する。