在Android中如何通过三个点绘制曲线?

9

我需要通过平滑曲线连接三个点。我已经查看了StackOverflow上已经回答的相同问题,但它们都建议使用Path.quadTo()。我不明白为什么这被认为是正确答案,因为贝塞尔曲线只是接近中间(控制)点而不是穿过它。在我的情况下,我必须准确地穿过它。那么我该如何实现呢?

3个回答

4

确实,你需要的是Catmull Rom样条线,它们保证会经过每个点。然而,我不知道Android API中是否有任何函数来绘制它们。你也可以“欺骗”quadTo函数,并传递一个虚拟中间点,该点根据当前点和下一个点进行计算。


1
感谢提供线索,我已经彻底搜索互联网,并得到了以下的QuadTo控制点计算方法:// 用指定参数值将三个点插值 int[] interpolate(int x0, int y0, int x1, int y1, int x2, int y2, double t) { double t1 = 1.0 -t; double tSq = t * t; double denom = 2.0 * t * t1; int cx = (int) ((x1 - t1 * t1 * x0 - tSq * x2) / denom); int cy = (int) ((y1 - t1 * t1 * y0 - tSq * y2) / denom); return new int[] {cx, cy}; } - Andrey Novikov
1
@AndreyNovikov 你应该将它发布为答案以帮助其他人。 - Tofeeq Ahmad

0

cubicTo方法还使用贝塞尔样条曲线,这并不能满足他的需求。 - Vincent Mimoun-Prat

-1

这里有一个非常好的、用插图解释的Javascript教学,但所有使用的方法都是常见的,在Android的Path类中有对应的方法。


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