<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />傑士林,附在下面,做了一些修改來製作這個影片。觀看時最好。專為全螢幕設計。靈感來自基板屏保。
https://www.youtube.com/watch?v=WP1moAuUKXo
這是所附 JSL 中的典型圖片。

感謝您的快速回覆。 我在生成具有不同曲率和顏色組合的圖像時獲得了很多樂趣。
謝謝! 發文太興奮了,好像忘記寫評論了!
程式使用名為 stack 的 JSL 清單(名稱錯誤,但請忽略它。)Stack 儲存了活動道路的清單。 堆疊中的每個元素都是一個列表
- 最後一行,道路中像素的座標位置
- 道路的最後一個角度
- 繪製每個像素時道路轉動的增量角度
還有一個 veclen,我相信它總是 0.7,接近 0.707。
驅動程式循環在接近尾聲時呼叫 doodle 函數 N 次,並使用堆疊中最前面的 N 個項目的索引。 doodle 為每條道路繪製一個像素,因此看起來 N 條道路是同時建造的。 看一下doodle前面的程式碼,你會看到實現轉彎的程式碼:
1 {row, col, angle, deltaangle, veclen} = stack[istack];
2 {newrow, newcol, angle} = Eval List( {row + veclen * Sin( angle ), col + veclen * Cos( angle ), angle + deltaangle} );
3 If( newrow >= 1 & newrow <= rowsiz & newcol >= 1 & newcol <= colsiz,
4 stack[istack] = Eval List( {newrow, newcol, angle, deltaangle, veclen} );第 1 行取得第 n(istack)路的狀態。 第 2 行計算下一個像素的行和列以及新的角度(用於下一次)。第 3 行正在測試行、列是否仍在螢幕上,如果是,則第 4 行將道路資訊更新回堆疊。
如果您仍在關注原始程式碼,您將看到在行、列處設定了一個黑色像素,或者如果在螢幕外,您將看到堆疊元素被刪除......這將在堆疊的更下方形成一條新道路,下次開始畫。
您還將看到以直角生成新道路的代碼(透過將 +/- pi/2 添加到當前角度),以及以直角噴射淺色沙子的代碼。
催生新道路的代碼
// new doodle at right angle
stack[N Items( stack ) + 1] = Eval List({newrow, newcol, angle + If( Random Integer( 0, 1 ), Pi() / 2, -Pi() / 2 ), Random Normal( 0, .0001 ), .7});是您問題的答案:大多數情況下,隨機法線會產生非常接近零的增量角。 將 0.0001 的陰影調大一些,更多的線條就會有更大的曲率。
感謝您對程式碼的困惑,並再次詢問缺少註釋是否是一個問題。
很棒的劇本! 我沒有看到程式碼中的何處產生曲線。 有沒有辦法產生更多曲線?
我是 JSL 的新手。
謝謝。
哇 Craige,您剛剛將 JMP 變成了螢幕保護程式。 下一步是什麼 -飛行烤麵包機?