BBC Basic, 300 karakter ASCII, berukuran 260 file
INPUTr,s,u,v,l:r*=8s*=8u*=8v*=8l*=8z=0REPEATz+=1E-3UNTILFNs(z)/z>=SQR(l^2-(v-s)^2)/(u-r)a=(u-r)/2/z
p=(r+u-a*LN((l+v-s)/(l-v+s)))/2q=(v+s-l*FNc(z)/FNs(z))/2MOVE800,0DRAW0,0DRAW0,800CIRCLEu,v,8CIRCLEr,s,8FORx=r TOu
DRAW x,a*FNc((x-p)/a)+q
NEXT
DEFFNs(t)=(EXP(t)-EXP(-t))/2
DEFFNc(t)=(EXP(t)+EXP(-t))/2
Emulator di http://www.bbcbasic.co.uk/bbcwin/bbcwin.html
Ini jelas telah dipecahkan sebelumnya, jadi hal pertama yang saya lakukan adalah melihat apa yang telah dilakukan orang lain.
Persamaan catenary yang berpusat pada asal adalah sederhana y=a*cosh(x/a). Menjadi sedikit lebih rumit jika tidak berpusat pada titik asal.
Berbagai sumber mengatakan bahwa jika panjang dan titik akhir diketahui nilai untuk aharus ditentukan secara numerik. Ada parameter yang tidak ditentukan hdalam artikel wikipedia. Jadi saya menemukan situs lain dan pada dasarnya mengikuti metode di sini: http://www.math.niu.edu/~rusin/known-math/99_incoming/catenary
BBC Basic tidak memiliki sinhdan coshbawaan, jadi saya mendefinisikan dua fungsi di akhir program untuk menghitung penggunaannyaEXP
koordinat untuk titik kiri harus disediakan sebelum titik kanan, OP mengonfirmasi ini OK. Panjang diberikan terakhir. Nilai dapat dipisahkan dengan koma atau baris baru.
Kode tidak dikunci
INPUT r,s,u,v,l
REM convert input in range 0-100 to graphic coordinates in range 0-800
r*=8 s*=8 u*=8 v*=8 l*=8
REM solve for z numerically
z=0
REPEAT
z+=1E-3
UNTIL FNs(z)/z>=SQR(l^2-(v-s)^2)/(u-r)
REM calculate the curve parameters
a=(u-r)/2/z
p=(r+u-a*LN((l+v-s)/(l-v+s)))/2
q=(v+s-l*FNc(z)/FNs(z))/2
REM draw axes, 800 graphics units long = 400 pixels long (2 graphics units per pixel)
MOVE 800,0
DRAW 0,0
DRAW 0,800
REM draw markers at end and beginning of curve (beginning last, so that cursor is in right place for next step)
CIRCLE u,v,8
CIRCLE r,s,8
REM draw curve from beginning to end
FORx=r TOu
DRAW x,a*FNc((x-p)/a)+q
NEXT
REM definitions of sinh and cosh
DEF FNs(t)=(EXP(t)-EXP(-t))/2
DEF FNc(t)=(EXP(t)+EXP(-t))/2
