【问题标题】:Calculate Area Size of UIBezierPath Custom Shapes计算 UIBezierPath 自定义形状的区域大小
【发布时间】:2017-01-18 22:56:22
【问题描述】:

我有这样的 UIBezierPathes:

我想计算这种自定义形状的面积大小。我不知道在 Objective c 中管理这种复杂形状的计算。我在这里找到了适用于 Android 的东西,但没有找到适用于 iOS 的东西:Click

我不需要一个可行的解决方案,如果有办法,只需要一个想法或一些伪代码来解决这个问题。

谢谢!

【问题讨论】:

    标签: ios objective-c math geometry


    【解决方案1】:

    如果您的区域被贝塞尔曲线(包括直线)包围,那么您可以利用参数曲线的格林定理 (formula 10 here) 来查找区域面积。只需计算每条轮廓曲线的积分值:

     A = Integral[t=0..1] (y(t)*x'(t)*dt)
    

    三次贝塞尔曲线,由控制点P[]定义:

     A = Integral[0..1](y(t)*x'(t)*dt)=
         Integral[0..1](
                (P[0].Y*(1-t)^3+3*P[1].Y*t*(1-t)^2+3*P[2].Y*t^2*(1-t)+P[3].Y*t^3)*
                (P[0].X*(1-t)^3+3*P[1].X*t*(1-t)^2+3*P[2].X*t^2*(1-t)+P[3].X*t^3)' * dt)
    

    我们要扩展括号,区分第二行表达式,乘以表达式,并整合结果。生成的公式相当大,但易于实现。 Maple 工作推导公式:

    【讨论】:

    • 你能详细说明这个答案吗?也许可以举一个简单的例子来说明如何实现它。
    • @smnk 变量 likeP0Y 对应于P[0].Y - 三次贝塞尔曲线第一个控制点的 y 分量。所以图片显示了几乎可以使用的代码片段(“手动”简化是可能的 - 例如,有一些重复的术语)
    猜你喜欢
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    相关资源
    最近更新 更多