C++生成等高线2

使用easyX库

easyX库的安装尤其简单,在官网下载程序后,点击使用后安装到相关IDE上即可。
easyX库的使用和Graphic类相似,甚至比它还要简单,首先初始化一个界面:
initgraph(width, height);

然后指定背景颜色,填充背景等:

setbkcolor(WHITE);
cleardevice();
setlinecolor(BLACK);
setfillcolor(RED);

然后就可以划线了,这里花了一个二维坐标轴:

line(30, height - 30, width - 30, height - 30);
line(30, 30, 30, height - 30);
line(width - 45, height - 45, width - 30, height - 30);
line(width - 45, height - 15, width - 30, height - 30);
line(15, 45, 30, 30);
line(45, 45, 30, 30);

最后用画填充圆的方式画点:

for (int i = 0; i < lineNum; i++) {
    solidcircle((points.front().x - xsmall)*0.1 + 50, height - (0.1*(points.front().y - ysmall) + 50), 5);
    
    points.pop_front();
}

这里要注意循环的截止不能是points.size(),因为points每次pop_front()size都会减少。
同时这里的0.150等数据都是为了让点能在界面中间显示,为了美观。
最后还需要注意窗口坐标系(暂且给它这个名字)的原点是定义在左上角的,向右为x轴,向下为y轴。

最后显示结果

在这里插入图片描述

最后实现代码

 int width = 700;
 int height = 500;
 initgraph(width, height);
 setbkcolor(WHITE);
 cleardevice();
 setlinecolor(BLACK);
 setfillcolor(RED);
 
 line(30, height - 30, width - 30, height - 30);
 line(30, 30, 30, height - 30);
 line(width - 45, height - 45, width - 30, height - 30);
 line(width - 45, height - 15, width - 30, height - 30);
 line(15, 45, 30, 30);
 line(45, 45, 30, 30);
 
 list<double>::iterator biggest = max_element(begin(pointsx), end(pointsx));
 list<double>::iterator smallest = min_element(begin(pointsx), end(pointsx));
 double xsmall = *smallest;
 double len_x = *biggest - *smallest;
 list<double>::iterator biggest2 = max_element(begin(pointsy), end(pointsy));
 list<double>::iterator smallest2 = min_element(begin(pointsy), end(pointsy));
 double ysmall = *smallest2;
 double len_y = *biggest2 - *smallest2;
 for (int i = 0; i < lineNum; i++) {
     solidcircle((points.front().x - xsmall)*0.1 + 50, height - (0.1*(points.front().y - ysmall) + 50), 5);     
     points.pop_front();
 }
 getchar();
  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
如果你想要在 C++ 中实现地理等高线的功能,可以使用以下步骤: 1. 读取地形高度数据,可以从 DEM(数字高程模型)文件中读取,或者使用其他方法获取高度数据。 2. 根据高度数据生成等高线,通常使用插值算法来计算每个点的高度值,并根据高度值确定该点是否在等高线上。 3. 可以使用图形库来绘制等高线图,例如 OpenGL、OpenCV 等。 下面是一个简单的示例代码,仅用于演示如何生成等高线: ```c++ #include <iostream> #include <cmath> using namespace std; const int ROWS = 100; // DEM 数据的行数 const int COLS = 100; // DEM 数据的列数 const double INTERVAL = 10.0; // 等高线间隔 double dem[ROWS][COLS]; // DEM 数据 // 计算两点之间的距离 double distance(int x1, int y1, int x2, int y2) { return sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2)); } // 插值算法,计算指定点的高度值 double interpolate(int x, int y) { double sum = 0; int count = 0; for (int i = x - 1; i <= x + 1; i++) { for (int j = y - 1; j <= y + 1; j++) { if (i >= 0 && i < ROWS && j >= 0 && j < COLS && (i != x || j != y)) { sum += dem[i][j]; count++; } } } return sum / count; } // 生成等高线 void generateContour() { for (double h = INTERVAL; h <= 1000; h += INTERVAL) { for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { if (dem[i][j] >= h - INTERVAL && dem[i][j] < h) { bool isContour = false; for (int k = i - 1; k <= i + 1; k++) { for (int l = j - 1; l <= j + 1; l++) { if (k >= 0 && k < ROWS && l >= 0 && l < COLS) { double d = distance(i, j, k, l); if (dem[k][l] >= h && d > 0 && d <= sqrt(2)) { isContour = true; break; } } } if (isContour) { break; } } if (isContour) { // 将该点描绘为等高线上的点 // 例如使用 OpenGL 绘制点 glPointSize(2); glBegin(GL_POINTS); glColor3f(1.0, 1.0, 1.0); glVertex2f(i, j); glEnd(); } } } } } } int main() { // 读取 DEM 数据 // ... // 生成等高线 generateContour(); return 0; } ``` 需要注意的是,这只是一个简单的示例代码,实际上生成等高线的算法更加复杂,需要考虑插值算法的选择、等高线的平滑处理等问题。同时,绘制等高线图也需要根据实际需求选择合适的图形库和渲染方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值