cataog
给定你一些 圆角矩阵, 其每一个角 都是一个 半径为radius
的圆的 1/4 圆弧
每个矩形 中心即对角线中心
坐标是{x, y},
然后会有一个角度angle, 表示: 该矩阵 需要以该矩阵的中心(x,y)
旋转angle角度
每一个矩阵都相同, 只是位置 和 旋转角度 不同.
问: 将这些矩阵 围起来的 凸包周长.
首先, 如果说 r == 0
即这些都是 直角矩阵, 你将每个矩阵的4个端点, 即一共4 * n
个端点, 进行一次凸包算法, 就便是答案.
看圆角矩阵时, 这个凸包 有哪些性质.
这个凸包, 肯定是由: (直边) 和 (圆弧 <= 90度
) 组成.
- 1, 将这个圆弧, 从端点处 延长, 即蓝色线, 他们会相交于某一点.
- 2, 此时, 你延长后, 圆心到 圆弧两个端点的垂线, 和 两个延长线, 组成的 四边形;
根据圆的切线定理, 可以得到: 圆弧角度 = 蓝色延长角的外角
用所有的蓝色延长线, 替代 所有的 圆弧, 你就会 将这个凸包 变成一个 多边形.
任意多边形的 外角和 = 360度, 故, 可知: 所有圆弧的角度 = 360;
凸包中, 所有的圆弧 恰好构成 一整个圆
然后, 处理 凸包中 所有的 (非圆弧边), 即直边
将AB边, 顺着直角边 平移下来, 到两个圆心交汇处;
可以发现, 他构成一个矩形; 凸包上的 直边(黑色) == 两个圆心的 连线(绿色)
凸包 = (直边) + (圆弧)
所有直边 = 将所有圆心 求一下凸包算法
所有圆弧 = 圆的周长