[파이썬과 STL]
5. 두 점과 평면의 교점 함수 사용해보기
지난시간에 정의한 함수를 사용해봅시다.
import numpy as np
def po2pl1(p,q,a,N):
P_p=np.dot(N,p)-np.dot(N,a)
P_q=np.dot(N,q)-np.dot(N,a)
result=P_p*P_q
if result>0:
print("no intersection point")
else :
return abs(P_q)/(np.abs(P_p)+np.abs(P_q))*p+abs(P_p)/(np.abs(P_p)+np.abs(P_q))*q
평면은 (0,5,0)을 지나고, 법선벡터로 (0,1,0)을 갖는 평면입니다.
a=np.array([0,5,0])
N=np.array([0,1,0])
점은 아래와 같이 세 점이 있습니다.
p1=np.array([10,0,0])
p2=np.array([0,10,0])
p3=np.array([0,0,10])
세 점중 어떤 두 점과 교점이 있을 경우 itcall 이라는 변수에 저장하도록 하는 코드입니다.
itcall=np.zeros(3)
itc1=po2pl1(p1,p2,a,N)
itc2=po2pl1(p1,p3,a,N)
itc3=po2pl1(p2,p3,a,N)
if type(itc1)==np.ndarray :
itcall=np.vstack((itcall,itc1))
if type(itc2)==np.ndarray :
itcall=np.vstack((itcall,itc2))
if type(itc3)==np.ndarray :
itcall=np.vstack((itcall,itc3))
itcall에 저장된 결과는 아래와 같습니다.
>>> itcall
array([[0., 0., 0.],
[5., 5., 0.],
[0., 5., 5.]])
더미 값이었던 첫행을 없애줍시다.
>>> itcall=itcall[1:,:]
>>> itcall
array([[5., 5., 0.],
[0., 5., 5.]])
'STL > stl- 기초 (numpy stl)' 카테고리의 다른 글
[파이썬과 STL] 4. 두 점과 평면의 교점 함수 (0) | 2020.11.12 |
---|---|
[파이썬과 STL] 3. 두 점과 평면의 교점 (0) | 2020.11.12 |
[파이썬과 STL] 2. STL 데이터 접근하기 (0) | 2020.11.12 |
[파이썬과 STL] 1. STL 불러오기 (0) | 2020.10.15 |
댓글