Import libraries

import pynamics
from pynamics.system import System
from pynamics.frame import Frame
from pynamics.variable_types import Constant
import sympy
import matplotlib.pyplot as plt
import numpy

Initialize pynamics

system = System()
pynamics.set_system(__name__,system)

Create four constants, a,b,c,d

a = Constant(3,'a',system)
b = Constant(2,'b',system)
c = Constant(2,'c',system)
d = Constant(3,'d',system)

create a single frame for describing kinematics

N = Frame('N',system)

Describe kinematics for origin, o, and two vectors, v1 and v2

o = 0*N.x+0*N.y
v1 = a*N.x+b*N.y
v2 = c*N.x+d*N.y

create a two-point line segment and substitute literals for symbols in v1 to create v1n

v1n = [o,v1]
v1n = [item.subs(system.constant_values) for item in v1n]        
v1n = [(item.dot(N.x),item.dot(N.y)) for item in v1n]
v1n = numpy.array(v1n,dtype=float)
print(v1n)
[[0. 0.]
 [3. 2.]]

substitute literals for symbols in v1 to create v2n

v2n = [v2,]
v2n = [item.subs(system.constant_values) for item in v2n]        
v2n = [(item.dot(N.x),item.dot(N.y)) for item in v2n]
v2n = numpy.array(v2n,dtype=float)
print(v2n)
[[2. 3.]]

plot v1n as a blue line and v2n as vertex

plt.plot(v1n[:,0],v1n[:,1],'b-')
plt.plot(v2n[:,0],v2n[:,1],'ro')
plt.axis('equal')
(-0.15000000000000002, 3.15, -0.15000000000000002, 3.15)

png

normalize v1 as v3

v3 = v1.dot(v2)/(v1.dot(v1))*v1
print(v3)
a*N.x*(a*c + b*d)/(a**2 + b**2) + b*N.y*(a*c + b*d)/(a**2 + b**2)

substitute literals for symbols in o and v3 to create v3n

v3n = [o,v3]
v3n = [item.subs(system.constant_values) for item in v3n]        
v3n = [(item.dot(N.x),item.dot(N.y)) for item in v3n]
v3n = numpy.array(v3n,dtype=float)
print(v3n)
[[0.         0.        ]
 [2.76923077 1.84615385]]

plot v1n, v2n, and v3n

plt.plot(v1n[:,0],v1n[:,1],'b-')
plt.plot(v2n[:,0],v2n[:,1],'ro')
plt.plot(v3n[:,0],v3n[:,1],'ro-')
plt.axis('equal')
(-0.15000000000000002, 3.15, -0.15000000000000002, 3.15)

png