当前位置: 首页 > news >正文

社交网站怎么制作傻瓜式做网站程序

社交网站怎么制作,傻瓜式做网站程序,2017如何免费制作网站,医院网站前置审核Python 异源mesh裁剪融合实现与优化 一、项目需求二、解决方案1. 代码2. 结果3. 耗时 三、优化探索0. 分析1. 在体素边界处进行裁剪2. 用mesh分块进行裁剪3. 用缓冲区的思路裁剪 一、项目需求 对mesh进行裁剪#xff0c;但发现若非mesh是致密的#xff0c;那么裁剪边会出现锯… Python 异源mesh裁剪融合实现与优化 一、项目需求二、解决方案1. 代码2. 结果3. 耗时 三、优化探索0. 分析1. 在体素边界处进行裁剪2. 用mesh分块进行裁剪3. 用缓冲区的思路裁剪 一、项目需求 对mesh进行裁剪但发现若非mesh是致密的那么裁剪边会出现锯齿状边缘究其原因是因为该裁剪方式没有对三角面片进行处理而是直接处理的mesh的顶点导致裁剪边不光滑那么两个相邻的裁剪后mesh尤其是异源mesh放在一起的时候会出现缝隙。 计划找到一种在三角面片层面对mesh进行裁剪的方案用来解决缝隙问题。 二、解决方案 找到三个python第三方库分别为pyvista、vedo、trimesh可以实现上述功能下面对这个三个库进行测试比较。 1. 代码 import time from datetime import timedeltaimport numpy as npimport pyvista as pvmvs_path rT:\ProjectData\SDF_Studio\GT_data\mvs_mesh_aligned.plydataset pv.read(mvs_path) start_time time.time() bounds [195.957, 211.373, 347.767, 362.355, 270.836, 286.781] clipped dataset.clip_box(bounds, invertFalse) end_time time.time() elapsed_time end_time - start_time formatted_time str(timedelta(secondselapsed_time)) print(fpyvista took {formatted_time})p pv.Plotter() p.add_mesh(clipped, labelClipped) p.show()import vedomesh vedo.load(mvs_path) start_time time.time() clipped_mesh mesh.cut_with_box(bounds) end_time time.time() elapsed_time end_time - start_time formatted_time str(timedelta(secondselapsed_time)) print(fvode took {formatted_time}) # 显示裁剪后的mesh vedo.show(clipped_mesh)import trimeshmesh trimesh.load_mesh(mvs_path) start_time time.time() min_values [195.957,347.767,270.836] max_values [211.373,362.355,286.781] # 定义六个平面的法向量和原点 planes np.array([[1, 0, 0, min_values[0], 0, 0],[-1, 0, 0, max_values[0], 0, 0],[0, 1, 0, 0, min_values[1], 0],[0, -1, 0, 0, max_values[1], 0],[0, 0, 1, 0, 0, min_values[2]],[0, 0, -1, 0, 0, max_values[2]]])mesh trimesh.intersections.slice_mesh_plane(meshmesh,plane_normalplanes[:, :3],plane_originplanes[:, 3:],capFalse, )end_time time.time() elapsed_time end_time - start_time formatted_time str(timedelta(secondselapsed_time)) print(ftrimesh took {formatted_time}) mesh.show()2. 结果 pyvista: vedo: trimesh: 以上都可以实现在三角面片层面对mesh进行裁剪接下来看看其效率和效果。 3. 耗时 pyvista took 0:00:19.446367 vode took 0:00:00.642607 trimesh took 0:00:01.582946根据测试结果来看vedo的效率最高接下来用vedo来做大型的mesh裁剪融合实验。但在实验结果中发现其在边角上处理的并不好仍有空隙存在。 改用trimesh进行测试其边界就处理得比较好但相同数据下trimesh耗时是vedo的两倍。目前还仅是较大的尺寸进行融合后续当体素设置为更小尺寸时耗时会指数级别增长所以还需优化。 三、优化探索 在这里记录所想到和已经实验的优化思路。 0. 分析 首先简单说一下trimesh的裁剪逻辑它没有直接利用体素bound或者box进行裁剪方式只有一个用平面切分mesh的方法而且只返回法线正侧的mesh见此处。所以想要裁剪出一个体素内的mesh只能用6个平面循环切分得到如上述代码。 那么很容易想到用多个体素裁剪时会有重复计算。 1. 在体素边界处进行裁剪 先在所有体素边界处进行裁剪然后得到边界处分割后的mesh与原始mesh合并在正常进行裁剪融合但实验发现融合结果始终有缝隙存在可能跟边界的顶点不好判别在哪一个体素有关系。 这个边框的mesh还比较有意思。 2. 用mesh分块进行裁剪 先找到一个大于体素的mesh分块然后用这个mesh分块进行裁剪实验发现用mesh分块裁剪确实很快但在加上mesh分块的过程与之前用整个mesh进行裁剪的耗时相当了。 def small_mesh(vertices,faces,min_v ,max_v ):在大型mesh中找到小的mesh分块# 找出满足条件的顶点的索引inside_indices np.where((vertices[:, 0] min_v[0]) (vertices[:, 0] max_v[0]) (vertices[:, 1] min_v[1]) (vertices[:, 1] max_v[1]) (vertices[:, 2] min_v[2]) (vertices[:, 2] max_v[2]))[0]# 根据这些索引找到相关的三角面片inside_faces np.any(np.isin(faces, inside_indices), axis1)# 创建新的 meshnew_vertices vertices[inside_indices]new_facesfaces[inside_faces]index_map1 {old: new for new, old in enumerate(inside_indices.flatten())}new_faces [[index_map1[idx] for idx in face] for face in new_faces if all(idx in index_map1 for idx in face)]new_mesh trimesh.Trimesh(verticesnew_vertices, facesnew_faces)return new_mesh3. 用缓冲区的思路裁剪 之所以有缝隙存在是因为使用顶点判别时没有顾及到三角面片如果设定一个缓冲区那么三角面片就可以覆盖边界从而消除缝隙。 那怎么实现这个缓冲区的思路呢其实也简单在遍历顶点的时候对每个顶点在6个方向上平移一个设定值判断其是否会落入到其他体素内就可以了。若没有落入其他体素记得不要重复统计该顶点。 # 核心代码 voxel_dict1 defaultdict(list)buffer 0.2 # 设置缓冲区大小directions[np.array([1, 0, 0]), np.array([-1, 0, 0]), np.array([0, 1, 0]), np.array([0, -1, 0]), np.array([0, 0, 1]), np.array([0, 0, -1])]for i, v in tqdm(enumerate(vertices1)):k ((v - global_min) / voxel_size).astype(np.int32)voxel_dict1[tuple(k)].append(i)# 将顶点向六个方向移动一个缓冲值然后检查移动后的顶点是否会落入其他体素中for direction in directions:new_v v direction * buffernew_k tuple(((new_v - global_min) / voxel_size).astype(np.int32))if not np.array_equal(new_k, k): # 检查顶点是否移动到了其他体素中voxel_dict1[tuple(new_k)].append(i)以下分别是无缓冲区、缓冲值为0.1,、缓冲值为0.2的结果。 耗时8分钟左右且跟体素尺寸无关不会随着体素减小耗时指数倍增长。 实验表明这种方法简单高效可以有效去除异源mesh融合时的缝隙。在这里最朴素的思想反而是最实用的。 打完收工
http://www.pierceye.com/news/808158/

相关文章:

  • 网站推广技术哪家好专业网站开发建设
  • 义乌营销型网站建设淘宝做动图网站
  • dedecms能做什么网站素材网站怎么做
  • 一流导航设计网站wordpress 七牛 插件
  • 新开元电销系统济南网站优化技术厂家
  • 有名的网站建设wordpress安装到主机
  • 网站建设的指导思想p2p金融网站建设
  • 可在哪些网站做链接郑州展厅设计公司
  • 怎么可以黑网站域名做网页的心得体会
  • 设计素材免费下载网站做广告牌子
  • 名师工作室网站建设 意义常州网站建设专业的公司
  • 中国建设银行官网站预定红念币天元建设集团有限公司地址
  • wix做网站教程网站建设 销售提成
  • 长安网站建设费用开天猫旗舰店网站建设
  • 网页游戏网站哪个最好专业建站公司建站系统该规划哪些内容
  • 青岛网站建设公司大全在那些网站上做企业宣传好
  • 天河定制型网站建设中国科技成就的例子
  • 网站报备查询android安卓软件下载
  • 百度站长平台网站验证wordpress关闭略缩图
  • 网站怎么做qq微信登陆界面设计的有趣的网站推荐
  • 设计logo网站赚钱注册域名怎么做网站
  • 网站备案 教程网站设计大全推荐
  • 临沂建设局网站官网文明网站建设工作进度表
  • 网站编辑seo旅游网站建设代码
  • 为什么自己做的网站打开是乱码wordpress live-2d
  • 素材下载网站电商自建站
  • 浙江省的网站建设公司有哪些代理注册公司一般多少钱
  • 如何在建设银行网站预约纪念币东莞网站建设服务有什
  • 有哪些可以做h5的网站代理网址上境外网
  • 做网站所需要的代码6红杏直播