【问题标题】:Android: Determine what pixels an Android Path occupiesAndroid:确定 Android Path 占用哪些像素
【发布时间】:2011-08-31 07:53:18
【问题描述】:

我有一个绘图程序,用户可以在其中用手指进行追踪,并且以类似于FingerPaint 程序的方式,绘制一系列Path 来表示线条。

现在,我正在做一些碰撞检测以允许用户进入“擦除”模式并删除选定的行,并试图确定如何跟踪Path 的各个像素。本质上,我正在跟踪包含PathRectF,如果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


    【解决方案1】:

    我不会使用曲线或像素,而只使用线条来进行所有碰撞检测,找到相交的线条要容易得多,即用户滑动的两个连续 x/y 坐标的交点和现有线条的线条

    【讨论】:

    • 正如我所提到的,现有的“线”是一系列曲线,被描述为二次贝塞尔曲线......我如何将这些曲线(可能是漩涡、圆圈等)转换成我可以然后的线检查顺序 X/Y 滑动坐标中的一条线是否匹配?
    猜你喜欢
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多