動作環境
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
処理概要
- 星形の頂点座標が与えられる
- 辺を取得
- 中心からrayを飛ばす
- rayと交差する辺を探す
使用モジュール
- geometry_starShaped_180415 v0.1
- geometry_lineintersect_180415 v0.2
code v0.1
Jupyter
find_rayCrossing_starShapedEged_180417.ipynb
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from pylab import rcParams
from itertools import combinations
import geometry_starShaped_180415 as GSS
import geometry_lineintersect_180415 as GLI
'''
v0.1 Apr. 17
- check the crossing
+ import [geometry_lineintersect_180415]
- define the ray from the center
+ draw the ray
+ add [xs_ray], [ys_ray]
+ add [theta_deg]
- add idxs_seq[], combs[]
- import [combinations]
- branched from [geometry_starShaped_180414.ipynb]
'''
rcParams['figure.figsize'] = 14, 7
rcParams['figure.dpi'] = 110
# 1. obtain star shaped points
RAD_INNER = 5
RAD_OUTER = 10
xs_str, ys_str = GSS.get_starShaped(RAD_INNER, RAD_OUTER)
# 2. obtain combinations of points
idxs_seq = range(len(xs_str)) # sequential indices to obtain combinations
combs = [] # combinations to obtain all the edges
for acomb in combinations(idxs_seq, 2):
combs += [acomb]
print(combs)
# 3. define the ray from the center
theta_deg = 0.0 # [deg] 0 for rightward direction, 90 for downward direction
radius = RAD_OUTER * 1.1 # 1.1 to cross the outmost edge
xs_ray, ys_ray = [0.0], [0.0] # center
xs_ray += [radius * np.cos(np.deg2rad(theta_deg))] # outmost
ys_ray += [radius * np.sin(np.deg2rad(theta_deg))] # outmost
print(xs_ray, ys_ray)
fig = plt.figure()
ax1 = fig.add_subplot(1, 2, 1)
ax1.scatter(xs_str, ys_str)
ax1.set_xlabel('x')
ax1.set_ylabel('y')
ax1.plot(xs_ray, ys_ray)
ax1.grid(True)
# 4. find crossing edges
a1 = np.array([xs_ray[0], ys_ray[0]])
a2 = np.array([xs_ray[1], ys_ray[1]])
for aidx in combs:
print(aidx, end='')
b1 = np.array([xs_str[aidx[0]], ys_str[aidx[0]]])
b2 = np.array([xs_str[aidx[1]], ys_str[aidx[1]]])
res = GLI.is_intersected(a1, a2, b1, b2)
# print(res)
#if res:
# ax1.plot(b1, b2)
if res:
xs_draw = [b1[0], b2[0]]
ys_draw = [b1[1], b2[1]]
ax1.plot(xs_draw, ys_draw)
fig.tight_layout()
実行
- 成功?: 交差する辺だけを拾っている
- 不具合: divide by zeroエラー発生
- 不具合: pentagonの辺まで見つかっている
はまり
Matplotlibのplot()は(xs, ys)を渡す。(1つ目の点、2つ目の点)を間違って渡して3分ハマった。