基于chenhan的测地路径解

py-chenhancc的Python项目详细描述


chenhancc
===


python中的一种快速测地线算法,通过多边形跨越曲面

<;p>;
<;img src="./images/dog.png"height="200">;<;img src="./images/cat.png"height="200">;<;img src="./images/man.png"height="200">;
<;辛世青博士(http://web站点,谷歌.com /站点/新诗清/)提供了原始C++源代码。我衷心感谢他对我的帮助
(BR/>)该算法纯粹是基于石青的论文,它也为我提供了极好的C++代码。我所要做的就是做一些更改,这样就可以将它编译为一个python库。纯Python实现和C++& GT;Python转换的时间或效率差异至少是210倍。
<;/>;

````
xin sq,王国杰。离散测地线问题的chen和han算法改进。ACM图形事务(TOG)。2009年8月1日;28(4):104.
```



相当直截了当。我放弃使用binder来生成用于windows的pybind11绑定代码。尝试创建pxd文件并使用autowrap生成pyx文件。目前看来很有希望。

安装ubuntu


**预请求**

-此代码使用cython和autowrap模块编译以生成pyx文件。不需要自己生成pyx文件。它已经为windows和gcc系统生成了

*[github link for autowrap](https://github.com/uweschmitt/autowrap)。



**在任何操作系统(linux、os x、mac,windows)**

-您可以使用pip安装
-do``pip install chenhancc```

问题
----
-unix系统-使用pip install```pip install chenhancc```由于blah blah原因,命令gcc编译失败将失败。我是通过导出``export cc=x86_64-linux-gnu-g++```
来实现这一点的-接下来,如果您在设置了上述步骤之后发现它仍然失败,请确保您至少拥有gcc版本4.9。看起来GCC 4.8对编译器选项中的STD= C++ 14标志感到恼火。这两个步骤应该能帮到你。
-Windows和Macintosh系统-我发现在Macintosh机器上很难操作。将很快测试它,并更新所有你与什么是必要的。如果有人愿意帮我一把,那就请。



许可证
----

这个世界太奇怪了,即使是免费的东西也要付出代价。你注意到了吗,即使是免费的许可证,也有很多变体?在克隆存储库之后,您可以随意做您想做的事情。

演示
——

然后在为chenhancc安装sharedobject之后,您还应该安装另一个blender插件来查看网格上的实时路径。存储库的链接是[这里](https://github.com/aalavandhaann/ch_bl_geodesics)。安装插件后,开始单击网格并查看连续单击之间的路径。



演示-搅拌机
----


您将在"演示"文件夹中找到"搅拌机"文件夹。有一个混合文件可以测试场景中加载的网格。只要确保加载一个网格,用鼠标选择它并运行脚本`(alt-p)`。您应该可以在Blender的文本编辑器中看到代码中提供的选定顶点之间的路径。在下面的代码中,更改"svid"和"evid"以更改顶点选择。` svid`是种子顶点索引,"evid"是应该找到路径的目标顶点索引。

```

其思想是在测地线算法内部为网格表示提供点和面信息

基于搅拌机的API模块导入结束-----

从Py_Chenhancc导入c basemodel作为基本模型,c richmodel作为richmodel,c point3d作为point3d,c face作为face,cichwithfurtpriorityqueue作为ichwithfurtpriorityqueue;


c=bpy.context;
m=c.active_object;
svid=0;
evid=20000;


def rotate(l,n):
return l[n:]+l[:n];


def createpathmesh(points):
myvertexlist=[[2,2,2],[4,4,4],[6,6,6],[8,8,8]]

obname="path_+str(len(points));
me=bpy.data.meshes.new(obname);
ob=bpy.data.objects.new(obname,me);

对于索引,枚举中的co(点):
v=bm.verts.new(co);
v.index=index;



对于索引,枚举中的co(点[1:]:
v1=bm.verts[index-1];
v2=bm.verts[index];
e=bm.edges.new((v1,v2));




scn.objects.link(ob);
scn.objects.active=ob;
ob.select=true;



if(m):
verts=[];
faces=[];
loops=m.data.loops;

bmodel=richmodel();

m.data.vertices[evid].select=true;

m.data.vertices:
p3d=point3d(v.co.x,v.co.y,v.co.z);
verts.append(p3d);

m.data.polygons:
f-vids=[loops[lid].vertex_index for lid in f.loop撸index];
faces.append(face(f_vids[0],f_vids[1],f_vids[2]);

bmodel.preprocess();

emethod.execute();
paths=emethod.findsourcevertex(evid,[]);
路径=旋转(路径,1);


path_verts=[];


path中的epoint:
pt=epoint.get3dpoint(bmodel);
path_verts.append(vector((pt.x,pt.y,pt.z));
createPathMesh(path_verts);
print('done found the paths::');
```

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
安卓中通过TCP发送时java文件损坏   Java测试预期=异常失败,断言错误   java ssh4 LazyInitializationException   java是否可以在集合中添加重复项?   java是一个免费的开源数据库管理工具   java是否可以在导出的html中嵌入图像   编译器构造解释一些东西,并用Java运行生成的字节码?   java KeyPairGenerator未生成随机密钥   java使用正则表达式生成字符串而不是匹配字符串   java中的多线程线程间通信   具有复合密钥的java Hibernate合并问题   java不能在MainActivity类之外使用SharedReferences变量   正在获取切割/零件异常消息。使用java Spring ControllerAdvice   java tomcat漏洞讨论   javascript在Java中实现“system”命令   java如何在JUnit5*中加载*Spring测试上下文之前获取回调?   java bluej关于缺少返回语句   JavaSpringBoot@ModelAttribute包含使用字符串键的其他模型   从可选中抛出异常。ifPresent()Java 8