2017-09-05 123 views
3

我想在两个向量之间使用vpython创建一个角度符号。这些向量是这个向量的源向量和x-y投影。我正在使用vpython软件包,尤其是模块中的arc在两个向量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

+0

我认为你需要描述了一下更详细的你想要什么来实现的,什么是不工作。 – skrx

+0

谢谢您的评论。我想在vpython的两个向量之间创建一个闭合的弧,然后用角度符号标记它。这两个矢量如附图所示,即源矢量及其投影到X-Y平面。什么不是弧创建部分的工作。 @skrx –

回答

2

终于成功地让我自己。附图中显示了用jupyter笔记本编写的代码结果。我正在使用可以在jupyter笔记本中运行的vpython新版本。

无法完成的一件事就是使用Latex书写theta和alpha。

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

相关问题