如何用OpenMesh创建一个四棱锥

Posted CSU迦叶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用OpenMesh创建一个四棱锥相关的知识,希望对你有一定的参考价值。

自己凭空构造一个如图所示的四棱锥,基本信息是[V, E, F] = [5, 9, 6]

各个点的坐标是A(0,0,1)  B(-1,1,0)  C(1,1,0)  D(1,-1,0)  E(-1,-1,0)

确定面片添加顺序是AED->ACB->ADC->ABE->BDE->DBC

注意:每个面的点加入的顺序应为相对于该面片朝外的法向量是逆时针分布

// IoTestPro.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <OpenMesh/Core/IO/MeshIO.hh>
#include <OpenMesh/Core/Mesh/TriMesh_ArraykernelT.hh>
#include <OpenMesh/Core/Mesh/PolyConnectivity.hh>

typedef OpenMesh::TriMesh_ArrayKernelT<> TriMesh;

int main()

	TriMesh mesh;//预计是一个四棱锥
	TriMesh::VertexHandle vhandle[5];//点的句柄数组
	std::vector<TriMesh::VertexHandle> face_vhandles;//一个面中含有多个点

	vhandle[0] = mesh.add_vertex(TriMesh::Point(0, 0, 2));//点A
	vhandle[1] = mesh.add_vertex(TriMesh::Point(-1, 1, 0));//点B
	vhandle[2] = mesh.add_vertex(TriMesh::Point(1, 1, 0));//点C
	vhandle[3] = mesh.add_vertex(TriMesh::Point(1, -1, 0));//点D
	vhandle[4] = mesh.add_vertex(TriMesh::Point(-1, -1, 0));//点E
    
	//构造面AED并加入mesh
	face_vhandles.push_back(vhandle['A' - 65]);
	face_vhandles.push_back(vhandle['E' - 65]);
	face_vhandles.push_back(vhandle['D' - 65]);
	mesh.add_face(face_vhandles);

	//构造面ACB并加入mesh
	face_vhandles.clear();
	face_vhandles.push_back(vhandle['A' - 65]);
	face_vhandles.push_back(vhandle['C' - 65]);
	face_vhandles.push_back(vhandle['B' - 65]);
	mesh.add_face(face_vhandles);

	//构造面ADC并加入mesh
	face_vhandles.clear();
	face_vhandles.push_back(vhandle['A' - 65]);
	face_vhandles.push_back(vhandle['D' - 65]);
	face_vhandles.push_back(vhandle['C' - 65]);
	mesh.add_face(face_vhandles);

	//构造面ABE并加入mesh
	face_vhandles.clear();
	face_vhandles.push_back(vhandle['A' - 65]);
	face_vhandles.push_back(vhandle['B' - 65]);
	face_vhandles.push_back(vhandle['E' - 65]);
	mesh.add_face(face_vhandles);

	//构造面BDE并加入mesh
	face_vhandles.clear();
	face_vhandles.push_back(vhandle['B' - 65]);
	face_vhandles.push_back(vhandle['D' - 65]);
	face_vhandles.push_back(vhandle['E' - 65]);
	mesh.add_face(face_vhandles);

	//构造面DBC并加入mesh
	face_vhandles.clear();
	face_vhandles.push_back(vhandle['D' - 65]);
	face_vhandles.push_back(vhandle['B' - 65]);
	face_vhandles.push_back(vhandle['C' - 65]);
	mesh.add_face(face_vhandles);


	return 0;


以上是关于如何用OpenMesh创建一个四棱锥的主要内容,如果未能解决你的问题,请参考以下文章

Cesium绘制一个旋转发光的四棱锥

Cesium绘制一个旋转发光的四棱锥

Cesium绘制一个旋转发光的四棱锥

8.1 基本立体图形 --棱柱棱锥棱台

在几何画板中切割三棱锥的方法

MT89三棱锥的体积公式