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

比如说这有一张狗的图片, 我要随机一刀把它切成两份, 并计算每一份的面积来计算他们的比例, 如果比例越接近1:1,就越好. 请问大神们这样应该怎么做呀?
可以通过renderTexture拿到像素数据,对像素数据进行统计处理得到对应的结果。
我来问个问题,都这么不规则了,你怎么保证切一刀后,是两半而不是三瓣四瓣呢
你说的很有道理啊, 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越好。
提供一种思路
事先把图片描边成一个多边形数组,当切割以后,分成了两个或两个以上的多边形,
多边形的面积计算可以参考我以前写过的一个类
https://github.com/dadidzf/CocosStudio/blob/master/LuaTemplate/frameworks/runtime-src/Classes/Utils/Triangulate.h
我去年做过的一个游戏就用到了多边形面积计算,
https://www.taptap.com/app/57460
切割以后的多边形分组算法,你要自己实现
楼上的也可以尝试下,楼主实现后记得要来分享下哦
好的好的 多谢
你这个游戏我看了下宣传视频 有点叼呀…
我感觉哪里都能看到你。。。
辛辛苦苦做了一个月,不过没什么收获
类似描边效果。利用像素aplha大于0的点,统计空白像素的面积,然后与矩形的面积相减就能得出来了。
之前刷 TT 的时候看到过,感觉很有新意啊。
是的,不过美术不怎么行
读取所有A通道的值 大于某个值说明有颜色得到总和
在把切开的读取一个总和 减少这一个 就得出比例了
哈 这个方法肯定不适用 计算量 太大了…
曾经做像素碰撞用过类似的方法
我想问下,怎么把图片切割成两半?或者切成不规则的多边形