查找Path2D的维度

时间:2015-05-28 03:00:33

标签: javascript canvas

在我的一个项目中,我在Path2D上绘制了一堆自定义Canvas形状。由于我需要它是可扩展的,能够执行诸如对它们执行命中检测以及与其他元素交互等内容,我需要能够检测给定Path2D的大小。

据我所知,通过Path2D的界面无法做到这一点(然而,它仍然是实验性的),是否有人知道如何实现这一点,而不是要求用户指定宽度在为我的类创建子类时自己加长?

感谢。

1 个答案:

答案 0 :(得分:2)

对于点击检测,您可以使用context.isPointInPath

你对Path2D的总长度是正确的吗?边界框...

没有像SVG .getTotalLength.getPointAtLength这样的原生Path2D(或html5画布)方法。因此,要计算总长度或边界框,您必须计算沿路径的每个分量的点。

你可能知道(或谷歌)这条线有一个简单的几何解决方案来计算长度和数量。给定线段上的起点和终点的边界。并且弧具有同样简单的几何弧长计算和简单的三角解,以绘制给定中心点,半径和开始/结束弧角的点。 提示:弧线的界限可以通过找到最小值来计算。最大x,y值:弧的中心点和弧上0,90,180和0的任何现有点270度。

Bezier曲线有点难以绘制,所以这里有一个提示:可以使用De Casteljau算法绘制Cubic Bezier曲线。也可以使用De Casteljau算法绘制二次贝塞尔曲线 - 只需设置2个中间控制点彼此相等,立方贝塞尔曲线就成为二次贝塞尔曲线。这是一种“强力”方法,但通过沿曲线采样最少20个间隔,可以获得相当准确的测量结果。

如果您的设计要求允许更粗略的近似值,那么您会发现立方贝塞尔曲线始终包含在其控制点内。

如果你更倾向于数学,你也可以使用一阶导数根来更直接地计算贝塞尔曲线的界限。有关更多信息,请在此处有关于Bezier曲线的优秀论文:http://pomax.github.io/bezierinfo/