Programatically drawing a perfect circle is not all that difficult. It's based on some very simple math, afterall. You input two parameters (a center and a radius) and output the circle.
But if you don't have tools to help you, drawing a circle freeform (as in holding a pen in your hand) is very difficult! If I wanted to simulate a person trying to draw a circle, is there any algorithm I could use that takes three parameters (a center, a radius, and a "wrongness factor") and uses the magnitude of the third value to create random imperfections in the circle, while still producing something that looks recognizably like a person trying to draw a circle?
Plot the circle as a series of arcs, both "inwards" and "outwards", recalculating the correct center for each segment needed to keep the endpoint of the arc within a certain distance of the actual circumference.
A circle drawn by free hand is random but still looks continuous. Adding noise to the radius might result in jumps which look unrealistic.
A slight modification can somewhat resolve this issue. Using a Markov matrix, divide the noise into N
levels and have only tri-diagonal entries. This will result in randomness but yet it can only transit to prev/next levels only. Making it look continuous.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With