class point():
def __init__(self):
self.x = 0.0
self.y = 0.0
self.z = 0.0
def __str__(self):
return str(self.x)+" ,"+str(self.y)+" ,"+str(self.z)
def set(self, inx:float, iny:float, inz:float):
self.x = inx
self.y = iny
self.z = inz
return self
import numpy as np
def face_and_line(inface, inline):
p0 = inface[0]
p1 = inface[1]
p2 = inface[2]
pa = inline[0]
pb = inline[1]
diff = np.array([[pa.x-pb.x, p1.x-p0.x, p2.x-p0.x],
[pa.y-pb.y, p1.y-p0.y, p2.y-p0.y],
[pa.z-pb.z, p1.z-p0.z, p2.z-p0.z],
])
line_ab = np.array([[pa.x-p0.x],
[pa.y-p0.y],
[pa.z-p0.z]
])
try:
# 反矩陣
g = np.linalg.inv(diff)
m0 = np.array([[g[0][0], g[1][0], g[2][0]]])
m1 = np.array([[g[0][1], g[1][1], g[2][1]]])
m2 = np.array([[g[0][2], g[1][2], g[2][2]]])
t = m0*line_ab[0][0]+m1*line_ab[1][0]+m2*line_ab[2][0]
outx=(pa.x+t[0][0]*(pb.x-pa.x))
outy=(pa.y+t[0][0]*(pb.y-pa.y))
outz=(pa.z+t[0][0]*(pb.z-pa.z))
out_point= [outx,outy,outz]
except :
return [False,"erorr"]
if (t[0][1]+ t[0][2])<=1 and t[0][1]>=0 and t[0][2]>=0 :
return [True,out_point]
else:
return [False,out_point ]
def camera(start_point,insize,point_size):
all_line=[]
s=start_point.x**2+start_point.y**2
s=s**0.5
for z in range(0,insize[1]):
for xy in range(0,insize[0]):
px=point_size*start_point.y/s*(xy-insize[0]/2)
py=point_size*start_point.x/s*(xy-insize[0]/2)
pz=point_size*(-z+insize[1]/2)
pl= point().set(start_point.x*0.5+px ,start_point.y*0.5+py ,start_point.z+pz)
all_line.append(pl)
pass
pass
return all_line