我有一些计算bezier曲线长度的代码。我在试着为它写单元测试。但除了琐碎的情况(直线贝齐尔)之外,我不知道长度的任何实际正确值。我在网上找过了,却找不到。
有人有这个信息吗?我正在寻找一个指向几行包含四个bezier控制点,然后包含一个长度的表的链接,或者可能在一个计算长度的绘图程序中创建几个bezier(我尝试过使用搅拌器和inkscape来获取这些信息,它们非常复杂)。
解决方案.从这里下载这里的bezier javascript代码,然后在web浏览器中打开这个html:
<html>
<head>
<script src="bezier.js"></script>
</head>
<body>
<script>
curve = new Bezier([4.0, 0.0, 4.0,
4.0, 0.0, 12.0,
16.0, 0.0, 12.0,
16.0, 0.0, 4.0]);
document.write(curve.length());
</script>
</body>
</html>发布于 2015-07-26 18:36:36
如果您想要测试实际的弧长,那么实现https://github.com/Pomax/bezierjs/blob/gh-pages/lib/bezier.js#L602-604 --这将使您可以根据Legendre-Gauss正交计算得到任意精确的数字(您不需要了解它的工作原理,尽管视频链接显示它实际上非常简单。因此,实现它非常容易)。
另一种选择是依赖于类似于wolframalpha.com或Mathematica (如果你拥有一个Raspberri PI,这是免费的。)的东西:设置一个随机曲线,并使它们“正确”计算长度,然后在单元测试中使用该结果作为参考值。
发布于 2015-07-24 16:48:30
您可以尝试以下方法来对代码进行单元测试:
1)利用De Casteljau算法将Bezier曲线分割成多条Bezier曲线。
2)计算每条Bezier曲线的弧长,然后求出它们的和。
3)计算原始Bezier曲线的弧长。
4)比较第二步和第三步的结果,如果你的代码是正确的,它们只能有一个很小的数值误差。
另一种验证弧长的方法是检查弧长是否总是在下面计算的两个值之间:
1)从Bezier曲线中抽取一些点(假设为100点),并根据采样点计算多边形的长度。此值将始终小于曲线的实际弧长。
2)计算控制多边形的长度。这将永远大于曲线的实际弧长。
发布于 2015-07-24 02:28:53
您可以通过在这个页面http://pomax.github.io/bezierinfo/#arclengthapprox上摆弄js小部件来获得一些值。
https://stackoverflow.com/questions/31600441
复制相似问题