【发布时间】:2011-08-31 07:53:18
【问题描述】:
我有一个绘图程序,用户可以在其中用手指进行追踪,并且以类似于FingerPaint 程序的方式,绘制一系列Path 来表示线条。
现在,我正在做一些碰撞检测以允许用户进入“擦除”模式并删除选定的行,并试图确定如何跟踪Path 的各个像素。本质上,我正在跟踪包含Path 的RectF,如果RectF 在擦除模式下相交,我想进行逐像素相交测试。因此,我需要创建一些结构来存储像素,可能是一个二维数组,其中每个元素将是 1 或 0,具体取决于底层像素是否被绘制的 Path 占用。
这是我正在努力解决的最后一部分。当用户画线时,我通过Path.quadTo() 将传递的 X/Y 值作为二次贝塞尔曲线的控制点输入。问题是,虽然Path 使用这些点来表示一条连续的线,但我只是从触摸设备获得不连续的 X/Y 点。本质上,我需要一种方法来复制 Path 对象本身正在做的事情,并将传递的 X/Y 点插入到连续曲线中,但作为一组 X/Y 坐标而不是 Path 对象...
有什么建议可以开始吗?
谢谢
编辑/更多:
好的,正如我所提到的,每个Path 都是(大致)使用FingerPaint 中的方法创建的,这意味着它是一系列段,其中每个段都是二次贝塞尔曲线。鉴于当我将这些曲线段添加到较大的路径时我知道 P0、P1 和 P2,我可以确定沿曲线的 X/Y 坐标:
所以,我现在唯一的问题是确定一组“连续”的相邻 X/Y 坐标,这样在这组中就没有间隙,用户的手指可能会通过而不会碰到任何间隙。这意味着以 1 个像素间隔确定每个 X/Y 点。由于上述公式将在无限数量的间隔内产生点,给定 T 的值范围从 0 到 1,知道如何以编程方式确定将在 1 个像素间隔内产生点的正确 T 值吗?
【问题讨论】:
标签: android path interpolation