基于chenhan的测地路径解

chenhancc的Python项目详细描述


chenhancc
====


python中的一种快速测地线算法,它跨越曲面和多边形。如果使用三维图形和三角形网格,您会发现它很有用。如果给定一个pt<;a>;作为种子,则此算法会找到网格上任意点<;p>;的平滑点。
<;p>;
此算法纯粹基于Shiqing的论文,他也为我提供了这段美妙的C++代码。我所要做的就是做一些更改,这样就可以将它编译为一个python库。纯python实现与c++->;python转换之间的时间或效率差异至少为210x倍。
<;/>;

我衷心感谢他的帮助。离散测地线问题的chen和han算法改进。ACM图形事务(TOG)。2009年8月1日;28(4):104.
```

----
运行测试
----



下面的代码片段是测试Chenhancc库的一些示例::

-
-
使用python3进行的简单测试/usr/bin/env python3

sting base model');
bmodel=cbasemodel();
bmodel.loadmodel(verts,faces);

print('testing rich model');

rmodel.loadmodel(verts,faces);
rmodel.preprocess();


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



演示-搅拌机
----


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

代码::python
将IChWith进一步PriorityQueue作为IChWith进一步PriorityQueue的IChWith进一步PriorityQueue进行排队;


>m=c.active_对象;
>svid=0;
>evid=20000;


returnl[n:]+l[:n];


>def createPathMesh(point):
>myvertexlist=[[2,2,2,2,2],[4,4,4,4,4,4,4,4,4,4,6,6,6,6,6,6,>
obname="path_u"+str(len(points));
me=bpy.data.meshes.new(obname);
ob=bpy.data.objects.new(obname,me);

bmesh在这里可以做任何事情…
对于index,co in enumerate(points):
v=bm.verts.new(co);
v.index=index;


bm.verts.sure_lookup_table();

co in enumerate(points[1:]:
v1=bm.verts[index-1];
v2=bm.verts[index];
e=bm.edges.new((v1,v2));



scn=bpy.context.scene;
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嫒indICES];
faces.append(face(f_vids[0],f_vids[1],f_vids[2]);

bmodel.loadmodel(verts,faces);
bmodel.preprocess();

emethod=ichwithfurtpriorityqueue(bmodel,set([svid]);
emethod.execute();
paths=emethod.findsourcevertex(evid,[]);
paths=rotate(paths,1);


path_verts=[];


路径中的epoint:
pt=epoint.get3dpoint(bmodel);
path_verts.append(vector((pt.x,pt.y,pt.z));
创建pathmesh(path_verts);
打印('done found路径::');

-
-
安装
-
-
**在任何操作系统上(Linux、OS X、Mac、Windows)**

-克隆此存储库
-在分发库文件中导航
-运行"python3 setup.py build"-创建
-运行"python3 setup.py install--user`-用于在本地库中进行复制
-或者这可以很快成为pip,或者已经作为``pip3 install chenhancc``



**自己编译所有内容的先决条件**
-此代码是使用binder创建的pybind11的magic绑定器编译的。

*[github活页夹链接](https://github.com/rosettacommons/binder)。

*[pybind11的github链接](https://github.com/pybind/pybind11)。

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

推荐PyPI第三方库


热门话题
并行处理java。util。同时发生的叉子在游泳池里。常见的并行性准则,用于选择正确的并行度大小   java如何将空白字符追加到指定长度?   安卓应用程序中出现错误,SSLHandshakeException,找不到证书路径的信任锚点   java如何使用JUnit Mockito验证检查方法是否未被调用   java如何使用不同的@RequestMapping解析多个控制器中的静态页面   Selenium中的javascript需要验证搜索结果   访问数据库SQLiteopenHelper方法时java应用程序崩溃(nullpointerexception)   在二叉树中验证最小堆时出现java空指针异常   Java 7的SSL连接失败   java用RestEasyWebTarget替换ProxyFactory不起作用   在Java应用程序中单击“否”按钮后,数组程序冻结(无响应)   数组中的前缀Java初学者前进和   Java HTML解析器,包括脚本标记和LineNumberReader   在java中为长类型数字加前导零   正则表达式无法映射正则表达式java。lang.IllegalArgumentException:模式段中捕获组的数量