본문 바로가기
STL/stl- 기초 (numpy stl)

[파이썬과 STL] 5. 두 점과 평면의 교점 함수 사용해보기

by 만다린망고 2020. 11. 12.
반응형

[파이썬과 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.]])


반응형

댓글