Рисуем полигоны на HTML5-холсте только с JavaScript

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для создания многоугольников на холсте HTML5 начните с применения beginPath(), затем определите вершины фигуры с помощью moveTo() для начальной точки и lineTo() для последующих. Используйте closePath() для замыкания пути и закончите создание контура. Примените stroke() или fill(), чтобы визуализировать многоугольник. Ниже приведён пример кода для построения треугольника:

JS
Скопировать код
let canvas = document.getElementById('myCanvas');
let ctx = canvas.getContext('2d');

ctx.beginPath();
ctx.moveTo(50, 50);     
ctx.lineTo(100, 150);   
ctx.lineTo(0, 150);     
ctx.closePath();
ctx.stroke();

Вы можете изменять координаты в соответствии со своими предпочтениями и потребностями, создавая многоугольники на холсте. Учтите начальную и конечную точки, чтобы достичь желаемого результата.

Кинга Идем в IT: пошаговый план для смены профессии

Вникаем в математику многоугольников

Для работы со сложными многоугольниками мы обращаемся к математике. Используя циклы и математические функции, можно определить вершины правильных многоугольников. Вот как можно расставить вершины на холсте:

JS
Скопировать код
function drawRegularPolygon(ctx, centerX, centerY, sides, size) {
  ctx.beginPath();
  const angleStep = (2 * Math.PI) / sides;
  
  ctx.moveTo(
    centerX + size * Math.cos(0),
    centerY + size * Math.sin(0)
  );

  for (let i = 1; i <= sides; i++) {
    ctx.lineTo(
      centerX + size * Math.cos(angleStep * i),
      centerY + size * Math.sin(angleStep * i)
    );
  }
  
  ctx.closePath();
  ctx.fill();
}

С помощью функций Math.cos() и Math.sin() можно равномерно распределить точки, формируя правильную геометрическую фигуру. Меняйте параметры size, centerX, centerY и sides, чтобы создавать свои уникальные многоугольники.

Стилизация и взаимодействие: Все готово к действию

Небольшие стилевые преобразования дадут вашим многоугольникам новый оттенок. Используйте ctx.strokeStyle и ctx.lineWidth для определения контуров:

JS
Скопировать код
ctx.strokeStyle = 'blue';
ctx.lineWidth = 3;
ctx.stroke();

Теперь у нас не просто неизменные фигуры. Мы можем анимировать наши многоугольники, например, в ответ на события click или mousemove:

JS
Скопировать код
canvas.addEventListener('mousemove', function(event) {
  // Перерисовываем многоугольник при движении мыши!
});

Давайте поплывём свободно с комплексными многоугольниками

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

Создайте свои функции, например, fillPolygon, для упрощения работы с холстом:

JS
Скопировать код
CanvasRenderingContext2D.prototype.fillPolygon = function(vertices) {
  this.beginPath();
  this.moveTo(vertices[0].x, vertices[0].y);

  vertices.slice(1).forEach(vertex => {
    this.lineTo(vertex.x, vertex.y);
  });

  this.closePath();
  this.fill();
};

Визуализация

Рисование многоугольников — это просто соединение точек на сетке:

Markdown
Скопировать код
Холст: 🖼️
1️⃣---2️⃣
|       |
4️⃣---3️⃣

Линии соединяются в определённой последовательности:

Markdown
Скопировать код
🖌️ От 1️⃣ к 2️⃣, затем к 3️⃣,
🖌️ От 3️⃣ к 4️⃣ и обратно к 1️⃣.

И вуаля, перед вами многоугольник на холсте:

Markdown
Скопировать код
🖼️ Результат: 
  / \
 /   \
/_____\

Оживите свои фигуры, следуя нашим рекомендациям!

Полезные материалы

  1. Canvas API – Web APIs | MDN — основное руководство по Canvas API.
  2. HTML canvas beginPath() Method — практические примеры изображения фигур, включая многоугольники.
  3. Fabric.js Javascript Canvas Library — изучите интерактивную графику и возможности библиотеки Fabric.js для решения более сложных задач.
  4. Just a moment... — вдохновляющие примеры интерактивных многоугольников на холсте в CodePen.

Обратите внимание: Названия ссылок указаны в оригинальной форме и могут не полностью соответствовать фактическому заголовку или контексту связанного контента.