是的,你想做的事情是可行的,并且你的绘图显示了它如何运作得相当好。伪代码看起来像这样:
curveLength = <length of entire curve>;
tileLength = <length of 1 tile>;
currentLength = 0;
while (currentLength < curveLength)
{
currentTileLength = 0;
startPt = prevPt = calculateBezierAt(0.0);
for (t = delta; (t < 1) && (currentTileLength < tileLength); t += delta) // delta is up to you. I often use 1/100th
{
nextPt = calculateBezierAt(t);
distance = distanceBetween(prevPt, nextPt);
currentTileLength += distance;
currentLength += distance;
prevPt = nextPt;
}
endPt = prevPt;
// Calculate quad here
}
Run Code Online (Sandbox Code Playgroud)
要计算每个四边形,您需要在起点和终点生成垂线。然后你的四边形就有 4 分。
请注意,我通过假设只有一个贝塞尔曲线来简化事情。通常,您会将它们中的许多连接在一起,因此迭代它们会比我上面所说的更棘手,但应该不会太难。
另请注意,如果拐角非常紧或者曲线自行循环,则可能会得到看起来很糟糕的结果。不过,如果您自己生成曲线,想必您会避免这种情况。