从键盘获取图中顶点数据和关系 //1.获取顶点数据进行存储 //2.关系数组进行赋初值 //3.获取关系进行相应位置的存储
时间: 2023-12-08 15:03:28 浏览: 48
可以使用以下代码从键盘获取图中顶点数据和关系:
```
// 1. 获取顶点数据进行存储
for(int i = 0; i < graph.v_num; i++){
cin >> graph.V[i];
}
// 2. 关系数组进行赋初值
for(int i = 0; i < graph.v_num; i++){
for(int j = 0; j < graph.v_num; j++){
graph.R[i][j] = 0; // 如果是有向图,可以将0改成INF或其他标记
}
}
// 3. 获取关系进行相应位置的存储
for(int i = 0; i < graph.arc_num; i++){
int start, end, weight;
cin >> start >> end >> weight; // 输入边的起点、终点和权值
graph.R[start][end] = weight; // 如果是有向图,只存储start到end这一条边
graph.R[end][start] = weight; // 如果是无向图,存储两条边
}
```
其中graph是一个图的结构体,包含了顶点个数、边或弧的数目、顶点数组和关系数组。在输入边的起点、终点和权值时,可以根据实际情况进行修改。
相关问题
osg 如何修改/删除节点中的部分顶点数据并进行可视化更新
在OpenSceneGraph (OSG)中,要修改或删除节点中的部分顶点数据并进行可视化更新,可以按照以下步骤进行操作:
1. 获取节点:首先,需要获取包含要修改的顶点数据的节点。可以使用场景图遍历或根据节点名称等方式获取到要操作的节点。
2. 获取顶点数据:使用节点的getOrCreateStateSet()方法获取节点的状态集。然后,通过getStateAttribute()方法和类型标识(如osg::Geometry)获取到几何体属性节点(osg::Geometry)。再通过osg::Geometry的getVertexArray()方法获取到顶点数据数组osg::Vec3Array。
3. 修改顶点数据:根据需要,可以直接通过osg::Vec3Array的方法修改顶点数据。例如,可以使用set()方法修改指定索引处的顶点坐标,或使用push_back()方法添加新的顶点。
4. 更新可视化:修改完顶点数据后,需要更新场景图以进行可视化更新。可以调用osg::NodeVisitor类的traverse()方法遍历整个场景图,并调用osg::Geometry的dirtyDisplayList()和dirtyBound()方法标记几何体属性需要更新。之后,调用osgViewer::Viewer类的frame()方法更新视图。
下面是一个简单的示例代码片段,展示了如何修改节点中的顶点数据并进行可视化更新:
```cpp
// 获取节点
osg::ref_ptr<osg::Node> node = ...;
// 获取顶点数据
osg::Geometry* geometry = dynamic_cast<osg::Geometry*>(node->getOrCreateStateSet()->getAttribute(osg::StateAttribute::Type::GEOMETRY));
osg::Vec3Array* vertices = dynamic_cast<osg::Vec3Array*>(geometry->getVertexArray());
// 修改顶点数据
(*vertices)[0] = osg::Vec3(1.0, 2.0, 3.0); // 修改第一个顶点坐标
// 更新可视化
geometry->dirtyDisplayList();
geometry->dirtyBound();
osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;
viewer->setSceneData(node);
viewer->frame();
```
请注意,这只是一个简单的示例,实际操作可能会涉及更多的步骤和细节,具体根据你的场景和需求进行相应的修改和扩展。
.obj文件中,f 1//1 2//2 3//3的意思
在.obj文件中,f 1//1 2//2 3//3表示一个由顶点和法线索引组成的面。具体解释如下:
- f:表示面(face)数据。
- 1//1:表示第一个顶点的索引和法线的索引。在这种情况下,顶点索引和法线索引相同,都是1。
- 2//2:表示第二个顶点的索引和法线的索引。同样地,顶点索引和法线索引都是2。
- 3//3:表示第三个顶点的索引和法线的索引。顶点索引是3,法线索引是3。
这种写法表示面的每个顶点都有一个对应的法线指定,以确定面的朝向。双斜线“//”之间的数字表示省略了纹理坐标索引。因此,这种写法适用于没有纹理映射的模型。
需要注意的是,面数据中的索引是相对于之前定义的顶点和法线数据的顺序编号。例如,如果之前定义了三个顶点和三个法线的数据,在面数据中使用的索引应该在对应的范围内。
总结起来,f 1//1 2//2 3//3表示一个由三个顶点和对应的法线构成的面,这些顶点和法线的索引分别为1、2、3。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)