В один скучный уик-энд, пытаясь убить время, мой друг порекомендовал мне видео на YouTube, которое вдохновило меня написать код для создания шаблонов, как показано ниже.

Это называется модульным умножением на круге (таблица умножения). Здесь я расскажу, как это сделать самостоятельно.

Чтобы сделать эти узоры, сначала круг делится на n равные части. Они пронумерованы от 0 до n — 1.

Затем каждая часть соединяется со своим k th кратным. Показанный выше узор сделан с k = 7. Это означает, что 1 соединяется с 7, 2 с 14, 3 с 21 и так далее. Выполнение этого для вышеуказанной настройки дает следующий образец.

Проделав описанную выше процедуру для большого количества деталей, получатся красивые узоры.

Я сделал выше с помощью HTML5 Canvas.

Сначала давайте инициализируем холст и нарисуем основной круг.

Круги нарисованы методом .arc().

var canvas =  document.querySelector('canvas');                                               canvas.width = window.innerWidth;                       canvas.height = window.innerHeight;  
                                             
//c stands for context                       
var c = canvas.getContext('2d');                                              
// Master Circle
// a and b corresponds to center of the circle                       
var a = 400, b = 300, radius = 200;                       c.beginPath();                       
c.arc(a, b, radius, 0, Math.PI * 2, false);                       c.stroke();

Первой контрольной точкой кода будет разделение круга на n частей и получение их координат для дальнейшего использования.

var arc_len = 2 * Math.PI * radius / n;                       
var dtheta = arc_len / radius;                       
var x = a - radius;                       
var y = b;
var n = 300;                       
var theta = 0;                                               
var coorArray = [];                       
for (let i = 0; i < n; i++) {                                                   
  coorArray.push([x,y]);                                                   
  theta += dtheta;                           
  x = a - (radius * Math.cos(theta));                           
  y = b - (radius * Math.sin(theta));                               }

И заключительная часть, чтобы соединить точки с их индексом, умноженным на k. .moveTo() и .lineTo() используются для указания начальной и конечной точек. И, наконец, .stroke() способ его нарисовать.

var endp;                       
var times = 8;                       
var r = Math.random() * 255;                       
var g = Math.random() * 255;                       
var b = Math.random() * 255;                       
c.strokeStyle = 'rgba('+r+','+g+','+b+',1)';                                               for (let i = 0; i < coorArray.length; i++) {                             
  c.beginPath();                             
  c.moveTo(...coorArray[i]);                           
  endp = times * i >= n ? (times * i) % n : times * i;                                                        
  c.lineTo(...coorArray[endp]);                             
  c.stroke();                          
}

Также добавлены случайные цвета для визуальной привлекательности;).

Взгляните на мою версию здесь.

Вы можете узнать больше о HTML Canvas здесь.

Надеюсь, вам понравилось! Спасибо!