当前位置: 首页 > 知识库问答 >
问题:

如何在贝塞尔曲线中添加梯度?

花俊雄
2023-03-14

但是我不能添加一个渐变,这样线条就会表示所说的信息,并且在两种颜色之间随机地给出这种随机颜色。这是我试过的。

int steps = 10;
    noFill();
    //stroke(#5A38FA, 50);
    strokeWeight(1);
    for(int i=0; i<steps; i++) {
      strokeWeight(1);
      noFill();
      stroke(lerpColor(#31B5E8, #F0E62E, (float)i/steps));
      bezier(locationX, locationY, locationX+random(15, 50), locationY+random(13,50), customerLocationX+random(15, 30), customerLocationY+random(15, 70), customerLocationX, customerLocationY);
    }

共有1个答案

隆睿
2023-03-14

您可以使用bezierpoint()方法将bezier曲线分解为点,然后在连续的点之间绘制直线段,为每个单独的线段指定颜色(当然,同时逐步地分配颜色)。

在下面的代码示例中,我已经生成了一个可以实现这一点的方法。

此外,通过该方法,您可以指定曲线的幅度(curve)和曲线的方向(dir);该方法使用垂直于起点(头部)和终点(尾部)之间中点的直线上的点来计算bezier控制点。

void setup() {
  size(500, 500);
  smooth(4);
  noLoop();
  redraw();
  strokeWeight(5);
  noFill();
}

void draw() {
  background(35);
  drawCurve(new PVector(50, 50), new PVector(456, 490), #31B5E8, #F0E62E, 50, -1);
  drawCurve(new PVector(150, 75), new PVector(340, 410), #B9FF00, #FF00C5, 150, 1);
  drawCurve(new PVector(200, 480), new PVector(480, 30), #007CFF, #89CA7F, 100, 1);
}

void drawCurve(PVector head, PVector tail, color headCol, color tailCol, float curve, int curveDir) {

  final float theta2 = angleBetween(tail, head);
  final PVector midPoint = new PVector((head.x + tail.x) / 2, 
    (head.y + tail.y) / 2);
  final PVector bezierCPoint = new PVector(midPoint.x + (sin(-theta2) * (curve * 2 * curveDir)), 
    midPoint.y + (cos(-theta2) * (curve * 2 * curveDir)));

  PVector point = head.copy();
  for (float t=0; t<=1; t+=0.025) {
    float x1 = bezierPoint(head.x, bezierCPoint.x, bezierCPoint.x, tail.x, t);
    float y1 = bezierPoint(head.y, bezierCPoint.y, bezierCPoint.y, tail.y, t);
    PVector pointB = new PVector(x1, y1);
    stroke(lerpColor(headCol, tailCol, t));
    line(point.x, point.y, pointB.x, pointB.y);
    point = pointB.copy();
  }
}  

static float angleBetween(PVector tail, PVector head) {
  float a = PApplet.atan2(tail.y - head.y, tail.x - head.x);
  if (a < 0) {
    a += PConstants.TWO_PI;
  }
  return a;
}
 类似资料:
  • 贝塞尔曲线用于计算机图形绘制形状,CSS 动画和许多其他地方。 它们其实非常简单,值得学习一次并且在矢量图形和高级动画的世界里非常受用。 控制点 贝塞尔曲线由控制点定义。 这些点可能有 2、3、4 或更多。 例如,两点曲线: 三点曲线: 四点曲线: 如果仔细观察这些曲线,你会立即注意到: 控制点不总是在曲线上这是非常正常的,稍后我们将看到曲线是如何构建的。 曲线的阶次等于控制点的数量减一。 对于两

  • 基础示例 <vuep template="#example"></vuep> <script v-pre type="text/x-template" id="example"> <template> <div class="amap-page-container"> <el-amap vid="amapDemo" :zoom="zoom" :center="center" c

  • bezierCurveTo()方法 绘制三次贝塞尔曲线代码如下。 context.bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y); 这个方法可谓是绘制波浪线的神器。根据之前的结论,n阶贝塞尔曲线就有n-1个控制点,所以三次贝塞尔曲线有1个起始点、1个终止点、2个控制点。因此传入的6个参数分别为控制点cp1 (cp1x, cp1y),控制点cp2 (cp2x, cp2

  • 贝塞尔曲线 Bézier curve(贝塞尔曲线)是应用于二维图形应用程序的数学曲线。 曲线定义:起始点、终止点、控制点。通过调整控制点,贝塞尔曲线的形状会发生变化。 1962年,法国数学家Pierre Bézier第一个研究了这种矢量绘制曲线的方法,并给出了详细的计算公式,因此按照这样的公式绘制出来的曲线就用他的姓氏来命名,称为贝塞尔曲线。 这里我们不介绍计算公式,只要知道贝塞尔曲线是一条由起始

  • 贝塞尔曲线于1959年,由法国物理学家与数学家Paul de Casteljau所发明,于1962年,由法国工程师皮埃尔·贝塞尔(Pierre Bézier)所广泛发表,并用于汽车的车身设计。贝赛尔曲线为计算机矢量图形学奠定了基础,它的主要意义在于无论是直线或曲线都能在数学上予以描述。 贝塞尔曲线分为两种:二次贝塞尔曲线和三次贝塞尔曲线。 quadraticCurveTo()方法绘制二次贝塞尔曲线

  • 如果二次曲线不能满足你的需要,贝塞尔曲线可能会满足你。贝塞尔曲线又称三次曲线,是HTML5画布API所能支持的最高级的曲线。 图1-7 绘制贝塞尔曲线 绘制步骤 按照以下步骤绘制任意贝塞尔曲线: 1. 定义2D画布并设置曲线样式: window.onload  = function(){ var canvas  = document.getElementById("myCanvas");