如何找到贝塞尔曲线的中点?

2024-03-13

我想制作一条“命名”贝塞尔曲线。我希望它是一个单词命名的,这样我就不必担心自动换行。

我通过P5制作贝塞尔曲线bezier(sx,sy,c1x,c1y,c2x,c2y,ex,ey)函数,我希望在贝塞尔曲线的中间显示一个字符串。但我不知道如何找到曲线的“中间”。

现在我的结果看起来像这样 (我不知道从哪里开始解决这个问题,所以我采用了更简单的方法,即在曲线的开头打印文本):

但我希望它看起来像这样:

这意味着我需要 P1 和 P2 坐标:

抱歉画了,但我还没有代码。一旦我掌握了它,我就会将其添加到这里。

这是绘制曲线的代码:

let
b = dest.inTriangle.middle, // destination triangle
g = this.outTriangle.p3,    // tip of out triangle
c = {x:b.x-g.x,y:b.y-g.y},  // distance between objects
r1 = {},                    // bezier point 1
r2 = {};                    // bezier point 2
if(c.x > 0){
    // b is on left
    r1 = {
        x: g.x + c.x/2,
        y: g.y
    };
    r2 = {
        x: b.x - c.x/2,
        y: b.y
    };
    }
else {
    // b is on right
    r1 = {
        x: g.x - c.x/2,
        y: g.y + c.y
    };
    r2 = {
        x: b.x + c.x/2,
        y: b.y - c.y
    };
}
noFill();
stroke(0);
bezier(
    g.x, g.y,
    r1.x, r1.y,
    r2.x, r2.y,
    b.x, b.y
);
noStroke();
fill(0);
text(this.name, g.x, (g.y-this.h/2))

您可以使用bezierPoint()P5.js 自带的功能。

From 参考资料 https://p5js.org/reference/#/p5/bezierPoint:

noFill();
var x1 = 85,
 x2 = 10,
 x3 = 90,
 x4 = 15;
var y1 = 20,
 y2 = 10,
 y3 = 90,
 y4 = 80;
bezier(x1, y1, x2, y2, x3, y3, x4, y4);
fill(255);
var steps = 10;
for (var i = 0; i <= steps; i++) {
  var t = i / steps;
  var x = bezierPoint(x1, x2, x3, x4, t);
  var y = bezierPoint(y1, y2, y3, y4, t);
  ellipse(x, y, 5, 5);
}

您可能想要使用的值0.5 for t得到中点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何找到贝塞尔曲线的中点? 的相关文章

随机推荐