凸路径-如何实现?

3

有人能解释一下如何计算 凸形路径(convex path) 吗?我需要画一些 立方曲线(cubic) ,还要画一些线,但是当我把它们组合起来时,路径就不再是 凸形(convex) 了。但是当我只画 线(lines) 或只画 立方曲线(cubic) 时,路径就是 凸形(convex) 的。问题是,我需要一个非规则形状的背景,并且需要 凸形路径(convex path) 用于阴影轮廓,但我不知道如何将绘制的 立方曲线(cubic) 和一些线连接起来,使其成为 凸形路径(convex path),如果这可能的话。


发布您想要获取的形状/路径。 - pskink
形状类似于https://www.dropbox.com/s/ptgu5zwpzk5ydi0/Screen%20Shot%202018-03-14%20at%2009.24.00.png?dl=0。 - user2141889
它是白色的部分还是灰色的? - pskink
是的,根据我所发现的,这可能是为这种自定义形状添加阴影的唯一方法,但我可能是错误的。 - user2141889
仅仅是高度,使用 override fun getOutline(outline: Outline) - user2141889
显示剩余2条评论
1个回答

10
一条路径是凸的,如果它具有单个轮廓,并且始终只朝一个方向弯曲。
凸表示它保持弯曲/旋转在一个方向上,而且只有一个方向。您确实必须确保所有角度和曲线加起来。如果您的曲线连接到一条直线,则必须具有相同的角度或“更凸”,我希望以下两个图像可以澄清这一点。
下面的图片不是凸的。这也很可能是您的问题。该线连接到一条曲线,但曲线的角度与线不同,它将改变它连接的方向。看看线往下走,但是它没有继续向下运动,而是突然再次向上。它不是沿着一个方向保持,而是在线和曲线相遇的地方短暂地改变了方向。

enter image description here

上面的图像为了清晰起见而夸张,但是连接线和曲线之间即使有小错误也会触发错误。
下一条线连接到一个更陡峭角度的曲线。这是凸的,不会有问题。看整个轮廓如何在一个方向上保持单一运动,根据你跟随的方向它会不断向左/右转。

enter image description here

我回答是因为我最近也遇到了类似的问题,我感同身受。我建议使用笔和纸来检查数学计算,并使用一个小的epsilon值来处理舍入误差等...你真的必须精通数学,因为如果你的线条和曲线连接稍微有点偏差,就会抛出异常。

谢谢,解释得非常好,现在我明白了,我的当前形状 https://www.dropbox.com/s/ptgu5zwpzk5ydi0/Screen%20Shot%202018-03-14%20at%2009.24.00.png?dl=0 不是凸的,但使用凸路径绘制它是否可能呢? - user2141889
@user2141889 不行,不会起作用。但是你可以创建一个自定义的视图/可绘制对象,并自己绘制一些灰色的“阴影”(渐变)...这就是我在某个案例中最终采取的做法。 - David Medenjak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接