content: # -*- coding: utf-8 -*-
  
  import os
  import seaborn
  
  seaborn.set()
  colors = seaborn.color_palette()
  
  import utils
  
  # For 3D plotting we need to import some extra stuff
  from mpl_toolkits.mplot3d import Axes3D
  
  # First create two random vectors in 3 dimensional space
  v1 = rand(3, 1)
  v2 = rand(3, 1)
  
  # And scale them to unit length
  v1 = v1 / norm(v1)
  v2 = v2 / norm(v2)
  
  # Plot the vectors
  o = zeros(3)  # origin
  
  # We'll use the object oriented plotting interface
  f = figure(figsize=(8, 8))
  ax = f.add_subplot(111, projection="3d", axisbg="white")
  ax.plot(*[[o[i], v1[i]] for i in range(3)], linewidth=3, label="vector1")
  ax.plot(*[[o[i], v2[i]] for i in range(3)], linewidth=3, label="vector2")
  for axisl in ["x", "y", "z"]:
      getattr(ax, "set_%slabel" % axisl)(axisl)  # Here's a fun trick
  legend()
  
  f = figure(figsize=(8, 8))
  ax = f.add_subplot(111, projection="3d", axisbg="white")
  ax.plot(*[[o[i], v1[i]] for i in range(3)], linewidth=3, label="vector1")
  ax.plot(*[[o[i], v2[i]] for i in range(3)], linewidth=3, label="vector2")
  for axisl in ["x", "y", "z"]:
      getattr(ax, "set_%slabel" % axisl)(axisl)  # Here's a fun trick
  legend()
  
  for i in range(100):
      # generate a point that is a weighted sum of the 2 vectors
      w1 = randn(1)
      w2 = randn(1)
      point = w1 * v1 + w2 * v2
      ax.plot(*point, marker=".", color="k")
  
  # We can find a vector that is orthogonal to the plane defined by v1 and v2
  # by taking the vector cross product.  See the wikipedia page for a
  # definition of cross product
  # Must be right shape for cross()
  v3 = cross(v1.reshape(1, 3), v2.reshape(1, 3)).squeeze()
  ax.plot(*[[o[i], v3[i]] for i in range(3)],
          linewidth=3, label="orthogonal vector")
  legend()
  
  print(v3[0] * v1[0] + v3[1] * v1[1] + v3[2] * v1[2])
  print(dot(v3, v1))
  
  theta = arccos(dot(v2.T, v1)).squeeze()
  # and radians can be converted to degrees
  theta_deg = theta * (180 / pi)
  print(theta, theta_deg)
  
  os.system("pause")
  