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)
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)