求助,怎么获得UIBezierPath绘制的不规则图形和一条直线的交点?

zhh8689 发布于 2014年06月26日
无人欣赏。

如题,现在开发遇到一个困难。 我绘制了两个UIBezierPath绘制的不规则图形。然后用线把它们连起来。 现在只能完成两个矩形之间的连线,取到连线与矩形的交点。 从网上搜了很多种方法,也使用了CGPathApply获取所有点来判断,但是如果取线段上的点,图形比较大的时候点有4000个,对比起来效率跟不上。 求大神给点指示

共7条回复
玉楼 回复于 2014年06月26日

不会吧?虽然没研究过这个算法,但你有必要图形里的所有点都用到吗?只用最外沿(周长上的点)的不行吗?

玉楼 回复于 2014年06月26日

即便你使用线段上的点去判断,也没必要都用啊,用个折半之类的算法也好过一个一个的判断吧。

zhh8689 回复于 2014年06月27日

2楼 @玉楼 现在取的就是外沿上的点。一个700*700左右的大小的三角形,外沿点取出来差不多就是3400多个。 取出来的点的排列是跟绕线有关的,三角形ABC的话,点是从A到B到C的。A点在正上方,则取出的点的变化是X先减小后增大然后再减小,Y是先增大后减小。 这还是比较规则的图形。

zhh8689 回复于 2014年06月27日

还有比如我需要拖动一个VIEW在一个UIBezierPath上运动,不是做动画,类似于磁贴那种,手指滑到哪边,view在path上移动到相对应位置,这个现在只想到取出点以后查找对应的坐标,还有更好的方法么?

玉楼 回复于 2014年06月27日

不用全周长吧?我大致想了一下,你参考一下是否对:

图形A和B
你应该能取到axMax、axMin、ayMax、ayMin和bxMax、bxMin、byMax、byMin这些值吧,如果取不到就别往下看了。
通过这8个值可以判断出A和B之间的位置关系
switch(位置关系) {
case A靠左上:
    在A上,取ayMax对应外沿点为起点,axMax对应外沿点为终点
    在B上,取byMin对应外沿点为起点,bxMin对应外沿点为终点
    确定了外沿点的起止范围,不管你的步长是1还是多长,自己可以想个算法再少算一些了吧?
    break
case A靠左比B宽在上:    // axMax >= bxMax && ayMax < byMax
    自己脑补
    break
其余自己脑补吧
}

我想这算法不一定好,就是随便那么一想,你可以参考参考,或是再多找找相关的算法。

玉楼 回复于 2014年06月27日

4楼 @zhh8689 这东西俺就更没弄过了,还是谁懂谁来吧,俺不费心思琢磨了。

zhh8689 回复于 2014年06月27日

求大神来解答啊~

登录 或者 注册