- 注册时间
- 2009-10-1
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 315
- 在线时间
- 小时
|
楼主 |
发表于 2011-2-17 10:50:51
|
显示全部楼层
对于这个问题我先提一下我的思路, 也算作为抛砖引玉吧
首先, 设定一个最小误差$varepsilon $, 比如上面的数据可以设$varepsilon =1$,然后按照这个最小误差将整个区间划分为一个个小的正方体区域, 然后逐层扫描, 这样就可以找到数据区域的边界点, 将所有的边界点保存起来, 记其集合为V.
现在设边界平面方程为z=Ax+By+C, 后面可以单独考虑平行于z轴的平面. 通过随机的取V的点, 得到A,B,C的大概范围, 然后将A,B,C各自的范围划分为n等分, 并将其映射到一个3维数组count[n][n][n], 此3维数组3个维度分别表示A,B,C可能的取值, 并将3维数组全部置0. 然后依此从V中取点, 记第i次取的点为$(x_i, y_i, z_i)$, 将其带入平面方程得到: $z_i=Ax_i+By_i+C$, 将其变形为$C=z_i-Ax_i-By_i$, 遍历A, B在区间上所有的取值, 一共$n^2$个, 并求出对应的C, 然后每次将count[A][B][C]加1.
遍历完V中所有的点后, 然后将count中所有的值进行排序, 其值的大小反应了以对应的A,B,C为参数的平面上包含V中的点的个数, 同时还要考虑夹角很小的平面对应的count值可能也很接近, 因此还要对夹角小于某个阈值的平面进行合并(可通过count值作为权重, 取加权平均), 最后剩下的平面就是整个区域的边界平面. |
|