C++-读取二维坐标文件,并且存储在vector中

https://blog.csdn.net/rishown/article/details/79738560

/*
* 程序目标:读取txt文件中的坐标,并且存储在vector、矩阵和数组中
*
* 摘要:
*1.这篇文章包含两个基础内容,文件流操作和vector操作,可以参考下面两篇文章:
*2.文件流操作:https://blog.csdn.net/a125930123/article/details/53542261
*3.vector操作:https://blog.csdn.net/armman/article/details/1501974
*
*/
 
 
 
 
#include <stdafx.h>
#include <iostream>
#include <fstream>
#include <opencv2/opencv.hpp>
 
using namespace std;
using namespace cv;
 
 
************利用点的vector存储读取的坐标*************//
//vector是一个序列,读取每个值的方式是 vector.at(i)
int main()
{
	ifstream circle;
 
	//定义点的vector
	typedef Point_<double> Point2d;
	vector<Point2d> points;
 
	//定义点,作为push_back的对象
	//这个需要注意,vector的每一项需要作为一个整体来pushback,数组就pushback数组,类就pushback类。
	Point2d temp;
 
	//定义两个变量,用来存储读取的数据
	double temp1 = 0, temp2 = 0;
 
	circle.open("Circle.txt");
 
	//!circle.eof() 用来控制什么时候读取终止
	for(int i = 0; !circle.eof(); i++)
	{
	//读取txt文件的坐标值
	circle >> temp1 >>temp2;
	temp.x = temp1;
	temp.y = temp2;
	points.push_back(temp);
	}
 
	for(int i = 0; i < points.size(); i++)
	{
	cout <<"[" <<points.at(i).x <<"  ,  " <<points.at(i).y <<"]" <<endl;
	}
 
	circle.close();
	system("pause");
}
 
 
 
************利用Mat来存储读取的坐标*************//
//int main()
//{
//	ifstream in;
//	Mat A(200, 2, CV_64F);
//	Mat_<double> Points = (Mat_<double>&) A;
//	double temp;
//	in.open("Circle.txt");
//	for(int i = 0; i < 200; ++i)
//	{
//	for(int j = 0; j < 2;j++)
//	{
//	//读取txt文件的坐标值
//	in >> temp;
//	Points(i, j) = temp;
//	}
//	}
//	for(int i = 0; i < 200; ++i)
//	{
//	for(int j = 0;j < 2; j++)
//	{
//	cout <<Points(i, j) <<"\t";
//	}
//	}
//	in.close();
//	system("pause");
//}
 
 
************利用二维数组存储读取的坐标*************//
//int main()
//{
//	ifstream in;
//	double weight[20][20];
//	in.open("Circle.txt");
//	for(int i = 0; i < 20; ++i)
//	{
//	for(int j = 0; j < 20;j++)
//	{
//	in >> weight[i][j];
//	}
//	}
//	for(int i = 0; i < 20; ++i)
//	{
//	for(int j=0;j<20;j++)
//	{
//	cout <<weight[i][j] <<"\t";
//	}
//	}
//	in.close();
//	system("pause");
//}
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C++,可以使用STL文件读取库来读取和解析STL文件。下面是使用C++代码读取STL文件的基本流程: 1. 打开STL文件读取文件头信息。 2. 解析文件的三角形面片信息,可以使用二进制或ASCII格式。 3. 将每个三角形的顶点坐标、法向量等信息保存到一个数据结构,例如三维向量。 4. 关闭STL文件。 以下是一个简单的C++程序,用于读取二进制格式的STL文件: ``` #include <iostream> #include <fstream> #include <vector> using namespace std; // 三维向量结构体 struct Vec3f { float x, y, z; }; // 三角形面片结构体 struct Triangle { Vec3f normal; Vec3f v1, v2, v3; }; // 读取二进制格式的STL文件 vector<Triangle> readSTLBinary(string filename) { vector<Triangle> triangles; ifstream file(filename.c_str(), ios::in | ios::binary); if (file.fail()) { cerr << "Error: Cannot open file " << filename << endl; return triangles; } // 读取文件头信息 char header[80] = ""; file.read(header, 80); // 读取三角形数量 uint32_t numTriangles = 0; file.read((char*)&numTriangles, sizeof(uint32_t)); // 逐个读取每个三角形的信息 for (uint32_t i = 0; i < numTriangles; i++) { Triangle triangle; // 读取法向量 file.read((char*)&triangle.normal, sizeof(triangle.normal)); // 读取三个顶点的坐标 file.read((char*)&triangle.v1, sizeof(triangle.v1)); file.read((char*)&triangle.v2, sizeof(triangle.v2)); file.read((char*)&triangle.v3, sizeof(triangle.v3)); // 跳过属性字节 char attribute = ""; file.read(attribute, 2); triangles.push_back(triangle); } file.close(); return triangles; } int main() { vector<Triangle> triangles = readSTLBinary("example.stl"); for (auto& triangle : triangles) { cout << "Normal: (" << triangle.normal.x << ", " << triangle.normal.y << ", " << triangle.normal.z << ")" << endl; cout << "Vertex 1: (" << triangle.v1.x << ", " << triangle.v1.y << ", " << triangle.v1.z << ")" << endl; cout << "Vertex 2: (" << triangle.v2.x << ", " << triangle.v2.y << ", " << triangle.v2.z << ")" << endl; cout << "Vertex 3: (" << triangle.v3.x << ", " << triangle.v3.y << ", " << triangle.v3.z << ")" << endl; } return 0; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值