我正在尝试将程序的坐标输出打印到文本文件,以便在另一个程序中使用它,但我对GWBASIC及其第一次使用MS-DOS时并不知道。我需要它打开一个名为plot.txt的文本文件并在那里打印输出并保存它而不实际绘制GWBASIC。这是我在旧杂志中找到的程序。
810 REM MAKE A GLOBULAR
12 REM
14 R0=20: R2=R0*R0: R3=R2*R0
16 P1=3.14159265#
18 C0=P1*P1*R3/4
20 R1=R0/SQR(2)
22 XM=512: YM=512
24 X2=XM/2: Y2=YM/2: S=5
26 INPUT "HOW MANY STARS ";T
27 RANDOMIZE TIMER
28 CLS: REM CLEAR SCREEN
30 FOR I=1 TO T
32 C=C0*RND: R=R1
34 REM
36 REM NOW FIND R
38 FOR K=1 TO 5
40 GOSUB 100
42 R=R+(C-C1)/D
44 NEXT K
46 REM 3-DIMENSIONAL PLACE
48 X=RND-.5
50 Y=RND-.5
52 Z=RND-.5
54 S1=SQR(X*X+Y*Y+Z*Z)
56 IF S1>.5 THEN GOTO 48
58 REM POINT IS NOW IN SPHERE
60 R=R*S1: X=X*R: Y=Y*R: Z=Z*R
62 GOSUB 200
64 NEXT I
66 END
68 REM
100 REM NEWTON-RAPHSON ITERATION
105 A=R/R0
110 C1=ATN(A)*.5*R3
115 A=1+A*A
120 C1=C1+R*.5*R2/A
125 C1=P1*(C1-R*R2/(A*A))
130 D=4*P1*R*R/(A*A*A)
135 RETURN
140 REM
200 REM 2-DIMENSIONAL PLOT
203 SCREEN 9
205 X=X*S+X2: Y=Y*S+Y2
210 IF X<0 OR Y<0 THEN 225
215 IF X>=XM OR Y>=YM THEN 225
220 PSET(X,Y)
225 RETURN
230 REM ------------------------
240 REM APPEARED IN ASTRONOMICAL
250 REM COMPUTING, SKY & TELE-
260 REM SCOPE, APRIL, 1986
270 REM ------------------------
答案 0 :(得分:1)
这是Python 3的释义:
#globular.py
#Python paraphrase of model.bas from
#http://www.skyandtelescope.com/wp-content/uploads/model.bas
from math import pi, sqrt, atan
from random import uniform, random
#Global variables:
r0 = 20.0
r2 = r0**2
r3 = r0**3
c0 = pi**2*r3/4
r1 = r0/sqrt(2)
def NRI(c,r):
#Newton-Raphson Iteration
a = r/r0
c1 = atan(a)*0.5*r3
a = 1+a**2
c1 += r*0.5*r2/a
c1 = pi*(c1-r*r2/a**2)
d = 4*pi*r**2/a**3
return (c1,d)
def makeStars(t):
stars = []
for i in range(t):
c = c0*random()
r = r1
for k in range(5):
c1,d = NRI(c,r)
r += (c-c1)/d
while True:
x = uniform(-0.5,0.5)
y = uniform(-0.5,0.5)
z = uniform(-0.5,0.5)
s1 = sqrt(x**2 + y**2 + z**2)
if s1 <= 0.5: break
r *= s1
x *= r
y *= r
z *= r
stars.append((x,y,z))
return stars
def starsToFile(t,fname):
stars = makeStars(t)
f = open(fname,'w')
for star in stars:
print(*star, sep = ', ',file = f)
f.close()
我跳过了有关打印x
和y
的部分,而是编写了一个函数makeStars
来返回(x,y,z)
元组的列表,以及一个相关的函数这样的输出并将其发送到文本文件。最后一个函数是使用Python 3而不是Python 2的唯一函数。如果您使用的是Python 2,则可以从以后导入Python 3的打印函数。
在Python shell中键入starsToFile(100,'stars.txt')
给了我一个文本文件,开头:
-0.32838465248713156, -0.3294895266926551, -1.2963580524762535
14.20224408569865, 1.4434961933043464, 6.450969593697097
1.6525937589658193, -0.24447292610082685, 1.0543647986350608
1.5707528567123823, 5.190972598268825, -2.0054790217091134
我的指尖没有很好的三维散点图,但这里是一个由函数生成的50点的屏幕截图,并使用名为Derive的计算机代数系统绘制:
最后评论:我想知道源代码中是否有拼写错误。这条线
C0=P1*P1*R3/4
让我感到怀疑,因为pi
数学中很少出现平方 - 尽管确实发生了。也许那里应该只有pi
的1个因子(这样会产生C0
与半径R0
球体积成正比的效果)。另一方面,我不确切知道这里发生了什么,所以我把它留在了里面。如果结果看起来有问题,你可以试试那条线。
答案 1 :(得分:1)
如果您想要计算坐标的副本,只需添加以下行:
1 OPEN "PLOT.TXT" FOR OUTPUT AS #1
65 CLOSE #1
221 PRINT #1, X + "," + Y
该程序将像以前一样工作,但除此之外,它将坐标输出到名为plot.txt的文件
将它们放入尺寸为640x350的图像中(SCREEN 9
需要该尺寸)并获得相同的结果。