Math 如何将.bas文件的输出打印为文本

Math 如何将.bas文件的输出打印为文本,math,plot,dos,astronomy,gw-basic,Math,Plot,Dos,Astronomy,Gw Basic,我正试图将一个程序的坐标输出打印到一个文本文件中,以便在另一个程序中使用它,但我对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)

我正试图将一个程序的坐标输出打印到一个文本文件中,以便在另一个程序中使用它,但我对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  ------------------------
810 REM形成球状
12雷姆
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输入“多少颗星”;T
27随机定时器
28 CLS:REM清除屏幕
对于I=1到T,为30
32 C=C0*RND:R=R1
34雷姆
36 REM现在找到R
K=1至5时为38
40 GOSUB 100
42 R=R+(C-C1)/D
44下一个K
46 REM三维场所
48 X=RND-.5
50 Y=RND-.5
52 Z=RND-.5
54 S1=SQR(X*X+Y*Y+Z*Z)
56如果S1>0.5,则转到48
58 REM点现在在球体中
60 R=R*S1:X=X*R:Y=Y*R:Z=Z*R
62 GOSUB 200
64下一个我
66完
68雷姆
100 REM牛顿-拉斐逊迭代
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返回
140雷姆
200 REM二维图
203屏幕9
205 X=X*S+X2:Y=Y*S+Y2
210如果X=YM,则为225
220 PSET(X,Y)
225返回
230雷姆------------------------
240雷姆出现在天文学杂志上
250 REM计算,天空和远程-
260 REM范围,1986年4月
270雷姆------------------------

以下是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()
我的指尖没有很好的三维散点图,但这里有一个由函数生成的50个点的屏幕截图,并使用名为“衍生”的计算机代数系统绘制:

最后一句话:我想知道源代码中是否有输入错误。线路

C0=P1*P1*R3/4

我觉得这很可疑,因为在数学中,
pi
出现平方是相当罕见的,尽管它确实发生过。可能那里应该只有一个因数
pi
(这将产生设置
C0
与半径球体的体积成比例的效果
R0
)。另一方面,我不知道这里到底发生了什么,所以我把它留在了里面。如果结果似乎有问题,您可以尝试使用该线。

如果您想要计算坐标的副本,只需添加这些线:

1 OPEN "PLOT.TXT" FOR OUTPUT AS #1
65 CLOSE #1
221 PRINT #1, X + "," + Y
程序将像以前一样工作,但除此之外,它还将坐标输出到名为plot.txt的文件中


将它们放在一个640x350大小的图像中(该大小是用户所要求的),您会得到相同的结果。

这个问题对于输出为#1:print#1,“whatever”的“plot.txt”来说是非常开放的,只是出于好奇:为什么要使用dos和basic?您使用哪个版本,因为现在更多的版本支持qbasicSee,特别是关于openI的章节现在没有时间,但它看起来有些有趣。如果今晚我有一个小时的时间,我会尝试做一个Python翻译。这主要是一个流程图的问题,然后找出什么样的现代控制结构,以使用印度的gotos和gosubs。我印象深刻!有时我会怀念主内存以KB为单位的时代……很好。你知道有什么方法可以在现代版本的Windows上运行这样的程序吗?如果你仍然使用32位版本的Windows,那么好的qbasic/gwbasic应该可以运行。另一种方法是使用dosbox.exe,它甚至可以在64位版本的Windows上运行。据说Qb64支持Windows、Linux、Android和MaxOSX上的旧basic程序,但我自己还没有尝试过。在虚拟机中运行Dos也可以,但有点夸张;-)
1 OPEN "PLOT.TXT" FOR OUTPUT AS #1
65 CLOSE #1
221 PRINT #1, X + "," + Y