请问怎样把一张不规则图片分成两半, 并计算每一半的面积呢?

比如说这有一张狗的图片, 我要随机一刀把它切成两份, 并计算每一份的面积来计算他们的比例, 如果比例越接近1:1,就越好. 请问大神们这样应该怎么做呀?

可以通过renderTexture拿到像素数据,对像素数据进行统计处理得到对应的结果。

我来问个问题,都这么不规则了,你怎么保证切一刀后,是两半而不是三瓣四瓣呢

1赞

你说的很有道理啊, 2333333, 这就是策划的事了, 现在得先看看到底怎么做出来

可以预先从位图大致的矢量信息,划下去的时候,就是凸多边形和凹多边形与线段的相交,然后获得分割的N个多边形。如果划下去的时候是歪歪扭扭的划,那么就非常复杂了。。
不知道这个思路对不对,楼下有更好的方法吗?

在你设计这个算法前,你得把这个策划问题搞清楚了。。。不然无解

1、 先用这个方法获得图片每个像素点的rgba数组:

const {ccclass, property} = cc._decorator;
@ccclass
export default class NewClass extends cc.Component {
    @property({type: cc.Texture2D})
    texture: cc.Texture2D = null;
    start () {
        let rt = new cc.RenderTexture();
        rt.initWithSize(this.texture.width, this.texture.height);
        rt.drawTextureAt(this.texture, 0, 0);
        // data就是这个texture的rgba值数组
        let data = rt.readPixels();
        console.log(data);
    }
}

2、 然后假设触摸Bgein的点A和触摸End的点B(忽略Move过程的点)所在直线为切分线,那么可以计算图中任意一点C在直线AB的哪一侧。
3、 遍历图中每个像素,如果第1步中data数组里这个像素的alpha大于0且rgb值不同时为0(说明不是空白像素),则按第2步计算该像素在切分线的哪一侧。统计两侧分别有多少非空白像素。遍历完成后两侧非空白像素的比值越接近1越好。

1赞

提供一种思路
事先把图片描边成一个多边形数组,当切割以后,分成了两个或两个以上的多边形,
多边形的面积计算可以参考我以前写过的一个类
https://github.com/dadidzf/CocosStudio/blob/master/LuaTemplate/frameworks/runtime-src/Classes/Utils/Triangulate.h

我去年做过的一个游戏就用到了多边形面积计算,
https://www.taptap.com/app/57460

切割以后的多边形分组算法,你要自己实现

楼上的也可以尝试下,楼主实现后记得要来分享下哦

好的好的 多谢:grin:

你这个游戏我看了下宣传视频 有点叼呀…

我感觉哪里都能看到你。。。

辛辛苦苦做了一个月,不过没什么收获

类似描边效果。利用像素aplha大于0的点,统计空白像素的面积,然后与矩形的面积相减就能得出来了。

:joy:之前刷 TT 的时候看到过,感觉很有新意啊。

是的,不过美术不怎么行

读取所有A通道的值 大于某个值说明有颜色得到总和

在把切开的读取一个总和 减少这一个 就得出比例了:sweat_smile:
哈 这个方法肯定不适用 计算量 太大了…

曾经做像素碰撞用过类似的方法

我想问下,怎么把图片切割成两半?或者切成不规则的多边形