在两个矢量之间创建一个角度vpython?

在两个矢量之间创建一个角度vpython?,python,vector,vpython,cartesian-coordinates,Python,Vector,Vpython,Cartesian Coordinates,我试图在两个向量之间使用vpython创建一个角度符号。这些向量是源向量和该向量的x-y投影。我正在使用vpython软件包,尤其是vpython的shapes模块中的arc from vpython import * import numpy as nump scene2 = canvas(title='Source Vector', width=800, height=600, center=vector(0,0,0), background=color.white)

我试图在两个向量之间使用vpython创建一个角度符号。这些向量是源向量和该向量的x-y投影。我正在使用vpython软件包,尤其是vpython的
shapes
模块中的
arc

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

我终于成功了。在jupyter笔记本中编写的代码的结果如附图所示。我正在使用Vpyton新版本,它可以在jupyter笔记本中运行

其中一个无法实现的是使用乳胶书写θ和α

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

我认为您需要更详细地描述一下您试图实现的目标和不起作用的目标。谢谢您的评论。我想在vpython中的两个向量之间创建一个闭合弧,然后用角度符号标记它。这两个矢量如附图所示,即源矢量及其在X-Y平面上的投影。什么是不工作的弧创建部分@skrx