Проблема с осью v python, принимает только такой вектор, как (1,0,0) ie одна ось, а не что-то вроде (2,2,1) - PullRequest
1 голос
/ 27 января 2020

Python 3.7.4 с V python 7.5.1. Когда не «простой» вектор, такой как (1,0,0), он отображает сцену без стрелки или не отображается вообще. Я хочу отобразить треугольник и показать стрелку, изображающую нормаль от поверхности. Программа отображает оси координат со стрелками и сферой. Когда я пробую какие-либо значения в стрелке нормы, иногда отображение не выполняется, а иногда отображается, но не со стрелкой нормы. Это работает, если я введу векторы (1,0,0) или (0,1,0) и т. Д. c, но не для, например, (2,2,0). Попробовал все, что мог придумать в течение нескольких дней

###################################
                                 ##
from vpython import *            ##
import numpy as np               ##
                                 ##
###################################

# Python 3.7.4 with Vpython 7.5.1

#=====================================================================================================##
                                                                                                      ##
def axisArrows():                                                                                     ##
#                                                                                                     ##
    al = 10.0 #arrow length                                                                           ##
    Xarrow = arrow(pos=vector(0,0,0), shaftwidth=.2,length=al, axis=vector(1,0,0), color=color.red)   ##
    Yarrow = arrow(pos=vector(0,0,0), shaftwidth=.2,length=al, axis=vector(0,1,0), color=color.green) ##
    Zarrow = arrow(pos=vector(0,0,0), shaftwidth=.2,length=al, axis=vector(0,0,1), color=color.blue)  ##
    sphere(radius=0.5)                                                                                ##
    return                                                                                            ##
#=====================================================================================================##

# Scene
# =====
canvas(title='Triangles', background=vector(.8,.9,.05), x=350, y=0, width=2000, height=1100)

# AxisArrows
# ==========
axisArrows()

# Triangle Coords
# ===============
va=vector(-5,7,-5)
vb=vector(7,-3,2)
vc=vector(5,7,0)
vd=vector(5,7,0)

# Convert coords to numpty array
# ==============================
p1 = np.array([va.x,va.y,va.z])
p2 = np.array([vb.x,vb.y,vb.z])
p3 = np.array([vc.x,vc.y,vc.z])

# Calc average and normal  (vn, normal to triangles plane)
# =======================
#
    # normal (a vector)
N  = np.cross(p2-p1, p3-p1)
print("p1= ", p1, "N = ", N)
N=N/50
vn = vector(N[0],N[1],N[2])  # vector for normal arrow
print("    vn= ", vn)
    # average (a vector)
average = (va+vb+vc+vd)/4
print("   Average = ", average)

sphere(radius=.5,pos=average)     #                           ******************
    # Display the norm arrow                                  ******************
N_arrow = arrow(pos=vector(average), shaftwidth=.2, length=4, axis=vector(0,0,2), color=color.blue)  
#                                                             ******************
#                                                             ******************

#                                                             vector(0,0,2) shows, vector(0,2,2) doesn't
# Create a triangle (quad with two vertices the same)         most value don't work
# =================
a = vertex(pos=va,color=color.red)
b = vertex(pos=vb,color=color.green)
c = vertex(pos=vc,color=color.blue)
d = vertex(pos=vd,color=color.white)

tr1 = quad(v0=a,v1=b,v2=c,v3=d)

1 Ответ

0 голосов
/ 05 февраля 2020

Хорошо, это определенно ошибка V Python. ОЧЕНЬ странно, это не отображается в GlowScript V Python, несмотря на тот факт, что V Python 7 использует ту же графическую библиотеку GlowScript. Развернув его, второй из следующих двух операторов, которые должны быть выполнены, создает деформированную стрелку:

стрелка (pos = ve c (1,0,0), axis = vector (1,1,0) ), color = color.red) стрелка (pos = вектор (0,0,0), ось = вектор (-1,1,0), color = color.green)

И если вы сделаете первая стрелка имеет ось = ve c (0,1,0), вторая стрелка даже не появляется, как вы видели. На данный момент я (1) понятия не имею, что случилось, и (2) очень странно, что об этой ошибке ранее не сообщалось.

Я прокомментирую, что для вопросов V Python лучше отправлять сообщения форум V Python, где гораздо больше пользователей V Python увидят ваш вопрос, чем если вы отправите сообщение в stackoverflow:

https://groups.google.com/forum/?fromgroups&hl=en#! forum / v python -users

...