#! /usr/bin/python3
# ===================================================================
# calculate a normal vector to a surface
#
# test order of points must be in clockwise order.
#
# +y +y
# test | test |
# #1 | p0 #2 | p2
# | |
# -x -------+-------- +x -x -------+-------- +x
# | |
# p2 | p1 p0 | p1
# | |
# -y -y
#
# ===================================================================
import normal_vector as nv
import numpy as np
# -------------------------------------------------------------------
# ---- main
# -------------------------------------------------------------------
if __name__ == '__main__':
import user_interface as ui
def display_normal_vector(p0,p1,p2,vec,xyzmax,verbose=True):
print()
if verbose:
print(f'p0 : {p0}')
print(f'p1 : {p1}')
print(f'p2 : {p2}')
print(f'va : {p1},{p0}')
print(f'vb : {p1},{p2}')
print(f'xyzmax : {xyzmax}')
print(f'normal vector: {vec} (numpy.cross(va,vb))')
print()
print('Test Creating Normal Vectors - Viewer at +Z infinity')
# ---------------------------------------------------------------
xyzmax = 100
pts = [ (50,50,0), (50,-50,0), (-50,-50,0) ]
p0 = pts[0]
p1 = pts[1]
p2 = pts[2]
print()
print('test 1, surface is X,Y plane, Z = 0')
vec = nv.create_normal_vector(p0,p1,p2,xyzmax)
display_normal_vector(p0,p1,p2,vec,xyzmax)
# ---------------------------------------------------------------
print()
print('test 2, surface is X,Y plane, Z = 0')
vec = nv.create_normal_vector(p2,p1,p0,xyzmax)
display_normal_vector(p2,p1,p0,vec,xyzmax)
ui.pause()