如何在贝塞尔曲线中添加渐变?

萨米特·波德尔

我绘制了曲线,以表示客户所在的国家/地区和他要去旅行的国家/地区。 在此处输入图片说明

但我无法添加渐变,以便线条表示上述信息,并在两种颜色之间随机赋予此随机颜色。这是我尝试过的。

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);
    }
机车

您可以使用该bezierPoint()方法将贝塞尔曲线分解为点,然后在连续点之间绘制直线段,并为每个单独的线段指定颜色(同时当然要逐渐增加颜色)。

我产生了一种可以在下面的代码示例中做到这一点的方法。

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

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;
}

结果:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Android中绘制贝塞尔曲线

来自分类Dev

如何在UIView中绘制贝塞尔曲线

来自分类Dev

曲线(贝塞尔曲线)渐变

来自分类Dev

如何使贝塞尔曲线中的线接点平滑?

来自分类Dev

如何在QML中渲染三次贝塞尔曲线?

来自分类Dev

如何在KineticJS中补间Shape或Group alogn贝塞尔曲线?

来自分类Dev

如何在paper.js中沿贝塞尔曲线弯曲的路径设置对象的动画?

来自分类Dev

如何在paper.js中沿贝塞尔曲线弯曲的路径设置对象的动画?

来自分类Dev

如何生成“厚”贝塞尔曲线?

来自分类Dev

如何使精灵遵循贝塞尔曲线

来自分类Dev

如何从图像模拟贝塞尔曲线?

来自分类Dev

CSS中的贝塞尔曲线?

来自分类Dev

CSS中的贝塞尔曲线?

来自分类Dev

Swift贝塞尔曲线填充渐变填充

来自分类Dev

如何在SVG中用贝塞尔曲线近似半余弦曲线?

来自分类Dev

贝塞尔曲线数学

来自分类Dev

如何在Flutter CustomPainter中使用贝塞尔曲线绘制形状

来自分类Dev

如何在圆形贝塞尔曲线路径内绘制图像

来自分类Dev

如何在cytoscape.js中使用贝塞尔曲线

来自分类Dev

如何编码n阶贝塞尔曲线

来自分类Dev

如何平滑三次贝塞尔曲线过渡

来自分类Dev

如何找到贝塞尔曲线的控制点

来自分类Dev

如何设置贝塞尔曲线的控制点以折线?

来自分类Dev

贝塞尔曲线与指定椭圆相交时如何检测?

来自分类Dev

如何启发式制作平行贝塞尔曲线

来自分类Dev

如何使用AS3设置贝塞尔曲线的动画?

来自分类Dev

如何找到贝塞尔曲线的控制点

来自分类Dev

如何绘制贝塞尔曲线 C#

来自分类Dev

通过示例了解如何绘制 SVG 贝塞尔曲线