The book is out of print now but it looks like you can borrow it on archive.org: https://archive.org/details/celticknotwork0000bain/mode/2up
1) Draw the 'skeleton' as a connected (simple?) graph in the plane
2) Place crosses at the midpoint of each edge
3) Connect the crosses with shortest (non-crossing!) connections (bit vague this, but is more obvious by hand)
4) Erase the crosses, and run over the line, assigning under/over as appropriate - you can also thicken at this step
This gives good free-standing knots, although may be more work for the dense knotwork in the OP's examples.
https://armory-rasa.tumblr.com/post/151872673763/drawing-wit...
If you try to define systematically what that difference is, though, it's not obvious. At the end of day, I think it's something like "degree of difficulty" or "amount of thought", which are vague concepts. Yet most would agree what the author here did requires more skill and thinking than typing "image of celtic knot" into Gemini.
https://en.wikipedia.org/wiki/Algorithmic_art
> From one point of view, for a work of art to be considered algorithmic art, its creation must include a process based on an algorithm devised by the artist. An artist may also select parameters and interact as the composition is generated. Here, an algorithm is simply a detailed recipe for the design and possibly execution of an artwork […]
Creating art by AI certainly also uses an algorithm to some extent but it cannot be said to have devised that algorithm and arguably also not to clearly define all parameters to the algorithm.
Really enjoyed how you traced your mental model through the journey of solving the problem.
Uncaught TypeError: loading.showModal is not a function
<anonymous> https://2earth.pyscriptapps.com/celtic-knot/ latest/:20
latest:20:17
<anonymous> https://2earth.pyscriptapps.com/celtic-knot/ latest/:20
and Uncaught (in promise) DOMException: IDBFactory.open: The operation is insecure
<anonymous> index.js:65
Xe index.js:63
Ye sync.js:8
engine pyodide.js:95
get interpreters.js:36
promise callback*get/< interpreters.js:34
xn loader.js:66
promise callback*xn loader.js:66
Kn script-handler.js:91
or custom.js:99
define custom.js:266
<anonymous> core.js:307
promise callback\* core.js:182
core-Dwn9Kajy.js:1www.blackoakgames.com/collections/knot-dice
HansardExpert•3mo ago
xnx•2mo ago
2earth•2mo ago
Also: yes, good idea