要将多边形转换为光滑的贝塞尔曲线并使其闭合,您可以使用 Canvas 和 JavaScript 编写以下代码:

// 获取canvas元素
const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');

// 定义多边形的顶点坐标
const points = [
  { x: 100, y: 100 },
  { x: 200, y: 100 },
  { x: 200, y: 200 },
  { x: 100, y: 200 }
];

// 将多边形转换为光滑的贝塞尔曲线
function smoothPolygon(points) {
  const bezierPoints = [];
  const numPoints = points.length;

  for (let i = 0; i < numPoints; i++) {
    const p0 = points[i];
    const p1 = points[(i + 1) % numPoints];
    const p2 = points[(i + 2) % numPoints];
    const p3 = points[(i + 3) % numPoints];

    const cp1x = p1.x + (p2.x - p0.x) / 6;
    const cp1y = p1.y + (p2.y - p0.y) / 6;
    const cp2x = p2.x - (p3.x - p1.x) / 6;
    const cp2y = p2.y - (p3.y - p1.y) / 6;

    bezierPoints.push({ x: p1.x, y: p1.y });
    bezierPoints.push({ x: cp1x, y: cp1y });
    bezierPoints.push({ x: cp2x, y: cp2y });
  }

  return bezierPoints;
}

// 绘制光滑的贝塞尔曲线
function drawSmoothPolygon(points) {
  const bezierPoints = smoothPolygon(points);
  const numPoints = bezierPoints.length;

  ctx.beginPath();
  ctx.moveTo(bezierPoints[0].x, bezierPoints[0].y);

  for (let i = 0; i < numPoints - 2; i += 3) {
    ctx.bezierCurveTo(
      bezierPoints[i + 1].x,
      bezierPoints[i + 1].y,
      bezierPoints[i + 2].x,
      bezierPoints[i + 2].y,
      bezierPoints[i + 3].x,
      bezierPoints[i + 3].y
    );
  }

  ctx.closePath();
  ctx.stroke();
}

// 绘制多边形
ctx.beginPath();
ctx.moveTo(points[0].x, points[0].y);

for (let i = 1; i < points.length; i++) {
  ctx.lineTo(points[i].x, points[i].y);
}

ctx.closePath();
ctx.stroke();

// 绘制光滑的贝塞尔曲线
drawSmoothPolygon(points);

在上述代码中,points数组定义了多边形的顶点坐标。smoothPolygon函数将多边形的顶点转换为光滑的贝塞尔曲线的控制点,然后返回一个新的数组。drawSmoothPolygon函数使用bezierCurveTo方法绘制光滑的贝塞尔曲线。

您可以将上述代码插入到HTML文件中的<script>标签内,确保在<canvas>元素之后。然后,将'myCanvas'替换为您的Canvas元素的ID。

请注意,上述代码仅绘制光滑的贝塞尔曲线,不填充颜色。如果您需要填充颜色,请在ctx.stroke()之前添加ctx.fill()

Canvas 多边形转换为光滑贝塞尔曲线并闭合 - JavaScript 代码示例

原文地址: https://www.cveoy.top/t/topic/o4ed 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录