2017-09-05 5 views
3

Ich versuche ein Winkelsymbol mit vpython zwischen zwei Vektoren zu erstellen. Diese Vektoren sind der Quellenvektor und die x-y-Projektion dieses Vektors. Ich verwende das vpython-Paket und insbesondere arc aus dem shapes-Modul von vpython.Erstellen Sie einen Winkel zwischen zwei Vektoren 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

Ich glaube, Sie brauchen etwas ausführlichere zu beschreiben, was Sie versuchen und zu erreichen, was nicht funktioniert. – skrx

+0

Vielen Dank für Ihren Kommentar. Ich möchte einen geschlossenen Bogen zwischen zwei Vektoren in vpython erstellen und dann mit einem Winkelsymbol beschriften. Diese zwei Vektoren sind wie in der beigefügten Figur gezeigt, nämlich der Quellenvektor und seine Projektion in die X-Y-Ebene. Was funktioniert nicht im Arc-Erstellungsteil? @ skrx –

Antwort

2

Schließlich gelang es selbst zu machen. Das Ergebnis dieses in jupyter Notizbuch geschriebenen Codes ist in der begleitenden Figur gezeigt. Ich benutze vpython neue Version, die im jupyter Notizbuch laufen kann.

Ein dies konnte nicht erreicht werden, schreibt Theta und Alpha mit 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

Verwandte Themen