这是我要执行的代码,但是显示了一些我无法理解的错误:
GlowScript 2.7 VPython
### INITIALIZE VPYTHON
# -----------------------------------------------------------------------
# -*- coding: utf-8 -*-
from __future__ import division
from visual import *
get_library('https://cdn.rawgit.com/PERLMSU/physutil/master/js/physutil.js')
#from physutil import *
from visual.graph import *
### ΔΗΜΙΟΥΡΓΙΑ ΣΤΟΙΧΕΙΩΝ ΓΡΑΦΙΚΩΝ, ΕΞΟΜΟΙΩΣΗΣ, ΟΠΤΙΚΟΠΟΙΗΣΗΣ ΚΑΙ ΧΡΟΝΟΥ
# ------------------------------------------------------------------------
# ΔΗΜΙΟΥΡΓΙΑ ΠΑΡΑΘΥΡΟΥ ΤΙΤΛΟΥ
scene.title = "Horizontal Projectile" #Ορισμός τίτλου
scene.width= 1000
scene.center=vector (500,0,0)
scene.height= 1000
scene.background = (color.black) #Ορισμός ως χρώμα του background το μαύρο
scene.fullscreen = False
# ΔΗΜΙΟΥΡΓΙΑ ΑΝΤΙΚΕΙΜΝΕΝΩΝ ΣΚΗΝΙΚΟΥ (οι μονάδες ειναι σε μέτρα)
field = box(pos = vector(625, 0, 0), size = vector(1250, 0.5, 100), color = color.green, opacity = 0.5) #Δημιουργία του "γήπεδου" ως αντικείμενο box και ορίζονται τα χαρακτηριστικά του οπως διάνυσμα θεσης, μεγεθος, χρώμα και χρωματική διαπερατότητα.
ball = sphere(radius = 5, color = color.blue) #Δημιουργία της "μπάλας" ως αντικείμενο sphere.Ορισμός των χαρακτηριστικών του όπως ακτίνα και χρώμα.
# ΔΗΜΙΟΥΡΓΙΑ ΣΥΣΤΗΜΑΤΟΣ ΑΞΟΝΩΝ - Define axis marks the field with a specified number of tick marks
xaxis = PhysAxis(field, 6, # Ορισμός αριθμού των σημείων τιμών του άξονα Χ
axisType = "x", # Ορισμός ώς οριζόντιος άξονας.
labelOrientation = "down",
startPos = vector(0,0,0),
length = 1000) # Ορισμός αριθμού των σημείων τιμών του άξονα Υ
yaxis = PhysAxis(field, 6, # Ορισμός ώς κατακόρυφος άξονας.
axisType = "y",
labelOrientation = "left",
startPos = vector(0, 0, 0), #Ορισμός αρχής του άξονα Υ ίδιο με αυτής του άξονα Χ
length = 500) #Μονάδες ειναι σε μέτρα
# ΔΗΜΙΟΥΡΓΙΑ ΠΑΡΑΘΥΡΟΥ ΓΡΑΦΙΚΩΝ ΠΑΡΑΣΤΑΣΕΩΝ.--Set up graph with two plots
posgraph = PhysGraph(4, backgroundColor = color.black, xlabel=u'Χρόνος (sec)', #Δημιουργία 4 γραφικών παραστάσεων, ορισμός χρώματος υπόβαθρου το μαύρο, ορισμός ονόματος του άξονα Χ
ylabel=u'Θέση Χ (m)-[Kόκκινο], Θέση Υ (m)-[Πράσινo], Ux (m/s)-[Μπλέ], Uy (m/s)-[Κίτρινο]') #Ορισμός ονόματος του άξονα Υ τα ονόματα των γραφικών παραστάσεων και τα αντίστοιχα χρώματα τους
# ΔΗΜΙΟΥΡΓΙΑ ΙΧΝΟΥΣ ΓΙΑ ΤΗΝ ΑΠΟΤΥΠΩΣΗ ΤΗΣ ΤΡΟΧΙΑΣ ΤΟΥ ΣΩΜΑΤΟΣ Set up trail to mark the ball's trajectory
trail = curve(color = color.white, radius = 1) #Ορισμός χρώματος και ακτίνας της καμπύλης του ίχνους. Οι μονάδες είναι σε μέτρα.
# ΔΗΜΙΟΥΡΓΙΑ ΠΕΔΙΟΥ ΚΙΝΗΣΗΣ ΤΟΥ ΣΩΜΑΤΟΣ--Set up motion map for ball
motionMap = MotionMap(ball, 5, #Αναμοενόμενος χρόνος ολοκλήρωσης προσομοίωσης.
4, #Αριθμός σημείων τροχιάς ανά αναμενόμενο χρόνο προσομοίωσης
markerScale=0.5,
labelMarkerOffset = vector(0, -20, 0),
dropTime = False) #Αν η τιμή είναι True εμφανίζει τη χρονική στιγμή του κάθε σημείου τροχιάς.
# ΟΡΙΣΜΟΣ ΧΡΟΝΟΜΕΤΡΟΥ ΣΤΟ ΠΑΡΑΘΥΡΟ ΠΡΟΣΟΜΟΙΩΣΗΣ Set timer in top right of screen
timerDisplay = PhysTimer(200, 200) #Ορισμός θέσης χρονόμετρου της εξομοίωσης(οι μονάδες είναι σε μέτρα)
### ΟΡΙΣΜΟΣ ΠΑΡΑΜΕΤΡΩΝ ΚΑΙ ΑΡΧΙΚΩΝ ΣΥΝΘΗΚΩΝ ΠΡΟΣΟΜΟΙΩΣΗΣ.
# ----------------------------------------------------------------------------------------
# Ορισμός παραμέτρων
ball.m = 0.6 # Μάζα σώματος σε κιλά Kg-mass of ball in kg
ball.pos = vector(0,100, 0) # Αρχική θέση σώματος σε μορφή συντεταγμένων (x,y,z), οι μονάδες είναι σε μέτρα.
ball.v = vector(150, 0, 0) # Αρχική ταχύτητα σώματος σε μορφή συντεταγμένων (Ux,Uy,Uz), οι μονάδες είναι σε m/s.
Xrand=50
g = vector(0, -9.81, 0) # Επιτάχυνση σώματος λόγω της βαρύτητας σε μορφή συντεταγμένων (ax,ay,az), οι μονάδες είναι σε m/s/s.
# Ορισμός χρονικών παράμετρων
t = 0 # Αρχική τιμή χρόνου
deltat = 0.001 # Ορίζεται το βήμα του χρόνου της εξομοίωσης.
scene.autoscale = False
### ΒΡΟΓΧΟΣ ΥΠΟΛΟΓΙΣΜΟΥ ΤΩΝ ΕΞΙΣΩΣΕΩΝ ΠΕΡΙΓΡΑΦΗΣ ΤΗΣ ΕΞΟΜΟΙΩΣΗΣ ΚΑΙ ΣΧΕΔΙΑΣΜΟΣ ΓΡΑΦΙΚΩΝ.
# ------------------------------------------------------------------------------------
while ball.pos.y > 0 : #Συνάρτηση που επιτρέπει να συνεχίζει να τρέχει ο κώδικας για όσο η τιμή της θέσης του σώματος στον Υ είναι > 0.
# Απαιτειται ώστε να ειναι ορατή η εξέλιξη της εξομοίωσης/ ανανέωση ομαλή ώστε
#να μην εκτελείται το πρόγραμμα περισσότερες από 1000 φορές/sec)
rate(1000)
Fnet = ball.m * g # Υπολογισμός ολικής δύναμης όπου δέχεται το σώμα
ball.v = ball.v + (Fnet/ball.m * deltat) # Συνάρτηση υπολογισμού και ανανέωσης ταχύτητας σώματος της μορφής (U=Uo+a*t) χρησιμοποιώντας το 2ο Νόμο Νεύτωνα.
#ballv = ball.v + (Fnet/ball.m * deltat)
ball.pos = ball.pos + ball.v * deltat
if ball.pos.y<=0:
break
#ball.v=ballv
#ball.pos = ballxy # Συνάρτηση υπολογισμού και ανανέωσης θέσης σώματος κάθε χρονική στιγμή της μορφής (X=Xo+U*t).
# Update motion map, graph, timer, and trail
motionMap.update(t, ball.v)
posgraph.plot(t, ball.pos.x, ball.pos.y, ball.v.x, ball.v.y) #Δημιουργία γραφικής παράστασης για X,Y,Ux,Uy ως προς τον χρόνο
trail.append(pos = ball.pos)
timerDisplay.update(t)
t = t + deltat # Ανανέωση χρόνου εξέλιξης της προσομοίωσης
### ΑΠΟΤΕΛΕΣΜΑ ΚΩΔΙΚΑ
# --------------------------------------------------------------------------------------
# Print the final time and the ball's final position
print ('Ο χρόνος που χρειάζεται για να φτάσει στο έδαφος είναι t='), t,'sec' #Εντολή υπολογισμού και εκτύπωσης χρόνου οριζόντιας βολής
print ('\n') #Κενή γραμμή.
#print 'Το βεληνεκές ειναι:' ,ball.pos.x,"m" #Εντολή υπολογισμού και εκτύπωσης βεληνεκούς οριζόντιας βολής.
#print "\n" #Κενή γραμμή.
#print u'Η τελική θέση στον άξονα Y ειναι:' ,ball.pos.y, "m" #Εντολή υπολογισμού και εκτύπωσης βεληνεκούς οριζόντιας βολής.
#print "\n" #Κενή γραμμή.
#print u'Η συνιστώσα της ταχύτητας στον άξονα Χ τη χρονική στιγμή πριν ακουμπήσει το έδαφος είναι:', ball.v.x, "m/s" #Εντολή υπολογισμού και εκτύπωσης οριζόντιας συνιστώσας ταχύτητας της οριζόντιας βολής.
#print "\n" #Κενή γραμμή.
#print u'Η συνιστώσα της ταχύτητας στον άξονα Y τη χρονική στιγμή πριν ακουμπήσει το έδαφος είναι:', ball.v.y, "m/s" #Εντολή υπολογισμού και εκτύπωσης κατακόρυφης συνιστώσας ταχύτητας της οριζόντιας βολής.
#print "\n" #Κενή γραμμή.
#print u'Ο λόγος του βεληνεκούς προς την αρχική ταχύτητα του σώματος (s/u) ειναι:', ball.pos.x/ball.v.x #Εντολή υπολογισμού και εκτύπωσης του λόγοςυ του βεληνεκούς προς την αρχική ταχύτητα του σώματος (s/u).
#print "\n" #Κενή γραμμή.
#print u' Η κατακόρυφη μετατόπιση του σώματος όταν στον άξονα των Χ βρίσκεται στη θέση Χ=', Xrand, u'm είναι:', (g.y*Xrand**2/(2*ball.v.x**2)) ,"m" #Εντολή υπολογισμού και εκτύπωσης κατακόρυφης μετατόπισης του σώματος από το αρχικό του ύψος της οριζόντιας βολής.
#print "\n"
#print ball.pos
此代码显示以下错误:
ReferenceError: PhysAxis is not defined
ReferenceError: PhysAxis is not defined
At or near line 29: xaxis = PhysAxis(field, 6,
这是第一个错误,可能还会有更多错误。该代码在Windows计算机上使用vidle和vpython成功执行,但是GlowScript不接受它。该错误似乎与我在代码的第8行上导入的PhysUtil库有关。另外,该代码是PhysUtil网站上的有效示例。在我的Windows机器中,定义了PhysAxis类,但是显然在Javascript文件中未定义。我找不到文件有什么问题。对于我想要的用途,GlowScript是必不可少的。
如果找不到PhysUtil库:
https://perlmsu.github.io/physutil/installation/
最佳答案
这个问题在GlowScript论坛中得到解决。