3

I am trying to create an angle symbol using vpython between two vectors. These vectors are the source vector and the x-y projection of this vector. I am using the vpython package and particularly arc from the shapes module of vpython.

from vpython import *
import numpy as nump


scene2 = canvas(title='Source Vector',
     width=800, height=600,
     center=vector(0,0,0), background=color.white)

scene2.select()

geophone = pyramid(pos=vector(0,0,0), size=vector(2,2,2),
                  color = color.green, up = vector(-1,0,0))

shot_loc = sphere(pos=vector(-20,30,-20), 
                size=vector(2,2,2), color= color.red)

shot_loc_label = label(pos=shot_loc.pos,
    text='Vib Shot', xoffset=-30,
    yoffset=30, space=10,
    height=12, 
    font='serif')

ray_vector = arrow(pos=vector(0,0,0),  axis=shot_loc.pos,
                   shaftwidth=0.2, color= color.blue, length  =40, headlength = 2, headwidth =1)

ray_vec_label = label(pos=(ray_vector.axis - ray_vector.pos)/2,
    text='Ray Vector', xoffset=-30,
    yoffset=30, space=10,
    height=12, 
    font='sans')

source_vector = arrow(pos=vector(0,0,0),  axis= vector(20,-30, 20),
                   shaftwidth=0.2, color= color.red, length  =30, headlength = 2, headwidth =1)

projection_of_source_vector = cylinder(pos=vector(0,0,0),  axis= vector(20,0, 20),
                   radius=0.2, color=color.green)

source_vec_label = label(pos=source_vector.axis,
    text='Source Vector', xoffset=30,
    yoffset=30, space=10,
    height=12, 
    font='sans')





plunge_angle = diff_angle(vector(20,0, 20),vector(20,-30, 20))

plung_arc = shapes.circle(radius=10, angle1=0, angle2=plunge_angle, np=10, rotate=90)



extrusion(path=[vector(20,0, 20), vector(20,-30, 20)], 
          shape=plung_arc)


x_axis = arrow(pos=vector(-50,0,0),  axis=vector(50,0,0), shaftwidth=0.2,
               color= color.black, length  =100, headlength = 2, headwidth =1)

z_axis = arrow(pos=vector(0,-40,0),  axis=vector(0,40,0), shaftwidth=0.2,
               color= color.black, length  =80, headlength = 2, headwidth =1)

y_axis = arrow(pos=vector(0,0,40),  axis=vector(0,0,-40), shaftwidth=0.2,
               color= color.black, length  =80, headlength = 3, headwidth =2)



T_x = text(text='X',
     align='center', color=color.black, pos = vector(-52,0,0), 
           billboard =True, height =2)

T_y = text(text='Z',
     align='center', color=color.black, pos = vector(0,-43,0),
           billboard =True, height =2)

T_z = text(text='Y',
     align='center', color=color.black, pos = vector(0,0, 43),
           billboard =True, height =2)

T_x.width = 2*T_x.width
T_y.width = 2*T_y.width
T_z.width = 2*T_z.width

3d cartisian

Khalil Al Hooti
  • 4,207
  • 5
  • 23
  • 40
  • I think you need to describe a bit more detailed what you're trying to achieve and what's not working. – skrx Sep 05 '17 at 14:36
  • Thank you for your comment. I would like to create a closed arc between two vectors in vpython and then label it with an angle symbol. These two vectors are as are shown in the attached figure, namely source vector and its projection into X-Y plane. What is not working the the arc creation part. @skrx – Khalil Al Hooti Sep 05 '17 at 14:56

1 Answers1

3

Finally managed to make it myself. The result of this code written in jupyter notebook is shown in the accompanying figure. I am using vpython new version which can run in jupyter notebook.

One this could not be accomplished is writing theta and alpha using Latex.

from vpython import *
import numpy as nump


scene2 = canvas(width=800, height=600,
     center=vector(0,0,0), background=color.white)

scene2.select()

geophone = pyramid(pos=vector(0,0,0), size=vector(2,2,2),
                  color = color.green, up = vector(-1,0,0))

geophone_label = label(pos=geophone.pos,
    text='Geophone', xoffset=-30,
    yoffset=-20, space=10,
    height=12, 
    font='sans')

shot_loc = sphere(pos=vector(-20,30,-20), 
                size=vector(2,2,2), color= color.red)

shot_loc_label = label(pos=shot_loc.pos,
    text='Vib Shot', xoffset=-30,
    yoffset=30, space=10,
    height=12, 
    font='sans')

ray_vector = arrow(pos=vector(0,0,0),  axis=shot_loc.pos,
                   shaftwidth=0.2, color= color.blue, length  =40, headlength = 2,
                   headwidth =1)

ray_vec_label = label(pos=(ray_vector.axis - ray_vector.pos)/2,
    text='Ray Vector', xoffset=-30,
    yoffset=30, space=10,
    height=12, 
    font='sans')

source_vector = arrow(pos=vector(0,0,0),  axis= vector(20,-30, 20),
                   shaftwidth=0.2, color= color.red, length  =30, headlength = 2,
                      headwidth =1)

projection_of_source_vector = cylinder(pos=vector(0,0,0),  axis= vector(20,0, 20),
                   radius=0.2, color=color.green)

source_vec_label = label(pos=source_vector.axis,
    text='Source Vector', xoffset=30,
    yoffset=30, space=10,
    height=12, 
    font='sans')




plunge_angle = diff_angle(vector(20,0, 20),vector(20,-30, 20))

plung_arc = shapes.arc(radius=10, angle1=0, angle2=-plunge_angle)

b = cross(vector(20,0, 20),vector(20,-30, 20))
norm_vector = norm(b)

extrusion(path=[vector(0,0, 0), norm_vector], 
          shape=plung_arc)

plunge_label = label(pos=vector(4,-4,4),
    text='α', xoffset=30,
    yoffset=-20, space=10,
    height=12, 
    font='sans')



back_azimuth_angle = diff_angle(vector(20,0, 20),vector(0,0, -1))
back_azimuth_arc = shapes.arc(radius=10, angle1=0, angle2=back_azimuth_angle)

c = cross(vector(20,0, 20),vector(0,0, -1))
norm_vector_azimth = norm(c)

extrusion(path=[vector(0,0, 0), norm_vector_azimth], 
          shape=back_azimuth_arc)

azimuth_label = label(pos=vector(3,0,-2),
    text='θ', xoffset=30,
    yoffset=30, space=10,
    height=12, 
    font='sans')


x_axis = arrow(pos=vector(-50,0,0),  axis=vector(50,0,0), shaftwidth=0.2,
               color= color.black, length  =100, headlength = 2, headwidth =1)

z_axis = arrow(pos=vector(0,-40,0),  axis=vector(0,40,0), shaftwidth=0.2,
               color= color.black, length  =80, headlength = 2, headwidth =1)

y_axis = arrow(pos=vector(0,0,40),  axis=vector(0,0,-40), shaftwidth=0.2,
               color= color.black, length  =80, headlength = 3, headwidth =1)



T_x = text(text='X',
     align='center', color=color.black, pos = vector(-52,0,0), 
           billboard =True, height =2)

T_y = text(text='Z',
     align='center', color=color.black, pos = vector(0,-43,0),
           billboard =True, height =2)

T_z = text(text='Y',
     align='center', color=color.black, pos = vector(0,0, 43),
           billboard =True, height =2)

T_x.width = 2*T_x.width
T_y.width = 2*T_y.width
T_z.width = 2*T_z.width

Cartesian system

Khalil Al Hooti
  • 4,207
  • 5
  • 23
  • 40